LATEX & les flottants

Fleuron

Comprendre le fonctionnement des flottants

Je ne sais pas si tu as déjà l’expérience de longs documents avec des illustrations sous un traitement de texte classique, on a toujours l’impression que c’est facile. Tu places l’image, tu ajustes la taille et la position avec des poignées. Ensuite tu passes une ligne, tu mets la légende, puis tu continues à taper le texte. Ça c’est dans le meilleur des cas. Si tu es dans le bas de la page et qu’il n’y a pas la place tu es éjecté page suivante et celle que tu viens de quitter, présente une grande plage de blanc. Si tu considères que de grands espaces vides au sein du texte ont une valeur esthétique, alors tout va bien. Enfin si tu figes ton texte car la moindre transformation décale l’ensemble de ton bel arrangement, t’obligeant à refaire toute la mise en page. Et te voila à reprendre les poignées pour triturer les images pour que la légende et l’image restent sur la même page, ou pour éviter les grandes plages de blanc crées. Si tu aime triturer des poignées tout va bien tu es une personne heureuse. Si tu as autre chose à faire, comme élaborer la pensée que tu tentes de coucher sur le papier, LaTeX est fait pour toi.

Pour réaliser cette fiche, je me suis appuyé sur deux documents :

Sous LaTeX en utilisant \includegraphics que l’on a vu dans la fiche de Bébert LaTeX & les illustrations, tu rencontres le même problème, en pire, car quand tu places une image dans ton source, tu ne sais pas à quel endroit de la page (ni sur quelle page) tu te trouves, puisque la compilation n’a pas eu lieu. Tu ne sais même pas s’il reste assez de place sur la page pour la mettre à cet endroit. Prenons un exemple, tu veux insérer une image après une portion de texte. Seulement, pas de chance, après compilation la fin de ce morceau de texte se trouve à 6 cm du bas de la page. Avec la meilleure volonté du monde LaTeX ne pourra y faire tenir ton image de 9x13 cm. LaTeX va donc la positionner en haut de la page suivante et laisser au bas de la page précédente un blanc de 6 cm. Enfin pas vraiment car LaTeX étant plus subtil que les traitements de texte classiques, va répartir ce blanc entre les différents espaces inter-paragraphe, s’ils existent, de la page. Pas terrible !

Pour régler ces problèmes du placement des figures, LaTeX offre une autre voix. Au lieu de dire à LaTeX je veux une image ici, tu vas lui dire, j’aimerais, s’il te plaît, que tu places mon image ici. Comme tu as été très poli avec LaTeX, il va faire un effort. Il ne peut te garantir qu’il pourra la mettre exactement ici mais il va essayer de la placer au plus prêt. Ton image va donc flotter dans le texte en fonction de la place disponible et de critères esthétiques, connus de LaTeX. Elle pourra être placée avant ou après son point d’insertion. Voila pourquoi en langage LaTeX on les appelle des flottants. Pour utiliser au mieux les flottants il est nécessaire de bien en comprendre le fonctionnement et de respecter quelques règles.

L’emploi de flottants a plusieurs conséquences. Premièrement tu ne peux pas employer des formules du type « voir sur l’image ci-dessous ». En effet ton image peut très bien être en haut de la page où sur la page suivante. Tu dois employer des trucs du style, « voir l’image n° x page y ». On verra comment faire cela, c’est ce que l’on appelle des références croisées.

Pour conserver une certaine esthétique typographique LaTeX à des règles de positionnement des illustrations par rapport au texte. La première est que le nombre total de flottants permis sur une page est de 3 par défaut, avec un maximum de 2 en haut de la page et 1 seul en bas de page. Une autre règle observée par LaTeX est qu’une page mélangeant des images (ou des tableaux) et du texte, contient au minimum 20 % de texte. Donc si 1 ou 2 flottants occupent 80 % de la surface le ou les suivants seront déplacés sur la page suivante. v préfère placer les flottants en haut de page, même avant leur appel. Il existe d’autre règles, ainsi que des commandes pour modifier le comportement par défaut. C’est ce que nous allons étudier dans la suite de cette fiche.

Il existe deux types de flottants, ceux pour insérer des images, appelé figure et ceux pour insérer des tableaux, table. Les flottants sont des environnements, ils commencent donc par \begin et finissent par \end. Ces environnements servent à créer des objets flottants dans lesquels tu peux mettre ce que tu veux, du texte, des images, des tableaux, ou n’importe quel objet LaTeX. La différence entre les deux environnements ce situe au niveau de la légende et de la table associée. Dans le cas de figure tu auras une numérotation en : Figure 1, Figure 2,. . ., Figure n et une Tables des figures et dans l’environnement table, une numérotation en : Table 1, Table 2,. . ., Table n et une Liste des tableaux. La légende est produite par la commande \caption et le référencement par \label. Voici deux exemples que l’on va détailler par la suite :

