Pies y subfiguras

Todas las figuras están bien numeradas y aun así \ref imprime otro número: el «número de figura equivocado», el problema más reportado en LaTeX, casi siempre viene de escribir \label antes de \caption. No hay error ni aviso; solo el dígito impreso miente en silencio. El comando de leyenda parece modesto, pero la numeración, las referencias cruzadas y el índice de figuras se deciden todos aquí. Esta página cubre por qué \caption solo funciona dentro de un flotante, dónde debe ir \label, el estilo con el paquete caption, \captionof para lo que no es un flotante, y las subfiguras etiquetadas (a) y (b).

Por qué \caption solo funciona dentro de un flotante

\caption{…} adjunta texto explicativo a una figura o tabla, pero solo funciona dentro de figure o table. Si se escribe en el texto corriente, se detiene con ! LaTeX Error: \caption outside float. La razón es que el comando no se limita a componer texto: mira dentro de qué tipo de flotante está y avanza el contador correspondiente. Dentro de figure incrementa el contador figure; dentro de table, el contador table. Fuera de un flotante esa información no existe, así que no hay número que asignar. Por eso mismo nunca se escribe el número a mano, y no debe hacerse.

latex
\begin{figure}
  \centering
  \includegraphics[width=0.6\textwidth]{plot}
  \caption{Measured values against the theoretical curve}
  \label{fig:plot}   % after \caption -- always
\end{figure}

Una nota sobre la costumbre: la leyenda de una figura va normalmente debajo de la figura, y la de una tabla encima de la tabla. Una tabla se lee de arriba abajo, así que es natural anunciar antes lo que contiene. LaTeX compone \caption justo donde se escribe: antes de la imagen para una leyenda superior, después para una inferior; el formato en sí —la separación entre número y texto, etc.— no cambia con la posición. Dicho esto, suele decidirlo la publicación, así que consulta primero su guía de estilo.

Qué ocurre cuando \label va antes de \caption

\label debe ir siempre después de \caption. Todo lo que hace \label es registrar «el número actual», y el comando que actualiza ese número actual al de la figura es \caption. Si \label va primero, registra el último contador que se movió, normalmente el número de sección. Compila, dentro de la sección 5, una figura que debería llevar el número 2 con su \label antes del \caption: el archivo auxiliar recibe \newlabel{fig:before}{{5}{1}...} y el texto imprime «Figura 5». Ni error, ni aviso. Si no se revisa la salida con los propios ojos, el fallo sobrevive hasta la versión final.

La trampa tiene una forma reconocible. Resulta natural escribir \label justo detrás de \includegraphics, como si se le pusiera una etiqueta a la imagen. Pero lo que \label señala no es la imagen: es un contador, y quien fija ese contador es \caption. El remedio es sencillo: mantener siempre \caption y \label en dos líneas contiguas. Sin nada en medio, no hay margen para equivocar el orden. Lo mismo vale dentro de las subfiguras: un \label en una subfigure va detrás del \caption de esa subfigura. La mecánica general de \label y \ref se trata en la página de referencias cruzadas.

Encabezados cortos y lista de figuras: \caption[...]{...}, \caption*, \ContinuedFloat

Cuando una leyenda es larga y en el índice de figuras solo cabe una línea, lo que hace falta es el argumento opcional: \caption[encabezado corto]{texto largo}. Lo de los corchetes va a \listoffigures; lo de las llaves se compone junto a la figura. Si se omiten los corchetes, el texto completo se cuela también en el índice, que se arruina en cuanto varias figuras llevan leyendas de tres líneas. En un documento de prueba, \caption[Short entry for the list]{A long caption that is only shown under the figure} solo registra la forma corta en el archivo .lof. Cuando la leyenda contiene matemáticas o un \cite, dejar sencilla la versión entre corchetes evita además accidentes de composición en el índice.

