Come aggiungere annotazioni nel blocco src PDF come in questo screenshot?


Risposte:


10

Questa risposta è focalizzata su ciò che mi interessa, quindi utilizza mintedper elenchi di codice sorgente con Org e tikzmarkcome pacchetto che può "contrassegnare" un posto nella tua inserzione in modo che tu possa successivamente farvi riferimento da un'immagine di Tikz. Ecco un semplice esempio (AGGIORNATO):

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

... e questo è il risultato (esportato in LaTeX - XeLaTeX nel mio caso):

inserisci qui la descrizione dell'immagine

Ho modificato la risposta originale per mostrare come posizionare i segni all'esterno dei commenti (utilizzando l'opzione "escapeinside" dei pigmenti, anziché l'opzione "mathescape" limitata dal commento dalla risposta originale) e come impostare una didascalia, un'etichetta per questo ambiente e anche come ottenerne un riferimento. HTH


2 ° UPDATE: Ecco una versione dello stesso codice (stesso output), che riesce a uso #+CAPTION, #+LABELe [[lst:ref]]gli stili al posto di quelli in lattice, e si libera dell'ambiente messa in vendita avvolgente completamente:

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

Questo non ha funzionato, fino a quando non mi sono liberato della #+ATTR_LATEX:linea - non importa dove ho provato a metterlo, ha interferito con l'associazione tra didascalia / etichetta e il blocco sorgente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.