我在使用 externalize 和 align 环境时遇到了问题。在一些奇怪的情况下,tikz 图形的 pdf 无法正确生成,每次编译 tex 文件时都必须重新生成。
以下是 MWE:
主文件,名为 test.tex
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize % activate with the default mode
\usepackage[cmex10]{amsmath}
\begin{document}
\tikzsetexternalprefix{figs/tikz2pdf/}
\begin{figure}
\tikzpicturedependsonfile{figs/fig.tikz}
\tikzsetnextfilename{fig}
\input{figs/fig.tikz}
\end{figure}
\begin{align}
A &= 1 \label{A} \nonumber \\
B &= 2 \label{B}
\end{align}
\end{document}
figs/fig.tikz 的内容为:
\begin{tikzpicture}
\draw (0,0) --(1,2);
\end{tikzpicture}
目录 figs/tikz2pdf 在编译之前就存在了。我使用“pdflatex -interaction=nonstopmode -shell-escape test.tex”编译代码。据我所知,这应该会创建 figs/tikz2pdf/fig.pdf,但实际上并没有。它成功创建了 test.pdf,但报告了以下两个错误:
! tikz 软件包错误:抱歉,系统调用“pdflatex -shell-escape -halt-on-e rror -interaction=batchmode -jobname "figs/tikz2pdf/fig" "\def\tikzexternalreal job{test}\input{test}"”未产生可用的输出文件“figs/tikz2pdf/fig”(预期为 .pdf:.jpg:.jpeg:.png: 之一)。请确认您已启用系统调用。对于 pdflatex,这是“pdflatex -shell-escape”。有时它也被命名为“write 18”或类似名称。或者命令可能只是失败了?错误消息可以在“figs/tikz2pdf/fig.log”中找到。如果您现在继续,我将尝试排版图片。
! 软件包 amsmath 错误:多个 \label:标签‘A’将丢失。
有趣的是:
如果我从对齐环境中删除“\nonumber”或“\label{A}”,则会创建 figs/tikz2pdf/fig.pdf。
一旦创建了 figs/tikz2pdf/fig.pdf,它就会用于 test.tex 的后续编译,而不需要重新编译 figs/fig.tikz
我知道在 align 中标记一行然后使用 \nonumber 在某种程度上是不一致的。令我困惑的是 align 环境中的错误阻止 externalize 正常工作。尽管如此,还是生成了正确的 test.pdf。总体可见的效果是包含许多 tikz 图形的文档的编译时间很长。
最后说明:我想出了提供的 MWE 来简化一个冗长而复杂的文档。之后,我删除了所有(意外的)同时标记和使用 \nonumber 的情况,之后 externalize 仍然无法从 tikz 图形生成 pdf。因此,我怀疑之前的 MWE 可能是重现更复杂问题的一种方法。
任何对此的解释都值得感激。我做错了什么吗?我遗漏了什么吗?
编辑:我似乎忘记了同时标记和使用 \nonumber 的情况。删除后,外部化做从 tikz 图形生成 pdf,因此这似乎是关键问题。
答案1
生成单独图形的过程pdf
涉及对输入文档进行完整扫描。此扫描经过优化,许多昂贵的宏除非是目标图形的一部分,否则将被禁用。但这仍然是一次完整扫描。
如果扫描过程中出现任何错误,导出就会失败。看起来好像确实发生了这种情况。您将在 中看到根本原因的解释figs/tikz2pdf/fig.log
。
您收到完整的 test.pdf 的原因在于-interaction nonstopmode
:它报告了错误,但继续处理文档。在这种情况下,外部库会重复该过程,就好像它不会尝试进行外部化一样。
总之:请修复主文档中的所有错误,否则外部库也会失败。