Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

Chose promise, chose due dans le précédent article voilà les flottants dans LaTeX

Les flottants sont l'ensemble des éléments qui perturbent le flot du texte (pour faire simple) et désignent classiquement les tables et les figures ;on peut définir des environnements custom de flottants, mais on y reviendra dans un autre article ;).

Les flottants « nagent » dans le texte, et vont se positionner là où il faut pour que la lecture soit fluide. Cela a un avantage certain de beauté et de cohérence par rapport à de bêtes tableaux et de bêtes graphiques inclus sans pouvoir bouger :).

Accrochez-​vous, vous allez découvrir plein de trucs chouettes mais un peu difficile.

Les tables

Commençons par les tables. Avant d'apprendre à faire des tables, il va falloir apprendre à faire des tableaux pour remplir cet environnement, sans quoi cela n'aurait que peu d'intérêt. C'est parti !

Les tableaux de base

Pour faire des tableaux « de base » on a besoin de l'environnement

tabular

  à qui l'on va spécifier le nombre de colonnes en lui disant comment aligner le texte de la cellule.

On procède ainsi :

\documentclass[paper=a4,
               fontsize=11pt,
               titlepage,
              ]{article}

\input{preambule}

\begin{document}

\begin{tabular}{cccc}
Automne & Hiver & Printemps & Été \\
21 septembre -- 21 décembre & 21 décembre -- 21 mars & 21 mars -- 21 juin & 21 juin -- 21 septembre \\
\end{tabular}

\end{document}

Et l'on obtient ceci :

Un tableau représentant les saisons et leurs dates de début et de fin
Un tableau représentant les saisons et leurs dates de début et de fin

On remarquera que les 4

c

 . Ils indiquent que je souhaite que le texte de chacune des 4 colonnes soit centré horizontalement. Voilà comment produire les autres types d'alignements :

  • l  (comme left) pour aligner le texte à gauche
  • r  (comme right) pour aligner le texte à droite
  • c  (comme center) pour centrer le texte

Maintenant vous souhaitez peut-​être marquer les lignes des cellules de vos tableaux. Pas de panique, c'est possible, regardez cet extrait de code :

\begin{tabular}{|c|c|c|c|}
\hline
Automne & Hiver & Printemps & Été \\
\hline
21 septembre -- 21 décembre & 21 décembre -- 21 mars & 21 mars -- 21 juin & 21 juin -- 21 septembre \\
\hline
\end{tabular}

Ce qui donne le résultat suivant :

Tableau des saisons présentant des barres séparant les cellules
Tableau des saisons présentant des barres séparant les cellules

Bien entendu, vous placez le nombre de pipes entre les colonnes et le nombre de

\hline

  entre les lignes que vous souhaitez 🙂 Expérimentez jusqu'à ce que vous trouviez un truc qui vous plaise !

Vous pouvez également ajouter à votre preambule.tex la ligne suivante :

%-% Customisation des règles de sépartation des lignes de tableau
%-% \toprule, \midrule, \bottomrule, \specialrule{2.5pt}{1pt}{1pt}
\usepackage{booktabs}

Qui vous permet d'utiliser de nouvelles commandes décrites dans les commentaires. Cela donne :

\begin{tabular}{cccc}
\toprule
Automne & Hiver & Printemps & Été \\
\midrule
21 septembre -- 21 décembre & 21 décembre -- 21 mars & 21 mars -- 21 juin & 21 juin -- 21 septembre \\
\bottomrule
\end{tabular}
Tableau des saisons en utilisant les règles du paquet booktabs
Tableau des saisons en utilisant les règles du paquet booktabs

L'environnement table

Maintenant que l'on sait faire des tableaux, rendons les flottants pour plus de beauté ! Il va falloir utiliser l'environnement

table

  ce qui va nous permettre, à terme, de faire une table des tables, de leur mettre des légendes et de faire du référencement.

Pour cela, c'est tout simple, il suffit d'encapsuler le tableau dans cet environnement, ainsi :

\begin{table}[h]
    \centering
    \caption{Table des saisons et de leurs dates}
    \begin{tabular}{cccc}
        \toprule
        Automne & Hiver & Printemps & Été \\
        \midrule
        21 septembre -- 21 décembre & 21 décembre -- 21 mars & 21 mars -- 21 juin & 21 juin -- 21 septembre \\
        \bottomrule
    \end{tabular}
    \label{tab:saisons}
\end{table}

Comme vous pouvez le voir dans la Table~\ref{tab-saisons}, Chopopope connaît_(presque ^^) ses saisons.

Alors là on a découvert plein de trucs d'un coup. Commençons par le commencement : on a encapsulé le

tabular

  dans l'environnement