Cargar el paquete caption pone dos variantes al alcance. \caption*{…} produce una leyenda ni numerada ni listada, lo adecuado para un frontispicio o una lámina de apertura de capítulo. \ContinuedFloat hace que un flotante herede el número del flotante anterior, que es lo que hace falta cuando una figura grande debe partirse en varios flotantes. Pon \ContinuedFloat al principio de un \begin{figure} y luego \caption{Continued}: lo que se imprime es una segunda lámina que sigue numerada como «Figura 1». Es el recurso estándar para una figura de conjunto que abarca varias páginas sin inflar la numeración.

latex
% short entry for the list, full text under the figure
\caption[Measured values and the model]{Measured values (dots) against the
  theoretical curve (solid). Error bars are one standard deviation.}

% no number, no entry in the list of figures
\caption*{Frontispiece}

% second sheet of a split figure keeps the previous number
\begin{figure}
  \ContinuedFloat
  \centering\includegraphics[width=\linewidth]{survey-part2}
  \caption{Continued}
\end{figure}

Dar estilo con el paquete caption: \captionsetup

Para cambiar la fuente, el separador entre número y texto o la alineación se usa el paquete caption. Su autor es Axel Sommerfeldt, su nota de copyright se remonta a 1994 y la versión incluida en TeX Live 2024 es la v3.6o de agosto de 2023: una herramienta mantenida por una sola persona durante tres décadas. Se carga con \usepackage{caption} y se configura con \captionsetup{clave=valor, …}. Lo esencial de ese comando es su alcance: escrito en el preámbulo rige todo el documento; escrito dentro de un flotante rige solo esa leyenda.

ClaveValores comunesEfecto
formatplain / hangCómo se compone el cuerpo; hang sangra las líneas siguientes al ancho de la etiqueta
labelsepcolon / period / space / quad / newlineSeparador entre etiqueta y texto; por omisión colon
fontsmall / footnotesize / it …Fuente y tamaño de toda la leyenda
labelfontbf / sc / it …Fuente solo de la etiqueta «Figure 1»
textfontit / rm …Fuente solo del texto descriptivo
justificationjustified / centering / raggedrightAlineación; justificada por omisión
widthuna longitud (p. ej. 0.8\textwidth)Estrecha el ancho en el que la leyenda se parte
singlelinechecktrue / falseActivo por omisión; centra cualquier leyenda de una línea sin importar justification

La última clave, singlelinecheck, es el valor por omisión que más sorprende. Si escribiste justification=raggedright y aun así las leyendas cortas se centran, esta es la razón: cualquier leyenda que quepa en una línea se centra automáticamente. Añade singlelinecheck=false para mantenerlas a la izquierda. Para dar estilos distintos a figuras y tablas, nombra el tipo de flotante entre corchetes: \captionsetup[figure]{…} y \captionsetup[table]{…}. Las plantillas de revista suelen traer su propio \captionsetup, así que antes de añadir el tuyo conviene comprobar que no estás pisando el suyo.

latex
\usepackage{caption}
\captionsetup{labelfont=bf, labelsep=period, font=small,
              justification=raggedright, singlelinecheck=false}

% different rules per float type
\captionsetup[figure]{justification=centering}
\captionsetup[table]{font=footnotesize}

Poner leyenda a algo que no es un flotante: \captionof

Cuando una figura debe quedarse justo en este punto del texto en lugar de flotar, pero se quiere numeración y referencias normales, el comando es \captionof{tipo}{texto}. Dentro de un minipage o center, donde \caption a secas se niega a funcionar, \captionof{figure}{…} incrementa el contador figure, añade una línea al índice de figuras y permite que \ref se resuelva bien. Compílalo dentro de un minipage: si el flotante anterior era «Figura 1», este pasa a ser «Figura 2» y consigue su propia entrada en el .lof. Ahí está la clave del comando: quitar la maquinaria de flotación y conservar la de numeración.

Una salvedad: \captionof no es un comando estándar de LaTeX, así que escribirlo sin cargar caption da ! Undefined control sequence. Si quieres el comando pero no el estilo del paquete, el ligero capt-of proporciona \captionof por sí solo. Y la regla de orden tampoco cambia aquí: también con \captionof, \label va después.

