# Legend referencing in caption *and* externalization

I am trying to make a reference to a plot inside a figure's caption while using the externalize library.

The issue of plot reference using externalization has already been raised in this question. I decided notto externalize the references images and defined the following command:

\newcommand{\plotref}1{\tikzexternaldisable\ref{#1}\tikzexternalenable}

Then, the following code with the reference outside the caption works :

\documentclass{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=tikz/,shell escape=-enable-write18]

\newcommand{\plotref}[1]{\tikzexternaldisable\ref{#1}\tikzexternalenable}

\begin{document}

\begin{figure}
\centering
\tikzset{external/remake next}
\tikzsetnextfilename{figname}
\begin{tikzpicture}[baseline]

1 4
2 4.2
3 3.1
4 2.5
}\table

\begin{axis}[width=5cm,height=5cm]

\addplot table[x index=0,y index=1]{\table};\label{LAB}

\end{axis}
\end{tikzpicture}
\caption{You must defeat Sheng Long to stand a chance.}
\label{dummy}
\end{figure}

Xyzzy ! \plotref{LAB} happens.

\end{document}


I have seen in this question that legend in caption are normally possible. However, the following code with the reference inside the caption does not work :

\documentclass{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=tikz/,shell escape=-enable-write18]

\newcommand{\plotref}[1]{\tikzexternaldisable\ref{#1}\tikzexternalenable}

\begin{document}

\begin{figure}
\centering
\tikzset{external/remake next}
\tikzsetnextfilename{figname}
\begin{tikzpicture}[baseline]

1 4
2 4.2
3 3.1
4 2.5
}\table

\begin{axis}[width=5cm,height=5cm]

\addplot table[x index=0,y index=1]{\table};\label{LAB}

\end{axis}
\end{tikzpicture}
\caption{Xyzzy ! \plotref{LAB} happens.}
\label{dummy}
\end{figure}

You must defeat Sheng Long to stand a chance.

\end{document}


It raises the following error message

! Incomplete \iffalse; all text was ignored after line 35. \fi

that I fail to interpret.

An alternative to not externalizing the small reference images has been proposed in this question but I did not understand how to implement it and don't know if this would solve my problem.

Do you know how to make plot references in caption and use externalization ?

Side note: it sometimes simpler and more effective to do things manually. See this question for similar results, not automatic but somehow more straightforward.

-
Does it help to write \protect\plotref{LAB} in your caption? I suppose that it is an expansion issue; your \plotref command is "fragile" in terms of LaTeX, and "fragile" commands need to be \protected inside of captions, section titles etc. –  Christian Feuersänger Aug 1 '12 at 20:32
It does help. Now something happens and I stand a chance ! Can you copy and paste your comment into an anwer so that I can accept it? –  Alfred M. Aug 2 '12 at 9:52

You should write \protect\plotref{LAB} in your caption. I suppose that it is an expansion issue; your \plotref command is "fragile" in terms of LaTeX, and "fragile" commands need to be \protected inside of captions, section titles etc.