外部化 pgfplots 中的参考资料

外部化 pgfplots 中的参考资料

我正在写一个包含大量 pgfplots 的文档。由于 LaTeX 内存限制,为了节省一些编译时间,我尝试了这个externalize命令。对于大多数图,它都完美地运行了。但是当我使用该\ref命令时,\ref{<legendname>}图例会丢失,取而代之的是??。我认为这个问题在某种程度上类似于使用 subfig 和 cleverref 引用外部化的 pgfplots使用外部化 pgfplot 图作为参考。但是这些问题的答案都不能解决我的问题。甚至使用xrzref包也没有任何效果。

我是不是遗漏了什么?


主文档的 MWE:

\documentclass{article}
\usepackage{zref-user}
\usepackage{xr-hyper}
\usepackage{pgfplots}
\usetikzlibrary{pgfplots.groupplots}
\usepgfplotslibrary{external} 
\tikzexternalize
\externaldocument{part1}

\begin{document}
\input{part1}
\end{document}

看起来part1.tex像这样:

\begin{tikzpicture}
    \begin{groupplot}[  
    group style= {  columns=3,xlabels at=edge bottom,
                y descriptions at=edge left,
                horizontal sep=2cm,group name=plots},
    width=0.4\textwidth,
    xtick=data,
    legend columns=3]
    \nextgroupplot[xlabel=site 1,legend to name=grouplegend]
    \addplot coordinates {(1,20)(2,23)(3,24.5)};
    \addlegendentry {AaAaA,BbBbB,CcCcC}%
    \nextgroupplot[xlabel=site 2]
    \addplot coordinates {(1,14)(2,16)(3,17)};
    \nextgroupplot[xlabel=site 3]
    \addplot coordinates {(1,10)(2,11.5)(3,12.25)};
    \end{groupplot}
  % Legend
    \node at (plots c2r1.north) [anchor=south] {\ref{grouplegend}};
\end{tikzpicture}

我使用 MikTeX 2.9 和所用软件包的最新更新进行编写。我使用命令 进行编译pdflatex -enable-write18 <file name>

我希望 MWE 足够短;)并且有人知道如何解决这个问题。

答案1

关于你的问题的补充说明:
首先,我想向你展示我对你的案例在 MWE 中的想法。我删掉了你的groupplot因为(正如我在https://tex.stackexchange.com/q/40511/7049问题不在于groupplot)。您应该测试您的 MWE,然后删除一些内容,再次测试,问题是否仍然存在?然后再删除一些内容。继续这样做,直到您找到导致问题的确切原因!这不仅会帮助我们,还会帮助您更好地找到可能的问题。

好的,这是针对您问题的 MWE。我可以看到您已经尝试了其他软件包,但对于这个,问题仍然存在。(我忽略了zref-user和的使用xr-hyper)。

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{external} 
\tikzexternalize

\begin{document}
\begin{tikzpicture}
  \begin{axis}[legend to name=fig:1:legend] % Define legend reference
    \addplot coordinates {(1,20)(2,23)(3,24.5)};
    \addlegendentry{AaAaA}
  \end{axis}
  \node at (0,-2) {\ref{fig:1:legend}}; % reference legend
\end{tikzpicture}
\end{document}

问题

您所遇到的问题在pgf/tikz手册中有说明A)根据第支持外部文件中的标签和引用

但是,当您尝试使用
a)\ref主文档中外部化图形中的某些内容或
b)\label主文档中引用的外部化图形时,需要注意一些事项。

本节还描述了您的案例:

只有一个特殊情况:如果\label/\ref组合本身由应该外部化的实现tikzpicture,则需要按照情况 a) 进行操作,因为mode=convert with system call它无法自行处理这些内容。因此,\label自动工作,只需经常翻译主文档即可。

您的解决方法如文档中所述,您需要pdflatex再拨打一次电话。

然而,所有这些都会记录在您的日志中,外部库非常聪明,它甚至会告诉用户您需要进行手动后处理。
它会写出您仍有一些未定义的引用。在本例中,这些引用是针对外部化图片中的标签的。

解决方案 1

因此答案是您必须手动调用以下命令以满足您的需要:
pdflatex -shell-escape -interaction=batchmode -jobname "test-figure0" "\def\tikzexternalrealjob{<insert your document name>}\input {<insert your document name>}"

解决方案 2

另一种方法是使用pgfplots专门的命令\pgfplotslegendfromname{<ref>},它可以解决pgfplots图例中环境中的明确引用问题。

由@thewaywewalk 提供

相关内容