如何使用 hyperref 引用 pgfplot 图例标签?

如何使用 hyperref 引用 pgfplot 图例标签?

我想\ref将 pgf 图例标签添加到图形标题中(以解释符号)。我使用外部化创建图形。没有该hyperref包,一切都正常。但是,只要我包含hyperref,就会出现错误。

首先,使用时\caption{\ref{figurelegend}}会出错。 Paragraph endet before \Hy@setref@link was complete... 显然,超链接不起作用。但我已经预料到了这种行为,因为外部化创建的辅助文件不包含超链接信息。

作为下一种方法,我尝试使用 禁用此链接的超链接\caption{\ref*{figurelegend}}。但是,这给了我一个错误。 Exta \else ...我完全无法理解。

所以我想,也许\protect引用这个参考资料会有所帮助。不幸的是,\caption{\protect\ref*{figurelegend}}它给出了同样的错误。

我也尝试过\pgfplotslegendfromname{figurelegend}。它编译时没有错误,但我只生成“??”。不知何故,来自外部化的辅助文件似乎对于此命令不可见。

我再次强调,没有hyperref,一切都正常。那么,当 hyperref 被激活时,我该如何正确地从外部化图中引用 pgf 图例标签?

这里有一个最小工作示例

main.tex

\documentclass{article}

\usepackage{cleveref,graphicx,tikz,pgfplots}
%\usepackage{hyperref} % remove comment to break everything

\makeatletter\write\@auxout{\string\@input{figure.aux}}\makeatother % include the externalized references

\begin{document}
\section{Figures}
\begin{figure}
  \centering
  \includegraphics[width=3cm]{fig.pdf} 
  \caption{Here is a red line: \ref{figurelegend}}
\end{figure}
Some text.
\end{document}

figure.tex

\documentclass{article}
\usepackage{tikz,pgfplots}
\usetikzlibrary{external}
\tikzexternalize[force remake=true,figure list=true,mode=list and make]

\begin{document}
\tikzsetnextfilename{fig}
\begin{tikzpicture}[scale=1]
  \begin{axis}[legend pos=outer north east]
    \addplot[red,domain=1:2] {x^2}; \addlegendentry{$x^2$}; \label{figurelegend}
  \end{axis}
\end{tikzpicture}
\end{document}

汇编、唤起

pdflatex figure
make -f figure.makefile
pdflatex main

相关链接这可能对其他人有用:

  1. 如何在使用外部化时参考 pgf 图例标签。
  2. 一个简单的解决方法(由于内存问题我无法使用)是禁用感兴趣的图形的外部化。

答案1

一个解决方案是使用standalone而不是externalize(其优点是效率更高)。

\documentclass[multi={tikzpicture}]{standalone}
\usepackage{tikz,pgfplots}

\begin{document}
\begin{tikzpicture}[scale=1]
  \begin{axis}[legend pos=outer north east]
    \addplot[red,domain=1:2] {x^2}; \addlegendentry{$x^2$}; \label{figurelegend}
  \end{axis}
\end{tikzpicture}

\ref{figurelegend}
\end{document}

在这种情况下生成文件test.pdf

\documentclass{article}
\usepackage{graphicx}

\begin{document}
\listoffigures

\section{Figures}
\begin{figure}[h]
  \centering
  \includegraphics[width=3cm,page=1]{test.pdf} 
  \caption{Here is a red line: \protect\includegraphics[page=2]{test.pdf}}
\end{figure}
Some text.
\end{document}

裁剪页面

相关内容