Respuestas:
Esta respuesta se centra en lo que me interesa, por lo tanto, se utiliza minted
para las listas de código fuente con Org, y tikzmark
como 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):
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
, #+LABEL
y [[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.