考虑以下 MWE:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\tikzset{external/system call={lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(2,2);
\end{tikzpicture}
\end{document}
当用 编译它时lualatex -shell-escape externalizeTest.tex
,会导致错误(在我的情况下,该文件名为externalizeTest.tex
)
! Package tikz Error: Sorry, the system call 'lualatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "externalize-figure0" "\def\tikzexternalre
aljob{externalize}\input{externalize}"' did NOT result in a usable output file
'externalize-figure0' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify th
at you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape
'. Sometimes it is also named 'write 18' or something like that. Or maybe the c
ommand simply failed? Error messages can be found in 'externalize-figure0.log'.
If you continue now, I'll try to typeset the picture.
然而,如果我将 改为documentclass
,standalone
一切都会顺利进行。
pdflatex
如果我使用而不是lualatex
来编译文档,情况也是如此。
有人知道这里发生了什么事吗?
答案1
现在尽管我不知道为什么发生这种情况时,我找到了解决问题的方法(另请参阅无法使用 lualatex 运行 tikz externalize,但它以前可以工作):
如果我也包括shellesc
包,那么文档lualatex
也可以很好地编译(与scrartcle
类一起)。然后 MWE 如下所示:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\tikzset{external/system call={lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\usepackage{shellesc}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(2,2);
\end{tikzpicture}
\end{document}
现在我思考我曾经读过一次,它lualatex
处理 shell 转义的方式与此不同,pdflatex
因此必须包含该shellesc
包以使其与“正常方式”兼容。
至于为什么它可以与 一起工作standalone
,我最好的猜测是这个类隐式地包含了shellesc
包。但我实际上并没有这方面的证据。
如果有人知道到底发生了什么,如果你能发表评论甚至写下自己的答案就太好了……