11

I would like to put a matrix in a figure caption. The following example demonstrates the idea:

\documentclass{amsart}
\usepackage{graphics,  epsfig, psfrag}  

\begin{document}

\begin{figure}
\begin{picture}(0,0)(-72,-75)
\put(12,-68){\small$\alpha_2$}
\put(-15,-71){\small$\alpha_1$}
\put(-50,-60){\small$-\alpha_1$}
\put(-47,-44){\small$2\alpha_1+\alpha_2$}
\put(-60,-10){\small$-2\alpha_1-\alpha_2$}
\end{picture}
\caption{Some roots, associated to the Cartan matrix $\left(\begin{smallmatrix}2&-2\\-1&2\end{smallmatrix}\right)$.}
\end{figure}

\end{document}

Trying to compile this produces

Argument of \@caption has an extra }

I assume this means I shouldn't use the \} character in captions. But how can I make a matrix without one?

The actual figure is much more complicated and invokes the named packages as well as the picture environment, which is why I included them; the image here has no mathematical meaning.

  • 3
    Just a quick hint: You'll make your small matrix much more readable, and your code easier to read/debug in the process, if you define the matrix as a macro of the form, say, \newcommand\cartanmatrix{\ensuremath{\textstyle\big({\begin{smallmatrix}\phantom{-}2& -2 \\-1&\phantom{-}2\end{smallmatrix}}\big)}} and then refer to it later as \cartanmatrix. :-) – Mico Nov 10 '11 at 17:41
14

Boxing the smallmatrix first also solves the problem. For this, you have to define a box using \newsavebox{<box>} and store the contents using \savebox{<box>}{<stuff>}:

\newsavebox{\smlmat}% Box to store smallmatrix content
\savebox{\smlmat}{$\left(\begin{smallmatrix}2&-2\\-1&2\end{smallmatrix}\right)$}

Here is a complete minimal example:

enter image description here

\documentclass{amsart}
\begin{document}

\newsavebox{\smlmat}% Box to store smallmatrix content
\savebox{\smlmat}{$\left(\begin{smallmatrix}2&-2\\-1&2\end{smallmatrix}\right)$}

\begin{figure}
\begin{picture}(0,0)(-72,-75)
\put(12,-68){\small$\alpha_2$}
\put(-15,-71){\small$\alpha_1$}
\put(-50,-60){\small$-\alpha_1$}
\put(-47,-44){\small$2\alpha_1+\alpha_2$}
\put(-60,-10){\small$-2\alpha_1-\alpha_2$}
\end{picture}
\caption{Some roots, associated to the Cartan matrix~\usebox{\smlmat}.}
\end{figure}

\end{document}​
  • 3
    This will fail if a List of Figures needs to be produced. – Gonzalo Medina Nov 10 '11 at 17:47
  • @GonzaloMedina: You are correct. – Werner Nov 10 '11 at 17:53
  • 4
    Moving the lines \newsavebox{...}, \savebox{...} to the preamble solves the problem with \listoffigures. – Gonzalo Medina Nov 10 '11 at 18:14
10

You can use the optional argument of \caption:

\caption[Roots associated to the Cartan matrix]{Some roots, associated to the Cartan matrix $\left(\begin{smallmatrix}2&-2\\-1&2\end{smallmatrix}\right)$.}

After all, the matrix wouldn't look good in a list of figures.

Another way of avoiding the error is to load the caption package an using the singlelinechek=off option; this approach, however, will fail if a List of Figures needs to be produced:

\documentclass{amsart}
\usepackage{graphics,  epsfig, psfrag}  
\usepackage{caption}

\begin{document}

\begin{figure}
\captionsetup{singlelinecheck=off}
\begin{picture}(0,0)(-72,-75)
\put(12,-68){\small$\alpha_2$}
\put(-15,-71){\small$\alpha_1$}
\put(-50,-60){\small$-\alpha_1$}
\put(-47,-44){\small$2\alpha_1+\alpha_2$}
\put(-60,-10){\small$-2\alpha_1-\alpha_2$}
\end{picture}
\caption{Some roots, associated to the Cartan matrix $\left(\protect\begin{smallmatrix}2&-2\\-1&2\protect\end{smallmatrix}\right)$.}
\end{figure}

\end{document}
  • Thanks! Could you explain why I should have expected that to work? – David E Speyer Nov 10 '11 at 17:28
  • 2
    @DavidSpeyer: The explanation is somehow involved, but you can read the first lines of Appendix A.4 Errors of the documentation of the caption package, and the links therein provided. – Gonzalo Medina Nov 10 '11 at 17:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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