梅威瑟:

梅威瑟:

我一直在网上阅读和收集来自多个来源的材料,关于外部化包含 TikZ 图片的文档需要哪些步骤,这些图片存储了对其图例的引用,legend to name=<name>并使用\ref{<name>}来在底部包含图例,例如groupplots

选项包括使用list and make而不是convert with system call,或者使用不外部化引用的技巧/技巧,方法是在序言中使用以下内容:

\pgfplotsset{
  invoke before crossref tikzpicture={\tikzexternaldisable},
  invoke after crossref tikzpicture={\tikzexternalenable},
}

由于我的文档包含 30 多个图形,而且我还没有找到一种方法来避免list and make每次都重新生成图形(也需要两次传递!),所以我唯一的选择就是尝试“黑客”方法。下面是我所拥有的 MWE。

梅威瑟:

\documentclass{article}

\usepackage{tikz,pgfplots}
\usepgfplotslibrary{groupplots}
\usepgfplotslibrary{external}
\pgfplotsset{
  compat=newest,
  invoke before crossref tikzpicture={\tikzexternaldisable},
  invoke after crossref tikzpicture={\tikzexternalenable},
}
% \tikzexternalize

\begin{document}
  \begin{figure}[]
    \centering
    \begin{tikzpicture}
      \begin{groupplot}[
        group style={
          group size=2 by 1,},]
        \nextgroupplot[scale only axis,width=0.35\textwidth,height=0.35\textwidth,legend to name=grouplegend,]
        \addplot
          coordinates {(1,1) (2,2) (3,3)};
        \addlegendentry{Legend 1}
        \addplot
          coordinates {(1,3) (2,2) (3,1)};
        \addlegendentry{Legend 2}
        \nextgroupplot[scale only axis,width=0.35\textwidth,height=0.35\textwidth]
        \addplot
          coordinates {(1,1) (2,2) (3,3)};
        \addplot
          coordinates {(1,3) (2,2) (3,1)};
      \end{groupplot}
      \node (legend) at ($(group c1r1.south)!0.5!(group c2r1.south)$)
        [below, yshift=-3\pgfkeysvalueof{/pgfplots/every axis title shift}]
        {\ref{grouplegend}};
    \end{tikzpicture}%
    \caption{The caption.}
  \end{figure}
\end{document}

如果我使用 两次编译它pdflatex -shell-escape <file>,则引用将被解析,并且图例将正确显示在两个图形的底部。同样,当list and make使用 时,运行pdflatex -shell-escape <file>make -B -f <makefile>两次也会解析引用。\tikzexternalize但是,当使用 时,我找不到解析引用的正确命令序列。无论我运行 多少次pdflatex -shell-escape <file>,引用仍未解析,图例显示“??”。

有人知道为什么序言中的技巧没有效果吗?我做错了什么吗?

答案1

事实上,没有处理外部化图像内部mode=list and make的情况是外部库的一个错误。\ref

我已经在 PGF CVS 中修复了这个问题(现在)。


潜在的解决方法:

运行后make -f P.makefile,下次运行 pdflatex 将导致日志消息

LaTeX Warning: External picture `P-figure0' contains undefined references on input line 36.

我想这是你唯一的机会:你可以生成一些简单的脚本来检查此消息。然后脚本可以删除受影响的 pdf 并重新运行 make。

相关内容