Comment ajouter une annotation dans le bloc PDF src comme dans cette capture d'écran?

Réponses:

10

Cette réponse se concentre sur ce qui m'intéresse, elle est donc utilisée mintedpour les listes de code source avec Org, et tikzmarkcomme 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):

entrez la description de l'image ici

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, #+LABELet 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.

VanLaser
la source