table

  en précisant en paramètre [h] ce qui veut dire que l'on souhaite que la figure soit positionnée ici. Voici la liste des paramètres que l'on peut utiliser :

  • h  (pour here) place le flottant à l'endroit où il apparaît dans le texte
  • t  (pour top) place le flottant en haut de la page
  • b  (pour bottom) place le flottant en bas  de la page
  • p  (pour page) place le flottant sur un page dédiée aux flottants

Bon, je vous préviens, les flottants, comme leur nom l'indique sont flottants, et vont aller se balader là où LaTeX va décider qu'il est approprié de les mettre, pour économiser la place. Ne vous arrachez pas trop les cheveux et laissez-​vous faire.

On a également découvert la commande

\centering

  qui permet de centrer le tableau dans l'environnement de flottants, la commande

\caption

  qui permet d'ajouter une légende au flottant ainsi que la commande

\label

  qui permet de mettre une référence que l'on pourra utiliser plus tard dans le texte en utilisant la commande

\ref

 qui est dans le texte situé au dessous du tableau. Pour que les références s'affichent, n'oubliez pas de compiler 2 fois, comme pour la table des matières.

Vous remarquerez également que la Table est numérotée : les numéros sont attribués automatiquement dans l'ordre d'apparition dans le code source, pas besoin de donner le numéro de la table, cela sera géré tout seul par LaTeX \o/​.

Les tableaux : le multicolonne et le multiligne

Maintenant que l'on sait faire des jolies tables, il est temps d'apprendre un peu plus de choses sur les tableaux parce que bon, on n'a fait qu'effleurer la base !

Voici le code nécessaire pour faire du multicolonne :

\begin{table}[h]
    \centering
    \caption{Table des noms de mutations de patients imaginaires}
    \begin{tabular}{cccc}
        \toprule
        Patient 1 & Patient 2 & Patient 3 & Patient 4 \\
        \midrule
        \multicolumn{2}{c}{Mutation 1} & Mutation 2 & Mutation 3 \\
        \bottomrule
    \end{tabular}
    \label{tab:patients}
\end{table}

Comme vous pouvez le voir dans la Table~\ref{tab-patients}, …

Ce qui donne :

Tableau contenant du mulitcolonne
Tableau contenant du multicolonne

Si vous voulez faire du multiligne c'est un peu plus complexe mais c'est possible. Avant toutes choses, il faut ajouter quelque chose au préambule :

%-% Pour les tables, faire du multi-ligne
%-% \multirow{"num_rows"}{*}{"content"}
\usepackage{multirow}

Et voici un cas pratique d'utilisation :

\begin{table}[h]
    \centering
    \caption{Table des gènes imaginaires}
    \begin{tabular}{|c|c|c|c|c}
        \hline
        Patient & Gène 1 & Gène 2 & Gène 3  \\
        \hline
        Foo & \multirow{2}{*}{Mutation 1} & Mutation 2 & Mutation 3 \\
        \cline{1-1} \cline{3-4}
        Bar & & Mutation 4 & Mutation 5 \\
        \hline
    \end{tabular}
    \label{tab:genes}
\end{table}

Et voilà ce que ça donne :

Tableau avec utilisation de multirow et de cline
Tableau avec utilisation de multirow et de cline

Vous noterez l'utilisation de

multirow

  et l'utilisation de

cline

  qui permet (de façon assez explicite de faire des lignes qui n'intersectent pas avec la case multiligne.

La hauteur des cellules

Je sais pas vous, mais je trouve la hauteur des cellules par défaut complètement ignoble, le texte des cellules est tout tassé, bref ça ne me convient pas. J'ai une petite commande à ajouter à votre

preambule.tex

 qui peut améliorer ça :

%-% Accroissement de la hauteur d'une ligne (parce que de base c'est
%-% sérieusement trop petit)
\usepackage{array}
\setlength{\extrarowheight}{3pt}

Évidemment, vous pouvez jouer sur la taille que j'ai mise (c'est celle qui me convient, pas forcément la taille optimale). 🙂

Customisation de la légende

On m'a appris en cours de biologie que les Tables se légendent au dessus du tableau et non pas en dessous, du coup, voici comment faire pour que cela se passe correctement :

%-% Pour customiser les "caption" dans les environnements figure et table
%-% /!\ Warning :
\usepackage[labelsep=colon]{caption}

%-% La conf est faite en dessous et sera prise en compte dans les \caption{}
%-% http://www.lce.esalq.usp.br/clarice/Caption.pdf

\captionsetup[table]{format=hang, labelformat=simple, singlelinecheck=true, font=small, position=above}

On remarquera que j'ai d'autres paramètres de configuré, parce que je les aime bien, je vous laisse aller lire la documentation du package pour vous faire une idée de ce à quoi ils servent et vous faire votre propre customisation. 😉

