使用 -output-directory 时 TikZ 外部化

使用 -output-directory 时 TikZ 外部化

我正在使用 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}

但重要的是,prefixequalsoutput-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(在 之前添加目录) 。目前,这还不能完全奏效,但可以手动使用此方法(或者也许cdcd--change_directory此请求请求打通后即可cluttex直接使用)

相关内容