Bagaimana cara menambahkan anotasi dalam blok src PDF seperti pada tangkapan layar ini?

Jawaban:

10

Jawaban ini difokuskan pada apa yang saya minati, oleh karena itu digunakan minteduntuk daftar kode sumber dengan Org, dan tikzmarksebagai paket yang dapat "menandai" tempat dalam daftar Anda sehingga Anda nanti dapat merujuknya dari gambar Tikz. Berikut ini contoh sederhana (DIPERBARUI):

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

... dan inilah hasilnya (diekspor ke LaTeX - XeLaTeX dalam kasus saya):

masukkan deskripsi gambar di sini

Saya mengedit jawaban asli untuk menunjukkan cara menempatkan tanda di luar komentar (menggunakan opsi pygments "escapeinside", alih-alih opsi "mathescape" terbatas komentar dari jawaban asli) dan cara mengatur keterangan, label untuk lingkungan ini , dan juga cara mendapatkan referensi untuk itu. HTH


PEMBARUAN 2ND: Berikut adalah versi kode yang sama (keluaran yang sama), yang berhasil digunakan #+CAPTION, #+LABELdan [[lst:ref]]gaya bukan yang lateks, DAN menyingkirkan lingkungan daftar menyelimuti sepenuhnya:

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

Ini tidak berhasil, sampai saya menyingkirkan #+ATTR_LATEX:garis - di mana pun saya mencoba untuk meletakkannya, itu mengganggu hubungan antara caption / label dan blok sumber.

VanLaser
sumber