La commande \caption, qui ajoute une légende à une figure ou à un tableau, paraît modeste, mais elle est au centre de la numérotation, des renvois et des listes de figures et de tableaux. Cette page fixe d’abord les bases de \caption : elle ne fonctionne que dans un flottant, elle numérote automatiquement, elle peut recevoir un intitulé court, et \label doit être placé au bon endroit. Elle passe ensuite au package caption pour régler finement l’apparence, puis au package subcaption pour découper une figure en (a), (b), etc.
Bases de \caption
\caption{…} attache un texte explicatif, une légende, à une figure ou à un tableau. La restriction essentielle est la suivante : elle ne fonctionne qu’à l’intérieur d’un flottant, c’est-à-dire dans un environnement figure ou table. L’écrire dans le texte ordinaire provoque une erreur. Placée dans un flottant, LaTeX numérote automatiquement par type — « Figure 1 », « Table 3 » — et compose ce numéro avec le texte de la légende dans un format défini. Vous n’écrivez jamais le numéro vous-même.
Voici une figure minimale. \centering centre l’illustration, \includegraphics charge l’image, et \caption est placée en dessous.
\begin{figure}
\centering
\includegraphics[width=0.6\textwidth]{plot}
\caption{測定値と理論曲線の比較。}
\label{fig:plot}
\end{figure}Lorsqu’une légende est longue et que vous ne voulez qu’une ligne courte dans la liste des figures ou des tableaux, utilisez l’argument optionnel entre crochets : \caption[intitulé court]{texte complet}. Ce qui est entre crochets va dans la liste, tandis que ce qui est entre accolades est composé auprès de la figure. Sans crochets, le texte complet est aussi utilisé dans la liste.
\caption[測定値と理論曲線]{測定値(点)と理論曲線(実線)の比較。誤差棒は標準偏差を表す。}Pour les renvois, \label obéit à une règle facile à oublier : placez toujours \label après \caption. LaTeX ne met à jour le « numéro courant » avec le numéro de la figure qu’au moment où il traite \caption. Un \label placé avant récupère donc le compteur précédent, par exemple le numéro de section, et \ref renvoie une mauvaise valeur. Placez \label juste après \caption, sur la même ligne ou la suivante, et \ref{fig:plot} donnera correctement « 1 ».
Un mot sur les conventions : la légende d’une figure se place généralement sous la figure, celle d’un tableau au-dessus du tableau. LaTeX compose \caption exactement là où vous l’écrivez ; placez-la donc avant l’illustration pour l’avoir en haut, ou après pour l’avoir en bas. Le format lui-même — l’espace entre le numéro et le texte, etc. — ne change pas avec la position. Les revues imposent souvent cette règle, vérifiez donc d’abord les consignes.
Mise en forme avec le package caption
Pour modifier l’apparence des légendes standard — police, séparateur entre numéro et texte, alignement — utilisez le package caption d’Axel Sommerfeldt. Chargez-le dans le préambule avec \usepackage{caption}, puis réglez les options avec \captionsetup{clé=valeur, …}. Les clés les plus utiles sont :
| Clé | Valeurs courantes | Effet |
|---|---|---|
format | plain / hang | Composition du corps ; hang indente les lignes suivantes de la largeur du label |
labelsep | colon / period / space / quad | Séparateur entre le label et le texte ; colon donne « : », period donne « . » |
font | small / bf / it … | Police et taille de toute la légende |
labelfont | bf / sc … | Police de la seule partie label, comme « Figure 1 » |
justification | centering / raggedright / justified | Alignement : centré, aligné à gauche (bord droit irrégulier) ou justifié |
width | une longueur (p. ex. 0.8\textwidth) | Limite la largeur de ligne de la légende |
singlelinecheck | true / false | Indique si les légendes courtes sur une ligne sont centrées automatiquement |
Par exemple, « label en gras, séparateur point, police plus petite pour l’ensemble » se règle une fois dans le préambule comme ceci. Un \captionsetup écrit dans le préambule affecte tout le document ; écrit à l’intérieur d’un flottant, il affecte seulement cette légende.
\usepackage{caption}
\captionsetup{labelfont=bf, labelsep=period, font=small, justification=raggedright}Pour donner un style différent aux figures et aux tableaux, nommez le type de flottant entre crochets : \captionsetup[figure]{…} et \captionsetup[table]{…}. Notez que singlelinecheck est activé par défaut et centre toute légende tenant sur une seule ligne, quelle que soit votre valeur de justification. Ajoutez singlelinecheck=false pour les garder alignées à gauche.
Le package caption ajoute une autre commande pratique, \captionof{type}{texte}. Elle sert à légender un élément qui n’est pas dans un flottant : dans un minipage ou un environnement center, où \caption seul ne fonctionne pas, \captionof{figure}{…} numérote et référence correctement l’objet comme une « Figure ». C’est utile lorsque vous voulez fixer une figure et sa légende à un point précis du texte, sans passer par le placement flottant.
\begin{center}
\includegraphics[width=0.5\textwidth]{diagram}
\captionof{figure}{フロートに入れずに置いた図。}
\label{fig:inline}
\end{center}Découper une figure avec subcaption
On veut souvent placer plusieurs petites figures côte à côte dans une seule figure, chacune avec son propre sous-label (a), (b), (c). L’outil standard actuel est le package subcaption, lui aussi de Sommerfeldt. Il suffit de charger \usepackage{subcaption} ; il charge automatiquement le package caption en dessous.
L’outil central est l’environnement subfigure (subtable pour les tableaux). On lui donne un argument obligatoire de largeur — \begin{subfigure}[pos]{largeur} — tandis que l’option [b] et les autres règlent l’alignement vertical. En pratique, c’est une minipage de cette largeur, contenant un \includegraphics et un \caption. Un \caption à l’intérieur d’une subfigure devient un sous-label (a)/(b), tandis que le \caption placé hors des environnements subfigure numérote la figure entière.
Voici un exemple complet avec deux sous-figures côte à côte. Chaque subfigure a une largeur de 0.45\textwidth, et un \hfill entre les deux les pousse vers les côtés.
\usepackage{graphicx}
\usepackage{subcaption}
\begin{figure}
\centering
\begin{subfigure}[b]{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{before}
\caption{処理前}
\label{fig:before}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{after}
\caption{処理後}
\label{fig:after}
\end{subfigure}
\caption{画像処理の前後比較。}
\label{fig:compare}
\end{figure}Dans cet exemple, la figure entière devient « Figure 1 », et les deux sous-figures sont composées comme « (a) Before » et « (b) After ». Dans le texte, \ref{fig:before} renvoie « 1a » et \ref{fig:compare} renvoie « 1 ». Si vous voulez seulement le sous-label, comme « (a) », écrivez \subref{fig:before} pour obtenir « a » seul, ou \subref*{fig:before} pour obtenir « (a) ».
Outre l’environnement subfigure, il existe la commande en une ligne \subcaptionbox. Sa forme est \subcaptionbox[entrée de liste]{titre}[largeur][pos-interne]{contenu}, et il faut ici placer le \label dans l’argument du titre (par exemple \subcaptionbox{Before\label{fig:before}}{\includegraphics{…}}). Cela évite d’écrire un minipage sur plusieurs lignes, ce qui convient aux sous-figures simples contenant une seule image.
Éviter les anciens packages (subfig, subfigure)
Les packages pour sous-figures appartiennent historiquement à trois générations, faciles à confondre. Le plus ancien, subfigure, est obsolète et utilise l’ancienne commande \subfigure. Son successeur, subfig (avec \subfloat), n’est plus activement maintenu non plus. Pour les nouveaux documents, il est recommandé d’utiliser le package subcaption décrit sur cette page.
Attention : vous ne pouvez pas les charger ensemble. Mettre à la fois subcaption et subfig, ou l’ancien subfigure, dans votre liste \usepackage fait entrer leurs définitions internes en conflit et produit une avalanche d’erreurs. Un modèle de revue peut déjà charger un ancien package ; vérifiez donc ce qu’il charge avant d’en ajouter un autre.
- subcaption — le standard actuel ; environnements
subfigure/subtable, plus\subcaptionboxet\subref. Intégré au package caption ; recommandé ici. - subfig — la génération précédente, avec
\subfloat. La maintenance est au point mort ; déconseillé pour les nouveaux documents. - subfigure — le plus ancien, avec
\subfigure. Obsolète ; à ne pas utiliser.