Votre figure n’apparaît pas là où vous l’avez écrite ; un tableau saute plusieurs pages plus loin. Ce n’est pas un bogue de LaTeX : c’est parce que figure et table sont des flottants (floating objects). LaTeX les détache du fil du texte et les laisse « flotter » vers l’endroit où la mise en page fonctionne le mieux. Cette page montre jusqu’où vous pouvez guider ce placement : les spécificateurs de placement de [htbp], les commandes \FloatBarrier et \clearpage qui barrent le passage, les façons de placer deux figures côte à côte, et le package wrapfig pour faire couler le texte autour d’une figure.
Ce qu’est un flottant
Une figure ou un tableau qui traverse un saut de page paraît incorrect : on ne peut pas en afficher la moitié ici et le reste à la page suivante. LaTeX traite donc chacun comme une boîte unique et, une fois un passage de texte composé, choisit automatiquement un emplacement : en haut ou en bas d’une page, ou sur une page réservée aux flottants. C’est cela, un flottant. Les deux environnements flottants standard sont figure et table.
Les flottants ont un avantage et un côté déroutant. L’avantage : une figure ne se coupe jamais entre deux pages, et sa numérotation (« Figure 1 », « Table 2 ») comme ses renvois via \caption, \label et \ref restent cohérents automatiquement. Le côté déroutant : l’endroit où vous l’écrivez et l’endroit où il s’imprime divergent. La conception repose sur l’idée que, puisque vous pouvez écrire « voir Figure 1 » avec \ref{fig:foo}, la figure elle-même n’a pas besoin d’être collée à cette phrase. La règle est donc : référencer par numéro, pas par position. La création des images et les projets avec \input relèvent d’autres pages ; ici nous nous concentrons sur l’endroit où le flottant apparaît.
Les spécificateurs de placement [htbp]
Les environnements figure et table acceptent un argument optionnel appelé spécificateur de placement : des crochets, comme dans \begin{figure}[htbp], qui indiquent à LaTeX quelles positions il peut utiliser. On combine les lettres suivantes.
| Lettre | Sens | Notes |
|---|---|---|
h | here | Près de l’endroit courant dans le texte. h seul n’est pas autorisé ; LaTeX ajoute automatiquement t |
t | top | En haut d’une page de texte |
b | bottom | En bas d’une page de texte |
p | page | Une page de flottants séparée : uniquement des flottants, pas de texte |
! | override | Pour ce flottant seulement, ignorer les limites de nombre et de ratio flottant/texte |
H | vraiment ici (pas de flottement) | Ajouté par le package float ; fixe l’objet sur place, sans flottement |
Si vous omettez le spécificateur, les classes comme article et book utilisent par défaut tbp (sans h). Avec plusieurs lettres, LaTeX cherche l’une des positions autorisées. Deux pièges comptent. D’abord, h seul est presque toujours ignoré : LaTeX n’autorise pas h nu et ajoute discrètement t, si bien que [h] saute souvent en haut de page. Quand il faut vraiment « ici même », utilisez [H] du package float, décrit plus bas.
Ensuite, l’ordre des lettres ne change pas l’ordre dans lequel LaTeX les essaie. Que vous écriviez [bt] ou [tb], LaTeX teste les candidats dans le même ordre (en gros : ici → haut → bas → page de flottants). Voyez les lettres comme le *jeu* des positions autorisées, rien de plus. LaTeX traite aussi les flottants dans l’ordre où ils apparaissent dans le source, si bien qu’une figure ultérieure peut dépasser une figure antérieure. En pratique, ne contraignez donc pas trop : plus vous autorisez large, avec [tbp] ou [htbp], plus LaTeX place facilement le flottant à proximité. Le réduire à une seule lettre, surtout [h], tend à l’envoyer plus loin.
\begin{figure}[htbp]
\centering
\includegraphics[width=0.6\textwidth]{plot}
\caption{実験結果}
\label{fig:result}
\end{figure}
図~\ref{fig:result} に結果を示す。Ici, [htbp] autorise l’emplacement courant, le haut, le bas ou une page de flottants, et LaTeX choisit le meilleur. \centering pour centrer l’image, \caption pour le titre et le numéro, et \label pour les renvois sont le contenu habituel d’un flottant. Le texte y renvoie par numéro avec 図~\ref{fig:result}, de sorte qu’il reste cohérent même si la figure s’imprime un peu plus loin (~ est une espace insécable qui empêche le mot et le numéro de se séparer en fin de ligne).
Forcer ici — [H]
Quand il faut vraiment garder un flottant « exactement là où je l’ai écrit », chargez le package float dans le préambule et utilisez le [H] majuscule. [H] n’est pas une lettre de placement ordinaire : il désactive entièrement le flottement et fixe la figure ou le tableau sur place. Son comportement ressemble à celui d’une grosse boîte posée directement à cet endroit.
\usepackage{float}
% ...
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{diagram}
\caption{処理の流れ}
\end{figure}Considérez toutefois [H] comme un dernier recours. Fixer un flottant peut laisser un grand blanc s’il ne tient pas en bas de page, ou pousser le flottant en haut de la page suivante et vider le bas de la page courante. Faire confiance à LaTeX avec un [htbp] généreux donne généralement un résultat plus propre. [H] ne se justifie que pour de petites figures qui doivent vraiment rester à un point précis du texte, par exemple un schéma pas à pas. Vous pouvez faire de [H] le défaut du document avec \floatplacement{figure}{H}, mais ce n’est pas recommandé pour les raisons ci-dessus.
Barrages dans le flux — \FloatBarrier et \clearpage
Le problème de flottants le plus pénible est une figure qui ne tient pas dans sa section et dérive vers la suivante ou vers le chapitre suivant. Quand la Figure 3 de la section 2 apparaît au milieu de la section 3, le lecteur est perdu. Pour l’empêcher, on place une barrière que les flottants ne peuvent pas franchir.
Cette barrière est \FloatBarrier, fournie par le package placeins. À l’endroit où vous placez cette commande, tous les flottants encore en attente sont émis avant elle, et les flottants suivants ne peuvent pas la franchir. Pour cloisonner par section, écrivez \FloatBarrier avant chaque \section, ou chargez \usepackage[section]{placeins}, qui insère une barrière au début de chaque \section.
\usepackage{placeins}
% ...
\section{実験}
% ... 図や表 ...
\FloatBarrier % ここより先へフロートを越えさせない
\section{考察}\clearpage en est un proche cousin, mais la différence est le saut de page. \clearpage émet tous les flottants en attente puis commence une nouvelle page, tandis que \FloatBarrier émet les flottants sans changer de page. Utilisez donc \FloatBarrier pour barrer les flottants dans la même page, et \clearpage lorsqu’un vrai saut de page, par exemple en fin de chapitre, convient. La barrière [section] est stricte par défaut : elle interdit qu’un flottant déborde même légèrement hors de sa section ; les options [above] et [below] l’assouplissent.
Un cran plus bas, le placement automatique de LaTeX obéit à des paramètres de placement des flottants : des nombres internes, exprimés en fractions, qui décident quelle part d’une page peut être occupée par des flottants. Ce sont des réglages de dernier recours quand rien d’autre ne marche, même s’il faut généralement commencer par revoir [htbp].
| Paramètre | Défaut | Sens |
|---|---|---|
\topfraction | 0.7 | Fraction maximale du haut de page que les flottants peuvent occuper |
\bottomfraction | 0.3 | Fraction maximale du bas de page que les flottants peuvent occuper |
\textfraction | 0.2 | Fraction minimale d’une page de texte qui doit rester du texte |
\floatpagefraction | 0.5 | Remplissage minimal avant de créer une page de flottants séparée |
topnumber | 2 | Nombre maximal de flottants en haut d’une page |
bottomnumber | 1 | Nombre maximal de flottants en bas d’une page |
totalnumber | 3 | Nombre maximal de flottants sur une seule page |
Modifiez les fractions avec \renewcommand{\topfraction}{0.85} et les compteurs entiers avec \setcounter{totalnumber}{5}. Augmenter \topfraction et réduire \textfraction, par exemple, permet à davantage de flottants de se placer en haut de page et limite les expulsions du type « ça ne tient pas, on pousse à la page suivante ». Le spécificateur ! vu plus haut est en quelque sorte la version locale de ce réglage : il demande à LaTeX d’ignorer ces limites pour ce flottant seulement.
En placer deux côte à côte
On veut souvent placer deux figures ou deux tableaux côte à côte. Comme un flottant peut contenir n’importe quel contenu, l’idée de base est de mettre deux boîtes côte à côte dans un seul figure. La méthode en LaTeX pur est minipage ; pour donner aux sous-figures leurs propres étiquettes (a), (b), utilisez le package subcaption.
minipage est un environnement qui crée une « petite page » de la largeur choisie. Placez-en deux côte à côte avec \hfill entre elles, c’est-à-dire un espace horizontal extensible, et elles se répartissent à gauche et à droite. L’astuce est de donner à chacune un peu moins de la moitié de la largeur du texte, par exemple 0.48\textwidth, pour que leur somme reste juste sous la largeur totale.
\begin{figure}[htbp]
\centering
\begin{minipage}{0.48\textwidth}
\centering
\includegraphics[width=\linewidth]{left}
\caption{左の図}
\label{fig:left}
\end{minipage}
\hfill
\begin{minipage}{0.48\textwidth}
\centering
\includegraphics[width=\linewidth]{right}
\caption{右の図}
\label{fig:right}
\end{minipage}
\end{figure}Ici, deux minipage de largeur 0.48\textwidth se trouvent dans le figure, et le \hfill entre elles pousse l’espace libre vers l’extérieur pour les coller aux marges. Dans chaque minipage, \linewidth désigne la largeur de cette minipage ; \includegraphics[width=\linewidth] remplit donc la boîte. Comme chaque minipage a sa propre \caption, elles reçoivent des numéros séparés, « Figure 1 », « Figure 2 ». Pour traiter la paire comme une seule figure, mettez une seule \caption directement dans le figure.
Pour numéroter les deux comme sous-figures d’une seule figure, par exemple « Figure 2(a) » et « Figure 2(b) », utilisez l’environnement subfigure du package subcaption. Il s’écrit presque comme minipage, avec \subcaption ou \caption à l’intérieur pour produire les étiquettes (a)/(b). Les sous-figures et les captions sont traitées en détail dans la page séparée « Captions & subfigures ». Pour deux tableaux côte à côte, l’idée est la même : placer un tabular dans chaque minipage.
Faire couler le texte autour d’une figure — wrapfig
Pour faire couler le corps du texte autour du côté d’une petite figure, comme dans une mise en page de magazine, utilisez l’environnement wrapfigure du package wrapfig (ou wraptable pour les tableaux). La syntaxe est la suivante :
\usepackage{wrapfig}
% ...
\begin{wrapfigure}[12]{r}[34pt]{0.4\textwidth}
\centering
\includegraphics[width=0.38\textwidth]{portrait}
\caption{人物像}
\end{wrapfigure}Il prend quatre arguments, dont deux obligatoires. {r} est le placement (le côté), et le dernier {0.4\textwidth} est la largeur de la figure. L’optionnel [12] est le nombre de lignes à faire couler autour, et l’optionnel [34pt] est le débord (overhang), c’est-à-dire la distance dont la figure dépasse dans la marge. Les lettres de placement vont par paires : la minuscule fixe sur place, la majuscule autorise le flottement.
| Lettre | Côté | Notes |
|---|---|---|
r / R | droite | r = ici, R = peut flotter |
l / L | gauche | l = ici, L = peut flotter |
i / I | intérieur | Vers la reliure ; pour les documents twoside |
o / O | extérieur | À l’opposé de la reliure ; pour les documents twoside |
Dans l’exemple, une figure large de 0.4\textwidth est placée à droite du texte, et les 12 lignes suivantes coulent sur sa gauche ; [34pt] la fait dépasser dans la marge droite. Si vous omettez le nombre de lignes [12], wrapfig l’estime à partir de la hauteur de la figure. Indiquez-le explicitement quand l’estimation échoue et que l’habillage devient irrégulier. En impression recto verso, si vous voulez placer la figure à l’opposé de la reliure, utilisez o (outer) et le côté alternera automatiquement entre pages gauches et droites.
wrapfig est utile, mais capricieux ; gardez donc ses limites en tête. Le manuel avertit, en substance :
- Ne pas l’utiliser dans une liste, ni juste avant ou après. Gardez-le hors de
itemize,enumerate,descriptionet des environnements similaires. - Ne pas le laisser traverser un saut de page. Placez l’environnement pour que l’habillage ne se coupe pas entre deux pages ; évitez les abords d’une limite de page.
- Ne pas faire habiller des titres ou de grandes équations. Pour l’aspect, seul le texte ordinaire devrait couler autour ; les titres de section et les équations hors texte sortent mal.
- Commencer à une limite de paragraphe plutôt qu’au milieu donne des résultats plus stables. Dans une
minipageou uneparbox, assurez-vous que l’habillage se termine avant la fin du groupe.
Quand l’habillage se comporte mal, réduire légèrement la largeur de la figure, préciser le nombre de lignes ou décaler le début d’un paragraphe règle généralement le problème. Si cela ne se stabilise toujours pas, abandonner wrapfig pour un flottant ordinaire ([htbp] au-dessus ou au-dessous du texte) peut finalement se lire mieux.