Tout ce que vous avez toujours voulu savoir sur les figures et les tableaux…

Bonjour,
Une des plus grandes difficultés (pour moi, la plus grande) de \LaTeX est la gestion des figures et des tableaux. C’est pourquoi je vais essayer d’être le plus exhaustif possible dans ce billet. Après quoi, vous pourrez (presque) tout faire !

Les flottants
Un flottant est une image (ou un tableau) dont la position n’est pas définie exactement. Le principe est de juxtaposer un maximum de flottants sur la même page tout en modifiant au minimum le texte. L’inconvénient est donc qu’une figure pourrait se retrouver plusieurs pages après avoir été appelée. ‘Pourrait’ si vous ne preniez pas les précautions de rigueur, que je détaillerai à la fin de ce billet.

Un exemple, comme d’habitude ?

On ne peut rien vous cacher :

 

Les figures

Je pense que l’exemple parle de lui même. On peut définir la taille de l’image de façon absolue (en cm, pouce etc.) mais le plus propre est de la définir de façon relative, comme dans l’exemple. Il est possible de définir la largeur (width), la hauteur (height) ou les deux. On peut aussi utiliser scale, qui donne le facteur d’échelle entre l’image d’origine et l’image dans le document, pas vraiment utile d’après moi. \includegraphics est compatible (entre autres) avec les format JPEG, PNG et… PDF.
En effet, si vous avez des figures vectorielles (faites sous Illustrator Inkscape par exemple), vous pouvez les inclure et elle resteront donc vectorielles. Le top quoi. Par contre, pdflatex n’est pas compatible avec le PostScript Encapsulé (eps). Il vous faudra donc les convertir en pdf.

Dans l’exemple, vous aurez aussi repéré l’argument ‘angle’ dans le \includegraphics. Pas très utile, mais ça peut toujours servir. Vous pouvez aussi faire une symétrie verticale en plaçant le includegraphics dans \reflectbox{}

C’est l’environnement figure qui indique qu’on travaille sur un flottant. L’argument ‘h’ signifie ‘here’, cela indique la position souhaitée du flottant. On peut mettre ‘t’ (top) ou ‘b’ (bottom) ou ‘p’ (une page spéciale pour les flottants). Il est possible de donner plusieurs positions, dans l’ordre de préférence (par exemple ‘ht’ signifie ‘ici, ou sinon en haut d’une page’). On peut techniquement forcer la position avec h !, mais cette commande est vivement déconseillé (voir en fin d’article pour des solutions plus propres).

L’environnement subfigure

Comme son nom l’indique, il sert à définir des sous figures, numérotées (a) (b) etc. Il faut pour cela charger le package adéquat avec la commande :

\usepackage{subfigure}[2002/03/15 v2.1.5 subfigure package]

Sa syntaxe est un peu particulière : on met les sous-caption entre crochets. Le rendu est vraiment très pro : en définissant des labels aux sous-figures, on peut faire référence à chacune d’elles, séparément (voir l’exemple en pdf).

[Edit :] Ce package est obsolète, il vaut mieux utiliser Subfig.

Les tableaux

Un tableau élémentaire a une syntaxe assez simple (on l’a déjà vu dans le premier billet). L’argument donné à l’ouverture de l’environnement tabular est la position du texte dans les colonnes (‘l’ pour gauche, ‘c’ pour centré et ‘r’ pour droite). Il faut donc autant de lettres que de colonnes. Les filets verticaux y sont définis par les barres verticales | (tube, ou pipe en anglais).

En plaçant le tableau dans l’environnement ‘table’, il est déclaré comme flottant.

Un tableaux à double entrée est en fait un tableau complet dont les filets sont partiels (la cellule supérieure gauche étant vide). La commande \multirow{n}{texte} signifie que la zone de texte sera étendue sur n lignes à partir de la cellule considérée (et pareil pour les colonnes, facile quoi), permettant ainsi les fusions de cellule.

Le positionnement des flottants

