Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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]

  \pgfplotstableread{
    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]

  \pgfplotstableread{
    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.

share|improve this question
    
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
add comment

1 Answer 1

up vote 7 down vote accepted

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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.