จะสร้าง PNG จากรูป TikZ ด้วย org-babel ได้อย่างไร?

Jan 11 2021

ฉันพยายามใช้ org-babel เพื่อสร้างภาพจากรหัส tikz

รหัสแรก (ใช้จากตัวอย่างนี้ ) ทำงานได้อย่างสมบูรณ์ แต่เมื่อคุณต้องการส่งออกรูป tikz เป็น png (หรือ jpg) ฉันมีข้อผิดพลาดเช่น:

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

ฉันไม่พบสาเหตุของข้อผิดพลาดนี้และไม่มีบัฟเฟอร์" Org PDF LaTeX Output "

รหัสใช้เพื่อสร้าง svg (ใช้งานได้):

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

รหัสใช้เพื่อสร้าง png (ใช้ไม่ได้):

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

คำตอบ

1 doltes Jan 11 2021 at 21:52

ฉันสามารถสร้างภาพ PNG ของ TikZ ได้ด้วยตัวอย่างขั้นต่ำที่สามารถทำซ้ำได้ดังต่อไปนี้

ใน GIF ที่แสดงด้านล่างคุณจะเห็นว่าฉันดำเนินการemacsโดยใช้-Qแฟล็กและโหลดโค้ด Lisp ที่มีอยู่ในmain.elไฟล์ ภาพถูกสร้างขึ้นจากไฟล์main.orgโดยไม่มีปัญหาใด ๆ

บล็อกโค้ดต่อไปนี้แสดงเนื้อหาของmain.orgไฟล์

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

บล็อกโค้ดต่อไปนี้แสดงเนื้อหาของmain.elไฟล์

; 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)))