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