Comme dit dans l’introduction, il arrive que les flottants soient rejetés un peu trop loin à notre goût. Pour ça, on peut utiliser le package ‘placeins’, qui fournit la commande \FloatBarrier. Le principe est de forcer latex à poser tous les flottants en attente à l’appel de cette commande. Et pour aller plus loin, on peut automatiser cette fonction à chaque \section en chargeant placeins avec l’option suivante :

\usepackage[section]{placeins}

Il est aussi possible de ne rien déclarer du tout comme flottant. Le problème vient alors du caption, qui refuse de bosser en dehors d’un environnement flottant. Pour ça on peut donc charger le package ‘caption’ et ensuite utiliser la syntaxe suivante :

\begin{center}
  \includegraphics[width=0.5\textwidth]{image.png}
  \captionof{figure}{La légende du non-flottant}
\end{center}

 

Un flottant sur deux colonnes

Dans le cadre de la rédaction d’un article scientifique, il est possible que le format qui vous soit imposé soit du double colonnes (classe elsarticle pour Elsevier par exemple). Si vous avez des figures trop larges, sachez qu’il est alors possible de les étendre sur deux colonnes en rajoutant * après figure (ou table). Ce qui donne quelquechose comme suit :

\begin{figure*}[h]
  \centering
    \includegraphics[width=0.25\textwidth]{image.png}
    \caption{Une grosse figure qui prend de la place}
\end{figure*}

Voila, maintenant que vous savez (presque) tout de \LaTeX, reste à trouver une occasion de mettre tout ça en pratique !
Bonne compilation.

Tout ce que vous avez toujours voulu savoir sur les figures et les tableaux…
4.3 (86.67 %) 3 votes
  • Kara

    Le risque avec \FloatBarrier, c’est d’en placer partout et donc quand on insère trop d’images on peut se retrouver avec des pages avec une seule image et du blanc autour. Ça fait pas très beau et c’est contre le principe même de latex… Au final, on se retrouve juste avant l’impression à modifier la taille des images pour qu’il n’y ait pas de pages contenant une seule image. Après, j’avais lu quelque part qu’il ne faut pas dépasser un certain ratio images/texte pour qu’un document soit agréable à lire. Donc du coup, la solution c’est soit d’utiliser moins d’images, soit raconter plus de blabla autour…

  • Pingback: Introduction à LaTeX | Le Blog de Dorian()

  • Drébon

    @Kara
    En fait par moment FloatBarrier est utile (a), voire nécessaire (b).

    (a) Lorsque tu souhaites que les flottants se retrouvent dans la bonne section. D’ailleurs, placeins à l’option [section] qui redéfini la commande \section pour mettre automatiquement un FloatBarrier.
    (b) Si pour une raison x ou y tu as beaucoup de flottants, tu peux te retrouver confronter à l’erreur de compilation suivante « too many unprocessed floats ». La seule manière que j’ai trouvée pour contourner cette erreur, c’est de mettre un peu plus de FloatBarrier.

    Alors ensuite, oui, il faut faire attention à avoir un ratio texte/figures raisonnable, et l’usage de FloatBarrier est un peu anti philosophie LaTeX et peut conduire à retravailler ses images à chaque fois qu’on rajoute une ligne de texte.

    @Dorian

    Un petit truc concernant latex vs. pdflatex :
    certains paquets ne sont compatibles qu’avec latex. Cest le cas de psfrag (et de pstrick je crois). Le paquet psfrag est extrêmement utile dans les figures : il permet de substituer le texte compris dans un eps par ce que l’on veut. Ça permet d’une part d’avoir tous les textes de ses figures dans la même police que le corps de document et de mettre du code LaTeX compliqué dans ses images. Un autre usage pratique de psfrag est la traduction de figure pour conf internationales ou nationales.

    Après la vraie bonne solution serait de faire du xelatex qui supporte les formats d’images de latex et de pdflatex.

    • Pour les figures, maintenant j’essaye (dans la mesure du possible) de toujours les faire sous TikZ (billets à venir) donc ça règle le problème de cohérence de police et d’insertion de formules.
      Mais c’est vrai que des fois, par complexité de ladite figure ou par contrainte extérieure, on a pas le choix de l’éditeur.

  • Pingback: Les tableaux scientifiques sous LaTeX | Le Blog de DorianLe Blog de Dorian()