Licence CC BY-NC-ND

Les flottants

Après avoir appris à rajouter des images et des tableaux dans notre document, il est temps de voir la notion de flottants. Ils nous permettent de laisser LaTeX gérer la position des images et des tableaux dans notre document.

Les codes de ce chapitre contiennent des inclusions d’images. Pour les tester, le plus simple est certainement d’utiliser l’option draft.

Les flottants

Qu’est-ce qu’un flottant ?

Quand on se renseigne sur LaTeX et l’inclusion d’images et de figures, on ne peut pas passer à côté des flottants. On lit parfois même que pour inclure une image dans un document, il nous faut utiliser un flottant (c’est faux, nous n’avons pas encore utilisé de flottants et pourtant nous avons vu comment placer des images dans un document).

Comme son nom l’indique, un flottant, c’est grossièrement un truc qui flotte. Pour être un peu plus précis et indiquer ce qu’on veut dire par « flotter », il nous faut rappeler qu’avec LaTeX, nous ne choisissons pas l’emplacement exact des objets sur la page, nous indiquons la sémantique du document (par exemple, il doit y avoir cette image après tel paragraphe).

Le problème qui vient alors est qu’une image peut alors être placée d’une manière qu’on va juste qualifier de moche, laissant par exemple un quart de page vide pour être placée à la page suivante.

En utilisant des flottants, on demande à LaTeX de placer les image « au mieux ». En fait, en utilisant un flottant, on lui indique que s’il ne peut pas la placer exactement à l’endroit voulu et obtenir un résultat esthétique (pour des critères d’esthétismes définis par LaTeX), alors il peut essayer de la placer quelque part d’autre, au plus près.

Utiliser les flottants

Les flottants se présentent sous la forme d’environnements. Par défaut, LateX a deux environnements pour les flottants.

  • L’environnement figure pour faire flotter les images et autres dessins.
  • L’environnement table pour faire flotter les tableaux.

Leur utilisation est très simple, le contenu de l’environnement est le contenu à faire flotter. Voici un code utilisant les deux concepts.

\begin{table}
   \centering
   \begin{tabular}{|l|c|c|}                                                           \cline{2-3}
      \multicolumn{1}{c|}{}  &  \multicolumn{2}{c|}{Informations}                     \\ \cline{2-3}
      \multicolumn{1}{c|}{}  &  Langue officielle  &  Chef du gouvernement            \\ \hline
      France                 &  Français           &  \bsc{François HOLLANDE}         \\ \hline
      Royaume-Uni            &  Anglais            &  \bsc{Theresa MAY} \footnotemark \\ \hline
      États-Unis d’Amérique  &  Anglais            &  \bsc{Barack OBAMA}              \\ \hline
   \end{tabular}
   \footnotetext{Au Royaume-Uni, le chef du gouvernement est le \emph{Premier ministre}.}
\end{table}

Un peu de texte 

\begin{figure}
   \centering
   \includegraphics[width=10cm, height=7cm]{image}   
\end{figure}

Généralement, pour centrer un flottant on n’utilise pas l’environnement center, mais juste la commande \centering dans l’environnement utilisé pour le flottant.

Le contenu de l’environnement n’est pas « vérifié » par LaTeX ; nous pourrions tout à fait mettre du texte dans un environnement figure ou une image dans un environnement table. Mais bon, tâchons de respecter la sémantique de ces environnements. Si par exemple nous voulons inclure un tableau et que nous disposons de celui-ci en image, ce ne serait pas une erreur d’utiliser table.

Légendes et références

Avec un flottant, il est possible de donner une légende à nos éléments. Ceci se fait simplement en utilisant la commande \caption dans l’environnement flottant. Elle prend en argument la légende que l’on veut donner.

Les flottants sont numérotés et l’affichage suit alors la forme « Figure 2 - légende » par exemple s’il s’agit de la deuxième figure et « Table 2 - légende » s’il s’agit de la deuxième table. Ceci étant, nous pouvons afficher la liste des figures, en utilisant la commande \listoffigures et celles des tables avec \listoftables.

LaTeX a donc un compteur pour les figures et un compteur pour les tables, et nous pouvons faire donc référence à ces éléments en utilisant \ref, le \label étant à l’intérieur du flottant, après le \caption.

N’oublions pas de compiler deux fois pour prendre en compte les références.

\begin{figure}
   \centering
   \includegraphics[width=10cm, height=7cm]{image1}
   \caption{Image 1} 
   \label{fig:image1}
\end{figure}

\begin{figure}
   \centering
   \includegraphics[width=10cm, height=7cm]{image2} 
   \label{fig:image2}
\end{figure}

\begin{figure}
   \centering
   \includegraphics[width=10cm, height=7cm]{image3}
   \caption{Image 3}
   \label{fig:image3}
\end{figure}

On a une première image à la figure \ref{fig:image1} et une autre 
à la figure \ref{fig:image3}

\listoffigures

Nous remarquons que la numérotation a sauté la figure pour la deuxième 2 ; ce qui est normal vu que l’on ne lui a pas donné de légende. Cela signifie notamment qu’on ne pourra pas faire référence à ce flottant (et donc son \label est inutile). D’ailleurs, la deuxième figure n’est pas référencée dans la liste des figures.

