Wie schreibe ich den Org-Modus (muss möglicherweise LaTeX verwenden), um diesen Effekt zu archivieren?
Wie schreibe ich den Org-Modus (muss möglicherweise LaTeX verwenden), um diesen Effekt zu archivieren?
Antworten:
Diese Antwort konzentriert sich auf das, woran ich interessiert bin. Daher wird sie minted
für Quellcodelisten mit Org und tikzmark
als Paket verwendet, das einen Platz in Ihrer Liste "markieren" kann, damit Sie später von einem Tikz-Bild darauf verweisen können. Hier ist ein einfaches Beispiel (AKTUALISIERT):
#+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
... und das ist das Ergebnis (in meinem Fall nach LaTeX - XeLaTeX exportiert):
Ich habe die ursprüngliche Antwort bearbeitet, um zu zeigen, wie Markierungen außerhalb von Kommentaren platziert werden (mithilfe der Option "Escapeinside" anstelle der kommentarbeschränkten Option "mathescape" aus der ursprünglichen Antwort) und wie eine Beschriftung, eine Bezeichnung für diese Umgebung, eingerichtet wird und auch, wie man einen Verweis darauf bekommt. HTH
2. UPDATE: Hier ist eine Version desselben Codes (gleiche Ausgabe), die verwendet werden kann #+CAPTION
, #+LABEL
und [[lst:ref]]
Stile anstelle der Latex- Codes , UND die umhüllende Listungsumgebung wird vollständig entfernt:
#+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
Dies funktionierte nicht, bis ich die #+ATTR_LATEX:
Zeile loswurde - egal wo ich sie platzieren wollte, es störte die Zuordnung zwischen Beschriftung / Beschriftung und dem Quellblock.