Réponses:
Cette réponse se concentre sur ce qui m'intéresse, elle est donc utilisée minted
pour les listes de code source avec Org, et tikzmark
comme package qui peut "marquer" un endroit dans votre liste afin que vous puissiez vous y référer ultérieurement à partir d'une image Tikz. Voici un exemple simple (MIS À JOUR):
#+LATEX_HEADER: \usepackage{tikz}
#+LATEX_HEADER: \usepackage{minted}
#+LATEX_HEADER: \usetikzlibrary{tikzmark}
#+OPTIONS: toc:nil
* Using minted with tikzmark
# Org mode sample configuration (in your init.el file):
#+BEGIN_SRC emacs-lisp :exports none
(setq org-latex-listings 'minted)
(setq org-latex-minted-options
'(("frame" "lines") ("linenos" "true")))
#+END_SRC
#+ATTR_LATEX: :caption \caption{Yes}\label{lst:code}
#+BEGIN_listing
#+ATTR_LATEX: :options escapeinside=||
#+BEGIN_SRC c
#include <stdio.h>
int main()
{
// comment
printf("hello world\n"); |$\tikzmark{too}$|
return 0;
}
#+END_SRC
#+END_listing
#+BEGIN_LaTeX
\begin{tikzpicture}[overlay,remember picture]
\draw[dashed,->] (pic cs:too) ++(0,0.25) to[bend left]
++(5,-1)node[right]{$\bullet$ Here it is too!};
\end{tikzpicture}
#+END_LaTeX
As you can see in code listing \ref{lst:code}, \ldots
... et voici le résultat (exporté vers LaTeX - XeLaTeX dans mon cas):
J'ai modifié la réponse d'origine pour montrer comment placer des marques en dehors des commentaires (en utilisant l'option pygments "escapeinside", au lieu de l'option "mathescape" limitée aux commentaires de la réponse d'origine) et comment configurer une légende, une étiquette pour cet environnement , et aussi comment obtenir une référence. HTH
2ÈME MISE À JOUR: Voici une version du même code (même sortie), qui parvient à utiliser #+CAPTION
, #+LABEL
et des [[lst:ref]]
styles à la place de ceux en latex, ET se débarrasse complètement de l'environnement de listage enveloppant:
#+LATEX_HEADER: \usepackage{tikz}
#+LATEX_HEADER: \usetikzlibrary{tikzmark}
#+OPTIONS: toc:nil
* Using minted with tikzmark
# Org mode configuration:
#+BEGIN_SRC emacs-lisp :exports none
(setq org-latex-listings 'minted)
(setq org-latex-minted-options
'(("frame" "lines") ("linenos" "true") ("escapeinside" "||")))
#+END_SRC
#+LABEL: lst:code
#+CAPTION: Yes
#+BEGIN_SRC c
#include <stdio.h>
int main()
{
// comment
printf("hello world\n"); |$\tikzmark{too}$|
return 0;
}
#+END_SRC
#+BEGIN_LaTeX
\begin{tikzpicture}[overlay,remember picture]
\draw[dashed,->] (pic cs:too) ++(0,0.25) to[bend left]
++(5,-1)node[right]{$\bullet$ Here it is too!};
\end{tikzpicture}
#+END_LaTeX
As you can see in [[lst:code]], \ldots
Cela n'a pas fonctionné, jusqu'à ce que je me débarrasse de la #+ATTR_LATEX:
ligne - peu importe où j'ai essayé de le mettre, cela a interféré avec l'association entre légende / étiquette et le bloc source.