Wie füge ich eine Anmerkung im PDF-Quellcode-Block hinzu, wie in diesem Screenshot dargestellt?

Antworten:

10

Diese Antwort konzentriert sich auf das, woran ich interessiert bin. Daher wird sie mintedfür Quellcodelisten mit Org und tikzmarkals 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):

Geben Sie hier die Bildbeschreibung ein

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

VanLaser
quelle