Làm cách nào để tạo PNG từ hình TikZ với org-babel?

Jan 11 2021

Tôi đang cố gắng sử dụng org-babel để tạo hình ảnh từ mã tikz.

Mã đầu tiên (lấy từ ví dụ này ) hoạt động hoàn hảo, nhưng khi bạn muốn xuất hình tikz dưới dạng png (hoặc jpg), tôi gặp lỗi như:

org-compile-file: File "/tmp/babel-RNLDyr/latex-o3rO8d.pdf" wasn’t produced.  See "*Org PDF LaTeX Output*" for details

Tôi không thể tìm thấy nguyên nhân của lỗi này và bộ đệm " Org PDF LaTeX Output " không tồn tại.

Sử dụng mã để tạo svg (Nó hoạt động):

#+HEADER: :file ./images/contour.svg :imagemagick yes
#+HEADER: :results output silent :headers '("\\usepackage{tikz}")
#+HEADER: :fit yes :imoutoptions -geometry 400 :iminoptions -density 600
#+BEGIN_src latex
\begin{tikzpicture}
\draw[->] (-3,0) -- (-2,0) arc[radius=0.5cm,start angle=-180,end angle=0] (-1,0) -- (1,0) arc[radius=0.5cm,start angle=180,end angle=0] (2,0) -- (3,0);
\filldraw (-1.5,0) circle[radius=1mm];
\filldraw (1.5,0) circle[radius=1mm];
\end{tikzpicture}
#+END_src

Sử dụng mã để tạo png (Nó không hoạt động):

#+HEADER: :file ./images/contour.png :imagemagick yes
#+HEADER: :results output silent :headers '("\\usepackage{tikz}")
#+HEADER: :fit yes :imoutoptions -geometry 400 :iminoptions -density 600
#+BEGIN_src latex
\begin{tikzpicture}
\draw[->] (-3,0) -- (-2,0) arc[radius=0.5cm,start angle=-180,end angle=0] (-1,0) -- (1,0) arc[radius=0.5cm,start angle=180,end angle=0] (2,0) -- (3,0);
\filldraw (-1.5,0) circle[radius=1mm];
\filldraw (1.5,0) circle[radius=1mm];
\end{tikzpicture}
#+END_src

Trả lời

1 doltes Jan 11 2021 at 21:52

Tôi đã có thể tạo hình ảnh PNG của TikZ với ví dụ có thể tái tạo tối thiểu sau đây.

Trong ảnh GIF được hiển thị bên dưới, bạn có thể thấy rằng tôi thực thi emacsbằng cách sử dụng -Qcờ và bằng cách tải mã Lisp có trong main.eltệp. Hình ảnh được tạo từ tệp main.orgmà không có bất kỳ vấn đề nào.

Khối mã sau đây hiển thị nội dung của main.orgtệp

#+LATEX_HEADER: \usepackage{tikz}

#+begin_src latex :file main.png :results file graphics
\begin{tikzpicture}
  \draw node[circle, draw] (a) {$a$}
        node[circle, draw, right of = a] (b) {$b$}
        node[circle, draw, below of = a] (c) {$c$}
        node[circle, draw, below of = b] (d) {$d$};
\end{tikzpicture}
#+end_src

Khối mã sau đây hiển thị nội dung của main.eltệp

; The following configuration sets the font (demostration purposes)

(set-frame-font "Iosevka SS04 Light 30")

; The following configuration make Org Mode use imagemagick for processing images.
;
; This was retrieved from this question (https://emacs.stackexchange.com/questions/60696) I posted.

(setq org-preview-latex-default-process 'imagemagick)

; The following configuration disables the confirmation prompt whenever code blocks are evaluated.

(setq org-confirm-babel-evaluate nil)

; The following hook make images to be shown after code blocks are executed.

(add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images)

; The following configuration allows code blocks whose language is latex to be evaluated

(org-babel-do-load-languages 'org-babel-load-languages
                 '((latex . t)))