\begin{figure}[!htbp]
\centering
\includegraphics[width=2cm]{monImage}
\caption{La légende de mon image.}
\label{labelImage}
\end{figure}

et

\begin{table}
\begin{tabular}{...}
... données du tableau ...
\end{tabular}
\caption{La légende du tableau.}
\label{labelTableau}
\end{table}

Ne confond pas flottants et image (ou tableau). Le flottant correspond à tout ce qui est entre les bornes \begin{image} et \end{image} (ou \begin{table} et \end{table}), donc l’image (ou le tableau) et la légende. Ce qui est à l’intérieur du flottant est indivisible et forme un bloc. Souviens-t-en quand tu écriras des légendes longues.

Ci-dessous j’ai mis les légendes en rouge pour bien visualiser l’espace occupé par les flottants marqué par le cadre bleu.

Nombre de flottants par page

Le nombre de flottants est limité à 3 par page. Ce nombre est contrôlé par totalnumber. Tu peux modifier ce nombre par :

\setcounter{totalnumber}{nouvelleValeur}

Ce nombre fait le compte de tous les flottants, ce n’est pas 3 figures et 3 tables.

Par défaut LaTeX met au maximum 2 flottants en haut de la page, modifié par :

\setcounter{topnumber}{nouvelleValeur}

et un seul en bas de page, modifié par :

\setcounter{bottomnumber}{nouvelleValeur}

Ci-contre une page avec 4 flottants obtenue avec :

\setcounter{totalnumber}{4}

Bien entendu pour caser 4 flottants dans une page ils faut que ceux-ci soit petits car il y a d’autres règles à respecter comme la surface totale allouée au flottants.

Surface de la page allouée aux flottants

Une page doit contenir au minimum 20 % de texte, donc les images ne peuvent occuper plus de 80 % de la page (les marges ne sont pas comptées, c’est la valeur de \textheight qui est utilisé pour le calcul).

Cette valeur est contrôlée par \textfraction, que tu modifies par :

\renewcommand{\textfraction}{nouvelleValeur}

ou nouvelleValeur est un nombre compris entre 0 et 1, ce sont des pourcentages.

En plus les flottants placés en haut de la page ne peuvent dépasser 70 % de la hauteur du texte.

et ceux en bas 30 % de la hauteur du texte.

Ces deux valeurs sont modifiables par :

\renewcommand{\topfraction}{nouvelleValeur}
\renewcommand{\bottomfraction}{nouvelleValeur}

Il y a des règles à respecter si tu changes les valeurs ci-dessus, sous peine de rendre LaTeX fou :

Comme tu peux le voir modifier les règles de placement des flottants est assez délicat. En général si tu fais attention les valeurs par défaut marchent pas mal, tu peux les assouplir en les redéfinissant comme ci-dessous :

\renewcommand{\textfraction}{0.15}
\renewcommand{\topfraction}{0.85}
\renewcommand{\bottomfraction}{0.65}

Tu mets ces modifications dans le préambule si tu veux qu’elles s’appliquent à tout le document. Si tu les places dans le texte elles prendront effet au flottant suivant.

Espacement des flottants

Les espaces séparant les flottants entre eux et les flottants et le texte sont réglés par des ressort, c’est à dire des longueur élastiques qui varient pour offrir la meilleure mise en page :

Voici comment changer \intextsep la même méthode s’applique aux deux autres mesures :

\setlength{\intextsep}{14pt plus 2pt minus 4pt}

Dans ce cas la valeur de \intextsep est de 14pt mais LaTeX en cas de besoin pourra la réduire à 10pt ou l’augmenter jusqu’à 16pt.

Position des flottants

Comme je te l’ai déjà expliqué l’endroit ou tu positionnes le flottant dans le source n’est qu’une indication de placement, LaTeX de toute façon n’en fera qu’à sa tête. Tu peux quand même préciser ton souhait par des options que tu places entre [ ] :

Tu peux mettre plusieurs options (sans les séparer par une virgule), leur ordre n’a aucune importance, LaTeX utilise toujours le même ordre ( ! h t b p) jusqu’à rencontrer un placement indiqué et réalisable.

\begin{figure}[tbh]
\begin{figure}[bth]
\begin{figure}[hbt]

c’est pareil et c’est traité par LaTeX en h t b, il va donc essayer de placer d'abord l'image à l'endroit de la commande, puis s'il n'y arrive pas en haut de la page et enfin en bas de la page.

Notes que les options doivent être mise après {nomFigure}, \begin{figure}[htb]{nomFigure} produit une erreur de compilation, tu dois écrire \begin{figure}{nomFigure}[htb].

