我正在使用 tikzexternalize 来加快速度并获得一个干净的工作目录,并且我正在使用-output-directory
编译来获得一个干净的工作目录(实际上我使用cluttex
,但我也看到了同样存在的问题-output-directory
)。
所以我的 tex 代码看起来像这样
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=figures/] % activate and define figures/ as cache folder
\begin{document}
\begin{tikzpicture}
\node[draw] {lore ipsum};
\end{tikzpicture}
\end{document}
并进行编译
pdflatex -shell-escape -output-directory='tex-aux' main.tex
(实际上我正在使用 LuaLaTeX,但使用普通 (pdf)latex 时问题仍然存在)。
我得到的错误是
\write18 enabled.
entering extended mode
! I can't write on file `figures/main-figure0.log'.
(Press Enter to retry, or Control-D to exit; default file extension is `.log')
Please type another transcript file namesystem returned with code 256
! Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-e
rror -interaction=batchmode -jobname "figures/main-figure0" "\def\tikzexternalr
ealjob{main}\input{main}"' did NOT result in a usable output file 'figures/main
-figure0' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that 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 command simpl
y failed? Error messages can be found in 'figures/main-figure0.log'. If you con
tinue now, I'll try to typeset the picture.
See the tikz package documentation for explanation.
Type H <return> for immediate help.
...
l.12 \end{tikzpicture}
所以我知道删除-output-directory='tex-aux'
所有内容都可以正常工作(我甚至尝试手动创建文件夹tex-aux/figures
以防出现问题,但没有帮助)。
我也知道检查系统调用是否启用的提示不应该是问题,因为它们已启用-shell-escape
。
对于可能存在的问题(以及如何解决)有什么建议吗?
答案1
解决方案 1:使用cluttex --output-directory=tex-aux -e lualatex -shell-escape main.tex
with
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=tex-aux/]
\begin{document}
\begin{tikzpicture}
\node[draw] {lore ipsum};
\end{tikzpicture}
\end{document}
但重要的是,prefix
equalsoutput-directory
和文件夹output-directory
必须output-directory/prefix
存在。到目前为止,这对我来说似乎是最干净的方法(不需要太多配置工作),但我不确定这是否适用于所有设置,因为我们用前缀欺骗了外部库。
解决方案2:使用类似的
cd tex-aux && \
cp ../main.tex ./ && \
lualatex -recorder -halt-on-error -interaction=nonstopmode -file-line-error -shell-escape -jobname='main' "\makeatletter\def\input@path{{..}}\makeatother\input{main.tex}" \
&& cp $@ ../
($@
输出文件来自make
)
这里我们将父目录添加到路径中(参见https://tex.stackexchange.com/a/24827/206293) 这样不仅可以在编译命令的直接调用中找到‘main.tex’,而且可以在 tikz-extern lib 发出的编译命令中找到。
解决方案 3:正常情况下,查看cluttex
代码时,应该结合使用标志的方法进行修改TEXINPUTS
(在 之前添加目录) 。目前,这还不能完全奏效,但可以手动使用此方法(或者也许cd
cd
--change_directory
此请求请求打通后即可cluttex
直接使用)