我使用pgfplots
在我的文档中生成大量图像。由于 LaTeX 内存有限,我不得不使用\tikzexternalize
。此外,我还使用subfig
包将多张图片分组为单个浮点数和cleveref
包。到目前为止,一切都运行良好。但是,当我添加对外部化图像的引用时,会出现奇怪的错误。
简而言之,一些基于文件数据的图无法产生正确的引用。使用固定数据的完全相同的图确实可以产生正确的引用除此之外,这两种方法都能生成正确的图像。我唯一的问题是缺少参考资料。
由于项目的复杂性,很难提供完整的工作示例代码来处理此类错误。我希望以下解释足以让您大致了解可能出现的问题。
对于所有图像,我使用快捷命令。假设我们有
\newcommand{\myfigureA}[1]{\tikzsetnextfilename{#1}\begin{tikzpicture}
\begin{axis}[width=4cm,height=4cm]
\addplot3[surf] file{#1.data};
\end{axis}\end{tikzpicture}\label{fig:#1}}
和
\newcommand{\myfigureB}[1]{\tikzsetnextfilename{#1}\begin{tikzpicture}
\begin{axis}[width=4cm,height=4cm]
\addplot3[surf] coordinates {
(0,0,0) (1,0,0) (2,0,0) (3,0,0)
(0,1,0) (1,1,0.6) (2,1,0.7) (3,1,0.5)
(0,2,0) (1,2,0.7) (2,2,0.8) (3,2,0.5)};
\end{axis}\end{tikzpicture}\label{fig:#1}}
当我使用\myfigureB{name}
来制作某个图像时,所有引用\cref{fig:name}
都有效。另一方面,当我使用 时\myfigureA{name}
,所有引用\cref{fig:name}
都失效了,我得到的是“??”符号。但是,\myfigureA{name}
和\myfigureB{name}
都会导致完全相同的图像在最终的 PDF 文档中(假设文件中的坐标与此处给出的坐标相对应)。奇怪的是,对某些图像(始终是相同的图像)的引用确实有效。我不知道这些图像与其他图像有何不同。
使用这些命令来生成一系列四幅图像可能如下所示:
\begin{figure}[h]
\centering
\subfloat[][]{\myfigureA{name1}}
\subfloat[][]{\myfigureA{name2}} \\
\subfloat[][]{\myfigureA{name3}}
\subfloat[][]{\myfigureA{name4}}
\caption{caption text}
\end{figure}
我使用上述所有软件包的最新版本。编译由四个常用命令执行,即pdflatex -interaction=nonstopmode -shell-escape mylatexfile
、bibtex mybibliography
和。pdflatex -interaction=nonstopmode -shell-escape mylatexfile
pdflatex -interaction=nonstopmode -shell-escape mylatexfile
在.log
主文档的文件中,我只收到 和 的“标签可能已更改...”消息\myfigureA{name}
,但即使编译几十次也无法改变这一点。我认为这可能是外部化过程的结果。外部化图像的各个日志文件显示和\myfigureB{name}
都缺少大量引用,尽管在前一种情况下,它们在最终的 PDF 文档中确实有效。在后一种情况下,它们不起作用,正如前面提到的。该包似乎与此错误无关。\myfigureA{name}
\myfigureB{name}
cleveref
不幸的是,我已经不知道在哪里可以找到我的错误了。
答案1
我似乎看到了auto-pst-pdf
和之间根深蒂固的冲突externalize
。禁用前者可使我的所有参考资料可用。
另外,我也可以使用externalize
andauto-pst-pdf
和[runs=1]
选项。不过,选项[runs=2]
或更高版本可能会导致缺少引用。