Il y a une chose fondamentale à connaître au sujet des options de placement. LaTeX n’étudiera que les options mentionnées. Imaginons que tu aies une illustration qui occupe 40 % d’une page et que tu fournisses comme option [hb] LaTeX étudiera h puis b, les autres (t et p) seront ignorées. Je peux t’annoncer tout de suite que b sera ignorée car ton illustration dépasse les 30 % autorisée (sauf si tu as modifié \bottomfraction). Quand à h si après compilation il se trouve en haut de page elle peut passer (si d’autres images n’occupent pas la place), mais s’il est en bas de page, elle sera également refusé. LaTeX ne pourra la placer, et l’illustration ira dans la file d’attente des figures non placées (unprocessed float).

Pour améliorer la situation tu peux utiliser [!hb]. ! empêchant LaTeX d’utiliser les règles d’esthétique, ta figure pourra être placée en bas de la page.

Régles de placement

LaTeX en plus des règles esthétiques vues précédemment, suit également des règles de placement pour gérer les flottants :

Pour toutes ces raisons il faut à tout prix bannir les options uniques ([h], [b], [t] et [p]). Si tu ne précises pas d’option LaTeX utilise [tbp]. Plus tu donnes d’options, mieux LaTeX traite le placement des flottants. Les options suivantes marchent bien [htbp], [tbp], [htp] et [tp].

La file d'attente

Le nombre de flottants stockés dans liste des flottants non placés ne peut dépasser 18. Au-delà tu obtiens une erreurs de compilation Too many unprocessed floats.

Les flottants de la liste sont placés automatiquement à la fin d’un chapitre ou à la fin du document pour les documents comme les articles qui n’ont pas de chapitre.

La commande \clearpage place tous les flottants en attente et commence une nouvelle page.

Il existe une méthode plus subtile pour placer les flottants coincés dans la liste des unprocessed floats. Pour cela il faut utiliser le package placeins (\usepackage{placeins}) qui ajoute de nouvelles commandes.

La commande \FloatBarrier (attention au majuscules) place tous les flottants en attente, sans créer de nouvelle page. Une utilisation répétée de \FloatBarrier indique que les paramètres de placement ne sont pas bon. On l’utilise quand on a beaucoup d’image par rapport au texte disponible.

On a vu qu’aucun flottant ne dépassait le chapitre dans lequel il est mis. Si tu veux le même comportement au niveau de la section il faut charger le package placeins par

\usepackage[section]{placeins}

aucuns flottants ne dépassera sa section. Ceci est parfaitement compatible avec KOMA-Script et \addsec{}.

Cette commande est très stricte et si la nouvelle section commence au milieu de la page aucun placement de flottant de la section précédente ne pourra avoir lieu au bas de la page.


\usepackage[below]{placeins}

est moins stricte et permettra le placement en bas de page si une partie de la section contenant le flottant est dans la page.

\usepackage[above]{placeins}

permet le contraire, c’est à dire qu’un flottant apparaisse en haut de page dans la section précédente si une partie de la section contenant le flottant est dans la page.

La page flottante

L’option p permet de placer un flottant sur une page sans texte. Cette page est une page flottante. Elle obéit également à des règles. Par défaut 50 % de cette page doit être occupé par un flottant. On ne peut donc pas mettre une seule petite illustration sur cette page. Tu peux modifier cela par :

\renewcommand{\floatpagefraction}{nouvelleValeur}

Si tu mets une petite valeur, chaque page flottante ne contiendra qu’un seul flottant, avec un excès de blanc pour les petites figures.


Une valeur supérieure à \topfraction risque de bloquer des flottants. Une image pouvant être trop petite pour aller sur une page flottante et trop grande pour rester en haut de page classique.

L’option ! n’a aucune influence sur \floatpagefraction qui sera quand même appliqué.

Si tu trouves l’option par défaut trop restrictive la commande suivante associée au 3 déjà vues précédemment est un bon compromis.

\renewcommand{\textfraction}{0.15}
\renewcommand{\topfraction}{0.85}
\renewcommand{\bottomfraction}{0.65}
\renewcommand{\floatpagefraction}{0.60}

Flottants et référencement

Si tu ne veux pas que les flottants apparaissent au-dessus de leur référence dans le texte, par exemple en haut d’une page avec un référencement en bas de page, il te faut charger le package flafter (\usepackage{flafter}). Tu n’as rien d’autre à faire, le chargement du package suffit à empêcher le placement non désiré.

Conclusion

Voici la fin de la première fiche consacrée aux flottants. J’espère que leur fonctionnement n’a plus de secret pour toi. L’une des principales erreurs des débutants LaTeXiens, est de mettre des conditions de placement trop strictes. Tu fais du LaTeX donc oublies tes réflexes WYSIWYG. Laisse à LaTeX le plus de liberté possible pour le placement de tes illustrations, tu verras il ne se débrouille pas si mal. Quand tu lis un rapport, le fait que l’image ne soit pas immédiatement à côté du texte n’est pas très gênant.

Dans les prochaines fiches consacrées aux flottants, on étudiera en détail les légendes, on verra comment créer de nouveaux types de flottants, comment créer des flottants qui ne flottent pas, comment placer plusieurs images dans un seul flottant.