我想\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
一个解决方案是使用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}