¿Cómo agregar anotaciones en el bloque src de PDF como en esta captura de pantalla?

Respuestas:

10

Esta respuesta se centra en lo que me interesa, por lo tanto, se utiliza mintedpara las listas de código fuente con Org, y tikzmarkcomo el paquete que puede "marcar" un lugar en su lista para que luego pueda consultarla desde una imagen de Tikz. Aquí hay un ejemplo simple (ACTUALIZADO):

#+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

... y este es el resultado (exportado a LaTeX - XeLaTeX en mi caso):

ingrese la descripción de la imagen aquí

Edité la respuesta original para mostrar cómo colocar marcas fuera de los comentarios (usando la opción de pigmentos "escapeinside", en lugar de la opción "mathescape" limitada por comentario de la respuesta original) y cómo configurar un título, una etiqueta para este entorno , y también cómo obtener una referencia. HTH


2da ACTUALIZACIÓN: Aquí hay una versión del mismo código (misma salida), que logra usar #+CAPTION, #+LABELy [[lst:ref]]estilos en lugar de los de látex, Y elimina completamente el entorno de listado envolvente:

#+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

Esto no funcionó, hasta que me deshice de la #+ATTR_LATEX:línea; no importa dónde intenté ponerla, interfirió con la asociación entre el título / etiqueta y el bloque fuente.

VanLaser
fuente