latex
\usepackage{caption}   % or the lightweight capt-of

\begin{center}
  \includegraphics[width=0.5\textwidth]{diagram}
  \captionof{figure}{A figure fixed in the text, outside any float}
  \label{fig:inline}
\end{center}

Dividir una figura en (a) y (b) con subcaption

Para alinear figuras pequeñas dentro de una sola figura, cada una con su subetiqueta (a), (b), (c), el estándar actual es el paquete subcaption, también de Sommerfeldt. Escribir \usepackage{subcaption} carga caption por debajo, así que no hace falta nombrar los dos. La herramienta principal es el entorno subfigure (subtable para tablas), que exige un ancho como argumento obligatorio, como en \begin{subfigure}[b]{0.45\textwidth}. En la práctica es un minipage, y se rellena con un \includegraphics y un \caption. Un \caption dentro de una subfigure se convierte en la subetiqueta (a)/(b); el \caption de fuera numera la figura completa.

latex
\usepackage{graphicx}
\usepackage{subcaption}   % loads caption itself

\begin{figure}
  \centering
  \begin{subfigure}[b]{0.45\textwidth}
    \centering
    \includegraphics[width=\linewidth]{before}
    \caption{Before}
    \label{fig:before}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.45\textwidth}
    \centering
    \includegraphics[width=\linewidth]{after}
    \caption{After}
    \label{fig:after}
  \end{subfigure}
  \caption{Before and after processing}
  \label{fig:compare}
\end{figure}

Al compilar eso, la figura completa pasa a ser «Figura 1» mientras que las dos subfiguras se componen como «(a) Before» y «(b) After». Desde el texto, \ref{fig:compare} devuelve «1» y \ref{fig:before} devuelve «1a»: una referencia a una subfigura es el número de la figura unido a la subetiqueta. Si solo quieres la subetiqueta, \subref{fig:before} da una «a» sola y \subref*{fig:before} da «(a)». Existe además una forma de una línea, \subcaptionbox[entrada de lista]{encabezado}[ancho][pos interna]{contenido}. Su sintaxis coloca el \label dentro del argumento del encabezado, como en \subcaptionbox{Before\label{fig:before}}{\includegraphics{…}}. Para una subfigura que no contiene más que una imagen, resulta más corta que varias líneas de minipage.

subfigure, subfig, subcaption: tres generaciones y un choque silencioso

Los paquetes de subfiguras vienen en tres generaciones, y sus nombres parecidos provocan confusiones constantes. El más antiguo, subfigure, está obsoleto y usa un comando \subfigure; su sucesor subfig ofrece \subfloat pero tampoco se mantiene ya de forma activa. Los documentos nuevos deben usar subcaption. El problema surge a mitad de la migración: añades subcaption sin notar que la plantilla ya carga subfig.

Lo desagradable del choque es que no ocurre nada al cargarlos. Pon ambos en el preámbulo y subcaption se limita a escribir una línea informativa en el registro —Package subcaption Info: The counter 'subfigure' was already defined by...— sin aviso ni error. Después renuncia en silencio a definir su propio entorno subfigure. El documento avanza tan tranquilo hasta el primer \begin{subfigure}, momento en que se derrumba con ! LaTeX Error: Environment subfigure undefined., seguido de una cascada de Missing number e Illegal unit of measure. Dicho de otro modo, el lugar donde aparece el error no es el lugar que lo causa. Ante este patrón, busca primero subfig y subfigure en todo el preámbulo: las probabilidades son mayores cuando se trabaja dentro de una plantilla de revista.

  • subcaption — el estándar actual: entornos subfigure / subtable, \subcaptionbox, \subref. Carga caption por ti.
  • subfig — la generación anterior, con \subfloat. Vale en documentos existentes; no lo elijas para los nuevos.
  • subfigure — el más antiguo, con \subfigure. Obsoleto, no lo uses.
  • Nunca los combines — exactamente uno. Comprueba si la plantilla ya carga alguno antes de añadir otro.