如何阻止 tikzexternalize 在当前目录中生成文件?

如何阻止 tikzexternalize 在当前目录中生成文件?

我正在使用 pdflatex。我使用 pdflatex 的 --output-directory 在“build”子目录中进行构建,效果非常好,每个文件都在此目录中生成。

现在,我想外部化我的 pgfplots,因此我使用:

\usetikzlibrary{external}
\tikzexternalize[shell escape=-enable-write1 -shell-escape, prefix=./build/]

在这种情况下,外部文件会在构建目录中创建(MD5 文件会在 build/build 中创建,但这并不重要)。但是,在此之后,会在工作目录中而不是在构建目录中创建几个文件。构建后,我有这些文件:

master.acn
master.glo
master.ist
master.maf
master.mw
master.run.xml

在工作目录中,而不是在构建目录中:(

我知道这些文件与 tikz 无关,但它们仅在我使用 tikzexternalize 时才会出现在这里。

为什么 tikzexternalize 在当前工作目录中创建了一些额外的文件? 是否可以删除这些文件?

谢谢

答案1

我认为最直接的方法就是prefix根本不要设置,而是做两件事。

  1. 通过覆盖默认编译命令,确保--output-directory在外部化过程运行时将其传递给编译器。

    • 这应确保全部在生成外部化图像时生成的文件会被写入build/,而不仅仅是那些与外部化直接相关的文件。
  2. 确保 TiZ 通过覆盖默认的图像包含命令在正确的位置搜索外部图像。

    • 这应该可以确保 TeX 通过直接操作包含图像时使用的路径而不是设置来在正确的位置查找外部图像prefixprefix在这里不起作用,因为它也会在外部化时使用,在生成图像时产生不必要的累积效应(build/build/<image>),但在包含它们时不会产生累积效应(build/<image>),从而导致错误。

例如,您可能需要类似这样的内容(基于您的问题中的信息和 Ti 第 609 页上解释的默认值Z 手册和第 616 页的信息):

\begin{filecontents}{\jobname.bib}
@article{author-art,
  author              =   {Author, A. N.},
  title               =   {Believe It or Not \dots},
  volume              =   290,
  year                =   3056,
  doi                 =   {44.897/gje.x789},
  pages               =   {x789},
  eprinttype          =   {gje},
  eprint              =   {x789},
  eprintclass         =   {290},
  journal             =   {Greatest Journal Ever}}
@article{author-anart,
  author              =   {Author, A. N.},
  title               =   {Suppose It or Not \dots},
  volume              =   78,
  number              =   3,
  year                =   3049,
  pages               =   {22--29},
  eprinttype          =   {jstor},
  eprint              =   {12980258},
  journal             =   {Second Best Journal Ever}}
\end{filecontents}

\documentclass[british]{article}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber]{biblatex}
\bibliography{\jobname}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\tikzset{%
  external/system call={pdflatex \tikzexternalcheckshellescape --halt-on-error --interaction=batchmode --output-directory=./build --jobname "\image" "\texsource"},
  /pgf/images/include external/.code={%
    \includegraphics{build/#1}%
  },
}
\begin{document}
\Textcite{author-art,author-anart}

\begin{tikzpicture}
  \draw (0,0) rectangle (1,1);
\end{tikzpicture}

\printbibliography

\end{document}

然后我编译了

pdflatex --shell-escape --output-directory=./build <filename>.tex 
biber --output-directory=./build <filename>
pdflatex --shell-escape --output-directory=./build <filename>.tex 

这生成了所有文件,build/并且似乎编译成功,使用外部化的图像,而不是重新编译 Ti第二次运行时的 Z 代码。

结果

答案2

您列出的文件大多与 tikz 无关,.glo是您的文档词汇表,.ist是 makeindex 样式,.run.xml由 biblatex 生成。

相关内容