Faire des tableaux d'une longueur spécifique avec

tabularx

Il existe un autre environnement de tableau assez pratique : tabularx. Il permet de modifier la largeur des colonnes pour s'adapter à la taille souhaitée du tableau. C'est pas clair ? Voici un exemple :

\begin{table}
    \centering
    \begin{tabularx}{\textwidth}{|c|c|X|c|}
        \hline
        A & B & CD & EFGHIJKL \\ \hline
        plop & plip & Là je peux écrire plein de choses car la largeur de la colonne dépendra de la largeur de la table et c'est beaucoup trop cool & j'ai perdu \\ \hline
    \end{tabularx}
    \label{tab:useless}
\end{table}
\lipsum

Ça marche pas ? C'est normal ! Il faut ajouter quelque chose dans votre préambule ! (Et bah oui, vous croyez que ça allait marcher tout seul ? Ne vous ais-​je rien appris ? :D)

%-% L'environnement tabularx permet d'utiliser le "specifier" X. Les colonnes utilisant
%-% ce specifier seront étirées pour que la table fasse la largeur souhaitée \o/
%-% \begin{tabularx}{\textwidth}{ |X|X|X|X| }
%-% \end{tabularx}
\usepackage{tabularx}

Ce qui donne :

Un exemple de tableau avec tabularx.
Un exemple de tableau avec tabularx.

Notez bien l'effet du

X

  qui permet la réalisation de la table comme on le souhaite.

 \textwidth 

 est la largeur que je souhaite : celle du texte, mais vous pouvez très bien mettre

300pt

  si ça vous chante. 🙂

Il exitste encore plein de choses que l'on peut faire avec des tableaux, mais je sens que vous en avez marre (et moi aussi un peu :p) alors on va passer à l'autre type de flottants : les figures, c'est-à-dire les images.

Les figures

Comme toujours en LaTeX, pour pouvoir faire des choses particulières, il faut ajouter un

\usepackage

  dans son préambule 🙂 Et c'est ce que nous allons faire pour gérer correctement les images dans LaTeX, en faisant :

%-% Pour faire joujou avec des images
\usepackage{graphicx}

Insérer une image dans un texte

Pour cela il suffit d'utiliser la commande

