以下 MWE 将缓存文件写入tikzcache
目录
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\tikzsetexternalprefix{tikzcache/}
\begin{document}
\tikzsetnextfilename{myfig}
\begin{tikzpicture}
\node at (1,1) {test};
\node at (2,2) {test2};
\end{tikzpicture}
\end{document}
看来我需要用以下方法编译它:
pdflatex -shell-escape ...
首先,为什么-shell-escape
需要?
据我所知,-shell-escape
启用 TeX 原语\write18{command}
构造。此构造写入特殊流 18,这不是实际文件,而是一种向系统 shell 发送命令的方式。但是,使用非特权 TeX 原语应该可以创建缓存文件write
。除了安全性之外,由于人们通常使用某些 LaTeX 编辑器构建 PDF,因此需要-shell-escape
在编辑器构建命令中进行设置,这使得 LaTeX 文件不可移植。
此外,为了减少混乱,
\tikzsetexternalprefix{tikzcache/}
设置将 TikZ 缓存文件写入tikzcache
目录中。
我的问题是这个目录应该已经存在。我可以使用\immediate\write18{...}
命令在 LaTeX 中自动创建它。但是,除了需要 之外-shell-escape
,该命令远非简单。事实上,为了避免失败,应该添加逻辑以在第一次构建后跳过文件创建,即目录已经存在时。在 Linux 中,这可能就这么简单:
\immediate\write18{mkdir -p tikzcache}
然而,这在不同的系统(Windows)下不起作用,从而再次使得该.tex
文件不可移植。