自动创建缓存目录

自动创建缓存目录

以下 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文件不可移植。

相关内容