Placer les flottants

Les options de placement

LaTeX ne place pas forcément les flottants à leur position dans le code source, mais où les place-t-il donc ? En fait, les environnements des flottants ont une option qui correspond à nos souhaits de placement. Il y en a quatre.

  • h pour here demande à placer le flottant là où il apparaît dans le code source.
  • t pour top demande à le placer en haut de la page.
  • b pour bottom demande à le placer en bas de la page.
  • p pour page demande à le placer sur une page à part, qui ne contiendra pas de texte.

Nous pouvons faire plusieurs souhaits, en mettant les lettres de nos souhaits dans l’option. Par exemple avec \begin{figure}[htp] on fait trois demandes.

L’ordre de nos souhaits n’a pas d’importance, LaTeX utilise toujours le même ordre qui est htbp. Ainsi, les demandes hbt ou htb ou encore thb sont équivalentes. LaTex essaiera d’abord de placer l’image à sa place dans le code source, puis essayera de la placer en haut de page, et enfin en bas de page.

Si aucune option n’est précisé, LaTeX utilise tbp, c’est-à-dire qu’il ne cherche même pas à placer le flottant à sa place dans le texte. Si on veut qu’il essaie de le faire, il faudra donc forcément utiliser l’option.

LaTeX ne considère que les options données par l’utilisateur (ou celle par défaut si l’utilisateur n’en a pas donnée). Cela signifie que si on fournit h seulement en option, LaTeX ne cherchera à placer le flottant qu’à sa place dans le texte. Et s’il n’y arrive pas, il n’essaiera pas de le placer autre part.

En fait, dans le cas particulier de h, nous obtenons un avertissement lors de la compilation qui nous informe que notre h a été changé en ht si LaTeX ne réussit pas à placer la figure à son emplacement dans le code source.

Néanmoins, il vaut mieux toujours faire au moins deux demandes. Plus il y en a, plus LaTeX sera en mesure de placer notre flottant efficacement.

Notons de plus ces petites règles de placement :

  • les flottants d’un même type apparaissent dans le document dans le même ordre que dans le fichier source. Cela signifie qu’une figure A qui apparaît après une figure B dans notre code source ne pourra pas être placé avant elle dans le document, et ce même si elle est beaucoup plus petite et qu’elle aurait pu être placée. Il n’y a par contre aucune contrainte d’ordre sur les flottants de types différents.
  • Un flottant ne peut pas se trouver sur une page antérieure à celle de son placement dans le code source. S’il apparaît son placement dans le code source, c’est forcément sur la même page (par exemple en haut de la page). Il peut néanmoins se retrouver sur n’importe laquelle des pages suivantes.
Des légendes sans flottants

Il peut nous arriver de vouloir référencer ou légender un flottant, mais sans que celle-ci ne flotte. Pour cela, il y a plusieurs solutions.

Le plus simple est certainement d’utiliser le package capt-of qui offre la commande \captionof. Elle prend en paramètre le type de flottant associés (figure ou table), et la légende que l’on veut. Cette commande n’a pas besoin de flottant pour être utilisée. Il nous suffit donc de l’utiliser sans utiliser de flottant.

On a les images suivantes.

Pour commencer, une image de Garfield.

\begin{center}
   \includegraphics[width=10cm, height=10cm]{garfield}
   \captionof{figure}{En fait, les chats ne flottent pas ?}
   \label{fig:garfield}
\end{center}

Puis une image de Milou.

\begin{center}
   \includegraphics[width=10cm, height=10cm]{milou}
   \captionof{figure}{Les chiens ça flotte pas non plus !}
   \label{fig:milou}
\end{center}

Et enfin une image de Dumbo, l'éléphant volant.

\begin{center}
   \includegraphics[width=10cm, height=10cm]{dumbo}
   \captionof{figure}{Dumbo c'est une exception chez les éléphants !}
   \label{fig:dumbo}
\end{center}

On a donc Garfield en figure \ref{fig:garfield}, Milou en figure 
\ref{fig:milou} et Dumbo en figure \ref{fig:dumbo}.

Nous observons bien que les images sont placées exactement là où elles sont dans nos sources et ce même si cela laisse un grand blanc dans le PDF.


C’est fini pour ce chapitre, nous savons maintenant comment faire flotter certains éléments. Dans beaucoup de situations, c’est une bonne idée d’utiliser des flottants et de laisser LaTeX placer les éléments au mieux. De nombreux packages améliorent la gestion des flottants et donnent de nouvelles fonctionnalités.

  • Le package caption complète le package capt-of et permet de gérer les légendes de manières approfondies.
  • Le package float permet de gérer le style des flottants, offre une interface simple pour en créer de nouveaux types et de manière générale améliore leur gestion.
  • Le package wrapfig permet d’intégrer une image à du texte (le texte enveloppera l’image).
  • Le package subcaption permet de placer des sous-flottants dans un flottant.
À venir

Une nouvelle section viendra compléter ce chapitre et expliquera comment LaTeX place les flottants dans le document (et comment modifier ce fonctionnement).