我想使用 AUCTeX 创建 TikZ 图片的 PNG 图像包裹standalone
。我使用 macOS Sierra。
根据standalone
文档 v1.2-2015/07/15 (第 4.6 节转换为图像,第 15 页)
使用
convert
类选项,独立文件可以轻松转换为光栅图像。这是通过执行外部程序将输出文件(PDF 或 PS)转换为图像(建议使用无损 PNG 格式,但也支持其他格式)来完成的。
根据 4.6.1 小节转换设置(第 15 页)
转换设置可以作为选项的值给出
convert={<settings>}
。默认情况下,转换被禁用(convert=false)
。如果启用而不提供自己的设置(convert,convert=true
),则使用以下默认设置:PNG 格式,密度为 300dpi,没有明确的大小,输出文件名由 给出\jobname
,即 LaTeX 文档的名称。使用convert
除 之外的任何值的选项false
都将启用它。
根据第 4.6.2 节转换软件(第 16 页)
转换需要安装外部图像转换器程序。默认情况下,支持以下两个工具,必须安装其中之一才能使用转换功能。为了执行外部程序,必须对
-shell-escape
编译器可执行文件使用选项,例如pdflatex -shell-escape filename
。如果没有此选项,则无法进行转换。默认情况下转换程序图像魔法用于 PDF LaTeX 文件 [...]
所以我用自制(macOS 的流行软件包管理器)来安装 Image Magick。它安装在目录中/usr/local/Cellar/imagemagick/7.0.6-0
。然后,我将以下几行添加到我的 Emacs 初始化文件 ( ~/.emacs
) 中,以便 Emacs 知道在哪里查找 Image Magick 可执行文件:
(setenv "PATH" (concat (getenv "PATH") ":/usr/local/Cellar/imagemagick/7.0.6-0/bin/"))
(setq exec-path (append exec-path '("/usr/local/Cellar/imagemagick/7.0.6-0/bin/")))
重新启动 Emacs 后,我写了下面的 LaTeX 稿件,名为my_tikz_drawing.tex
:
\documentclass[tikz,convert]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- (1,1)
[rounded corners] -- (2,0) -- (3,1)
[sharp corners] -- (3,0) -- (2,1);
\end{tikzpicture}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% TeX-engine: default
%%% TeX-command-extra-options: "-shell-escape"
%%% End:
并使用 进行编译C-c C-a
。
结果是一个 PDF 文件,但没有创建 PNG 文件,至少没有在 LaTeX 手稿所在的同一目录中创建。
然后我打开终端(macOS 命令行控制台),cd
进入包含 LaTeX 手稿的目录,并执行以下命令:
pdflatex -shell-escape my_tikz_drawing
结果是my_tikz_drawing.png
同一目录中的一个文件。
可能的线索
执行以下命令(位于日志文件中),一次从终端执行,一次从 Emacs 执行(使用 M-!):
convert -density 300 my_tikz_drawing.pdf -quality 90 my_tikz_drawing.png
产生以下结果。
从终端:该命令默默执行并创建文件
my_tikz_drawing.png
。来自 Emacs:没有创建 PNG 文件,并且在迷你缓冲区中显示一条错误消息:
转换:没有定义图像‘my_tikz_drawing.png’@error/convert.c/ConvertImageCommand/3254。
这与 Emacs pdflatex 运行输出中出现的错误相同。
答案1
Emacs 找不到 GhostScript 可执行文件。运行
which gs
在终端中,复制路径,例如/usr/local/bin
。然后在 Emacs 初始化文件(例如 )中添加以下几行~/.emacs
,然后重新启动 Emacs。
(setenv "PATH" (concat (getenv "PATH") ":/usr/local/bin/"))
(setq exec-path (append exec-path '("/usr/local/bin/")))
(这些行中的第一行可能不是严格必要的,但它不会造成损害......)
这个答案是感谢 Image Magick 用户论坛中的好心人提供的,他们回答了我的帖子。