我想使用 externalize 库。到目前为止,它运行良好并创建了 pdf 文档。但现在我想获取“png”文件。根据 externalize 文档,我尝试了以下操作:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=,figure list=true]
\tikzset{
png export/.style={
% First we call ImageMagick; change settings to requirements
external/system call/.add={}{& magick.exe -density 300 "\image.pdf" "\image.png"},
% Now we force the PNG figure to be used instead of the PDF
/pgf/images/external info,
/pgf/images/include external/.code={
\includegraphics[width=\pgfexternalwidth,height=\pgfexternalheight]{##1.png}
},
}
}
\begin{document}
\tikzset{png export}
\tikzsetnextfilename{Figure-A}%
\begin{tikzpicture}
\draw (0,0) circle (2) ;
\end{tikzpicture}
\end{document}
但这确实会导致 Windows 11 + MiKTeX Console 4.9 + TeXstudio 4.5.2(git 4.5.2)+ ImageMagick 7.1.1-5 Q16-HDRI x64 + lualatex(LuaHBTeX,版本 1.16.0(MiKTeX 23.1))中出现错误:
进程:lualatex.exe -synctex=1 -interaction=nonstopmode -shell-escape "main".tex
解释:“认为“magick.exe”编写错误或无法创建链接。” (英文意思是:“命令“magick.exe”拼写错误或无法找到。”)
日志:“包 luatex.def 错误:未找到文件‘Figure-A.png’:使用草稿设置。\end{tikzpicture}”
据我所知,Figure-A.log 文件没有显示任何错误,但 main.log 文件在此行显示错误:
\openout4 = main.figlist
Writing 'Figure-A' to 'main.figlist'.
\openout3 = Figure-A.md5
\openout3 = main.auxlock
===== 'mode=convert with system call': Invoking 'lualatex -shell-escape -halt-o
n-error -interaction=batchmode -jobname "Figure-A" "\def\tikzexternalrealjob{ma
in}\input{main}"& magick.exe -density 300 "Figure-A.pdf" "Figure-A.png"' ======
==
\openout3 = main.auxlock
LaTeX Warning: File `Figure-A.png' not found on input line 24.
! Package luatex.def Error: File `Figure-A.png' not found: using draft setting.
See the luatex.def package documentation for explanation.
Type H <return> for immediate help.
...
l.24 \end{tikzpicture}
Try typing <return> to proceed.
If that doesn't work, type X <return> to quit.
概括:
-) Figure-A.pdf 文件已创建,但从“pdf”文件到“png”文件的转换似乎存在问题。
-) 如果我在命令行而不是 TeXStudio 上运行该过程,则会出现同样的问题。
-) 当我在一次 latex 运行(生成 Figure-A.pdf)后在命令行上尝试“magick.exe -density 300 "Figure-A.pdf" "Figure-A.png"”时,它完美地生成了图像“Figure-A.png”。
-) 我发现它适用于 pdflatex,所以这似乎是 lualatex 的问题。虽然我不知道问题出在哪里,但我需要 lualatex...
如果有人能调查此事并帮助我,我将不胜感激。
答案1
正如 @cfr 指出的那样,使用可执行文件的完整路径解决了该问题,在我的情况下意味着以下路径:
external/system call/.add={}{& "C:\\Program Files\\ImageMagick-7.1.1-Q16-HDRI\\magick.exe" -density 300 "\image.pdf" "\image.png"}
这将首先生成 pdf 文件,然后生成 png 文件,然后将 png 包含在我的文档中。