\includegraphics

  comme ceci (on présuppose que l'image est dans un dossier Images, dossier situé au même niveau que votre fichier source) :

\includegraphics[width=0.5\textwidth]{Images/youjustlost.jpg}
\lipsum

Vous remarquerez l'option passée entre [ ]. Vous pouvez y passer plusieurs types d'options :

  • width  pour paramétrer la largeur de l'image, comme ici en fonction de la largeur du texte
  • height  pour paramétrer la hauteur de l'image, comme
    \includegraphics[height=500pt]{Images/youjustlost.jpg}

  • scale  pour paramétrer l'échelle de l'image, comme
    \includegraphics[scale=0.5]{Images/youjustlost.jpg}

Là l'image est stockée dans le dossiers Images. Si ça vous gonfle de devoir dire à includegraphics de chercher dans le dossier Images  spécifiquement (par défaut, on va aller chercher dans le dossier où se trouve le .tex) vous pouvez utiliser la commande suivante dans votre préambule :

\graphicspath{ {./Images/}{/home/chopopope/Bioinfo-fr/LaTeX/Images/} }

Bien évidemment, il faut remplacer le chemin des dossiers par ceux que vous utilisez 🙂 (et le /​ terminal est important).

Avec cette commande vous pouvez inclure des images au format suivant :

  • jpg ;
  • png ;
  • PDF.

Cela a pour résultat :

Vous avez tous perdus (et vous voyez ce que donne un includegraphics)

Voilà, vous savez comment inclure une image, maintenant, pour plus de beauté rendons tout ça flottant !

L'environnement

figure

Pour cela, nous allons procéder comme pour les tableaux et encapsuler l'image dans un environnement appelé figure.

Il suffit d'écrire :

\begin{figure}[h]
    \centering
    \includegraphics[scale=1]{youjustlost.jpg}
    \caption{Vous avez tous perdu.}
    \label{fig:lost}
\end{figure}

Là on dit à la figure de se placer ici avec [h], qui fonctionne comme le [h]

  de l'environnement table. Pour rappel :

  • h  (pour here) place le flottant à l'endroit où il apparaît dans le texte
  • t  (pour top) place le flottant en haut de la page
  • b  (pour bottom) place le flottant en bas  de la page
  • p  (pour page) place le flottant sur un page dédiée aux flottants

On lui dit également de se centrer avec \centering. On lui demande de mettre une légende grâce à la commande \caption{}. Enfin, on lui demande de mettre un label par la commande \label afin de pouvoir faire des références (on y reviendra plus tard).

Cela donne :

Et hop ! La première figure dans l'environnement figure
Et hop ! La première figure dans l'environnement figure

Comme pour les tables, les figures sont automatiquement numérotées dans l'ordre du document, pas besoin de s'embêter à les numéroter à la main ! Cela nous sera pratique pour une table des figures.

Customisation de la légende

Tout comme pour les tableaux, on peut customiser les légendes en utilisant le package caption (qui est déjà dans votre preambule.tex normalement ^^) :

\captionsetup[figure]{format=hang, labelformat=simple, singlelinecheck=true, font=small}

Et des sous-​figures ?

Soyons honnête, si on pouvait pas faire des sous-​figures, LaTeX ne nous servirait pas à grand-​chose. Heureusement c'est possible si on charge le package idoine dans le préambule, vous connaissez la chanson maintenant 🙂 :

%-% Pour faire des zoulies subfigure
%-% \begin{subfigure} … \end{subfigure}
\usepackage{subcaption}

Et maintenant, place au code :

\begin{figure}[h]
    \centering
    \begin{subfigure}[b]{0.45\linewidth}
        \centering
        \includegraphics[scale=1]{youjustlost.jpg}
        \caption{Une première fois…}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[b]{0.45\linewidth}
        \centering
        \includegraphics[scale=1]{youjustlost.jpg}
        \caption{et une deuxième fois}
    \end{subfigure}
    \vspace{5pt}
    \begin{subfigure}[b]{0.45\linewidth}
        \centering
        \includegraphics[scale=1]{youjustlost.jpg}
        \caption{et une troisième fois…}
    \end{subfigure}%
    \hfill
    \begin{subfigure}[b]{0.45\linewidth}
        \centering
        \includegraphics[scale=1]{youjustlost.jpg}
        \caption{et une quatrième (dernière ?) fois}
    \end{subfigure}
        \caption{Vous avez tous perdu.}
    \label{fig:lost}
\end{figure}

Et tadà :

Et une super figure faites de sous-figures !
Et une super figure faites de sous-​figures !

Si c'est pas beau LaTeX…

Des choses sur les flottants en général

Placement des flottants

Bon alors déjà, ils se mettent un peu où ils veulent malgré l'option [h]. Vous pouvez tenter d'imposer un peu plus votre volonté en utilisant l'option [H] qui est cachée dans un package supplémentaire :

\usepackage{floats}

Mais c'est pas nécessairement conseillé…

Et si jamais vous trouvez que vos flottants se baladent trop, vous pouvez utiliser l'astuce suivante :

%-% Afin de pouvoir utiliser un \FloatBarrier et que tous les flottants
%-% restent dans leur section
\usepackage[section]{placeins}

More floats

Si jamais LaTeX vous enquiquine avec une histoire de trop de flottants non processés lors de la compilation, je vous suggère d'utiliser :

%-% Pour avoir /plus/ de flottants
\usepackage[maxfloats=100]{morefloats}

Liste des tables et table des figures

Je vous l'avais promis au cours du texte, donc voilà comment faire une liste des tables :

\listoftables

à mettre où vous le souhaitez dans votre document !

Et voilà ce que ça donne :

Liste des tables
Liste des tables

Et pour les figures c'est trèèèès difficile à deviner :

\listoffigures

Pareil, à mettre où vous voulez dans votre document !

Cela donne :

Liste des figures automatiquement générée ! (Si c'est pas beau la vie…)
Liste des figures automatiquement générée ! (Si c'est pas beau la vie…)

Bon, je pense que ça fait assez d'un coup sur les flottants d'un coup, du coup on va s'arrêter là. On y reviendra peut être si jamais l'un d'entre nous a une idée lumineuse sur ce qui pourrait être pertinent de vous raconter. 🙂




Commentaires

5 réponses à “LaTeX : les flottants !”

  1. Chouette ! Mais n'existe-t-il pas des modules javascripts comme jsMath qui permettent de générer le LaTeX sur la page directement plutôt que de faire des captures images png ?

  2. C'est pas sympa ><

  3. Avatar de Yoann

    Merci pour ces deux tutos !
    Je suis en train de me mettre a LATEX et j'aimerais le faire communiquer tranquillement avec R.
    J'arrive pour l'instant a exporté mes tables et mes figures, mais ce serait cool si je pouvais inclure ces exports directement dans une session de teXstudio.
    Est ce que tu sait si c'est possible et si il est possible de faire des liens au sein d'une session latex entre les différents documents ?
    En gros est ce que tu veux pas faire un petit tuto R-​Latex 😉

  4. Avatar de arnome

    @Yoann : pour ça, il y a Knitr : https://​yihui​.name/​k​n​i​tr/

  5. Oui il y a un article de prévu sur knitr 🙂

Laisser un commentaire

Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.