使用 subfig 和 cleveref 引用外部化的 pgfplots

使用 subfig 和 cleveref 引用外部化的 pgfplots

我使用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 mylatexfilebibtex mybibliography和。pdflatex -interaction=nonstopmode -shell-escape mylatexfilepdflatex -interaction=nonstopmode -shell-escape mylatexfile

.log主文档的文件中,我只收到 和 的“标签可能已更改...”消息\myfigureA{name},但即使编译几十次也无法改变这一点。我认为这可能是外部化过程的结果。外部化图像的各个日志文件显示和\myfigureB{name}都缺少大量引用,尽管在前一种情况下,它们在最终的 PDF 文档中确实有效。在后一种情况下,它们不起作用,正如前面提到的。该包似乎与此错误无关。\myfigureA{name}\myfigureB{name}cleveref

不幸的是,我已经不知道在哪里可以找到我的错误了。

答案1

我似乎看到了auto-pst-pdf和之间根深蒂固的冲突externalize。禁用前者可使我的所有参考资料可用。

另外,我也可以使用externalizeandauto-pst-pdf[runs=1]选项。不过,选项[runs=2]或更高版本可能会导致缺少引用。

相关内容