Programmation LaTeX/Tableaux

Un livre de Wikibooks.

Table des matières - Généralités - Premiers pas - Structure du document - Gestion de la bibliographie - Tableaux - Images - Éléments flottants et figures - Mise en forme du texte - Choix de la police - Mise en page - Mathématiques - Gestion des gros documents - Faire des présentations - Arts et loisirs - Dessiner avec LaTeX - Créer une extension ou une classe - Programmer avec LaTeX - Annexes - Vade mecum - Conversion - Glossaire de typographie - Index - Commandes - Liens externes

Dans les livres scolaires, les tableaux sont souvent utilisés pour récapituler des résultats d'une recherche. Il est donc nécessaire de maîtriser leur emploi afin de produire des documents de bonne qualité.

La gestion des tableaux n'est cependant pas très intuitive. Les tableaux de base ne sont pas très astreignants, leur logique est similaire au HTML (cf. Programmation HTML/Tableaux), mais vous remarquerez assez rapidement qu'un tableau un peu plus élaboré demande plus de temps pour sa construction.

Avant de continuer, veillez à bien avoir assimilé les tableaux de base présentés dans la section Premiers pas : faire des tableaux.

Sections

[modifier] L'environnement tabular

Rappelons quelques concepts déjà explicités.

Environnement
Un environnement est une déclaration particulière destinée à la composition du texte dans un style spécifique. Tous les environnements commencent et finissent de la même façon :
\begin{nom-environnement}
...
...
\end{nom-environnement}
Environnement tabular
L'environnement tabular est un autre type d'environnement, conçu pour disposer vos données dans des tableaux. Des paramètres sont requis après la déclaration de l'environnement pour décrire l'alignement de chaque colonne. Le nombre de colonnes n'a pas besoin d'être indiqué puisqu'il est déduit du nombre de paramètres fournis. Il est également possible d'ajouter des traits verticaux entre les colonnes. Les symboles suivants sont disponibles pour décrire les colonnes du tableau :
  • l : colonne alignée à gauche
  • c : colonne centrée
  • r : colonne alignée à droite
  • p{largeur} : colonne de largeur fixée, justifiée et avec alinéa ; le texte est positionné en haut de la cellule
  • m{largeur} : comme précédemment, mais le texte est centré verticalement
  • b{largeur} comme précédemment, mais le texte est positionné en bas de la cellule
Notez bien que l'alignement vertical se fait par rapport aux lignes de texte : première ligne pour p, dernière ligne pour b, centre du paragraphe pour m. Cela peut poser problème lorsqu'une case contient une image : l'alignement ne se fait pas par rapport à la hauteur de l'image mais pas rapport à la ligne sur laquelle elle est posée, donc par rapport à la ligne unique posée au fond de la cellule. On peut contourner ce problème avec un \raisebox.

les paramètres m et b nécessitent l'utilisation de l'extension array
  • | : filet vertical
  • || : double filet vertical
Une fois dans l'environnement,
  • & : séparateur de colonne
  • \\ : débute une nouvelle ligne
  • \hline : filet horizontal

Remarquez, que les espaces insérés entre ces commandes sont purement inutiles, mais ils facilitent la lecture.

[modifier] Tableau de base

Cet exemple montre comment créer un simple tableau en LaTeX. C'est un tableau trois par trois, mais sans aucun filet.

\begin{tabular}{ l c r }
   1 & 2 & 3 \\
   4 & 5 & 6 \\
   7 & 8 & 9 \\
 \end{tabular}

Image:tableau_de_base1.png

Modifions celui-ci en y ajoutant quelques filets verticaux :

\begin{tabular}{ l | c || r | }
   1 & 2 & 3 \\
   4 & 5 & 6 \\
   7 & 8 & 9 \\
 \end{tabular}

Image:tableau_de_base2.png

Pour ajouter des filets verticaux tout en haut et tout en bas du tableau :

\begin{tabular}{ l | c || r | }
 \hline			
   1 & 2 & 3 \\
   4 & 5 & 6 \\
   7 & 8 & 9 \\
 \hline  
 \end{tabular}

Image:tableau_de_base3.png

Et finalement, pour ajouter des filets centrés entre toutes les lignes (remarquez l'utilisation de l'environnement center):

\begin{center}
   \begin{tabular}{ l | c || r | }
     \hline
     1 & 2 & 3 \\ \hline
     4 & 5 & 6 \\ \hline
     7 & 8 & 9 \\
     \hline
   \end{tabular}
 \end{center}

Image:tableau_de_base4.png

[modifier] Texte dans un tableau

Les algorithmes de LaTeX pour mettre en forme les tableaux ont quelques imperfections. L'une d'entre elles est qu'il ne mettra pas automatiquement le texte sur plusieurs lignes dans les cellules, même si celui-ci déborde de la largeur de la page. Pour les colonnes qui contiendront une certaine quantité de texte, il est recommandé d'employer l'attribut p et d'indiquer la largeur désirée de la colonne (bien que cela puisse obliger à effectuer quelques ajustements avant d'obtenir le résultat escompté).

Avant de procéder, nous devons présenter le système de mesure que LaTeX emploie. Il est très souple puisque vous pouvez choisir parmi toute une variété d'unités de longueur :

  • pt : point anglo-saxon, 1/72 de pouce ;
  • mm : millimètre ;
  • cm : centimètre ;
  • in : pouce (2,54 cm) ;
  • ex : hauteur d'x (parfois appelé à tort hauteur d'œil), hauteur d'une lettre sans hampe ni jambage dans la police courante ;
  • em : cadratin, grossièrement la largeur d'un M (capitale) dans la police courante.

Il existe des commandes connues sous le nom de commandes de longueur, qui jouent le rôle de variable, qui n'ont pas de valeurs fixes car elles dépendent de la configuration de la classe et/ou du préambule courants du document. Les plus utiles sont :

  • \parindent : la taille de l'indentation ;
  • \baselineskip : distance verticale entre les lignes ;
  • \parskip : espace supplémentaire entre les paragraphes ;
  • \textwidth : la largeur d'une ligne de texte dans l'environnement local (par exemple, les lignes sont généralement plus étroites dans le résumé que dans le texte normal) ;
  • \textheight : la hauteur du texte dans la page ;

Les exemples fournis sont très longs parce que j'illustrais ce qui se produit quand il y a juste un morceau de texte dans les cellules d'un tableau. Ainsi au lieu de le reproduire dans la page, allez ([1]) directement consulter le fichier Latex en exemple, wrapped.tex et puis regardez le résultat.

[modifier] Alignement du texte

Lorsque l'on utilise des colonnes du type p, m, c ou b, il peut être utile de changer la façon dont le paragraphe est aligné. Pour cela la méthode la plus claire est de définir un nouveau type de colonne qui réalise l'alignement désiré. Par exemple le code latex suivant définit un nouveau type de colonne ("M") qui centre verticalement le paragraphe par rapport à la ligne (comme le type de colonne m) et aligne le paragraphe à gauche de la colonne ("drapeau droit" en typographie, \raggedright en LaTeX):

\newcolumntype{M}[1]{>{\raggedright}m{#1}}

On peut ensuite l'utiliser dans un tableau comme suit:

\begin{tabular}{|l|M{4cm}|}
    \hline
    colonne 1 & colonne "M" \tabularnewline
    \hline
    court texte & Texte plus long qui sera centré dans la ligne et aligné à droite dans la colonne  \tabularnewline
    \hline
 \end{tabular}

Ce qui donne: Image:tableauAlignementDroite.png

À noter:

  • Cet exemple nécessite l'utilisation de l'extension array (\usepackage{array})
  • L'utilisation de \tabularnewline à la place de \\ pour terminer une ligne du tableau.


D'autres solutions existent, voir cette page (en anglais).

[modifier] L'environnement tabular*, contrôle de la largeur d'un tableau

C'est fondamentalement une légère extension de la version originale de tableau, bien qu'elle exige un paramètre supplémentaire (avant les descriptions de colonne) pour indiquer la largeur souhaitée du tableau.

\begin{tabular*}{0.75\textwidth}{ | c | c | c | r | }
  \hline
  label 1 & label 2 & label 3 & label 4 \\
  \hline 
  item 1  & item 2  & item 3  & item 4  \\
  \hline
\end{tabular*}

Cependant, cela ne ressemble pas à ce qui était attendu. Les colonnes ont toujours leur largeur normale (juste assez large pour adapter leur contenu tandis que les lignes sont aussi larges que la largeur demandée du tableau. Le tableau a une apparence très laide. La raison de ce désordre est que vous devez également insérer un espace supplémentaire de colonne. Heureusement, Latex a des longueurs élastiques, qui à la différence d'autres, ne sont pas fixes, et Latex peut dynamiquement décider du moment jusqu'auquel elles doivent rester fixes. Ainsi, la solution est :

\begin{tabular*}{0.75\textwidth}{@{\extracolsep{\fill}} | c | c | c | r | }
  \hline
  label 1 & label 2 &  3 & label 4 \\
  \hline 
  item 1  & item 2  &  3  & item 4  \\
  \hline
\end{tabular*}

Vous remarquerez la présence de la construction @{...} ajoutée au début de la description de colonne. Plus de détails de ce rajout seront donnés sous peu. À l'intérieur de celle-ci, la commande \extracolsep, exige une largeur comme paramètre. Une largeur fixe aurait pu être employée, cependant, en utilisant une longueur élastique, telle que \fill, les colonnes sont automatiquement espacées de tel sorte que le résultat voulu est atteint.

[modifier] Expressions avec @

Maintenant qu'il a été présenté, il serait intéressant de nous pencher sur le « prescripteur » @, bien que celui-ci n'ait pas un grand nombre d'applications évidentes.

Il prend typiquement du texte comme paramètre, et lorsqu'il est apposé à une colonne, il insère automatiquement ce texte dans chaque cellule de cette colonne avant les données mêmes de cette cellule. Il faut préciser qu'une fois utilisé, l'espace entre les colonnes concernées est supprimé. Pour ajouter un espace, employez la commande @{\hspace{largeur}}.

Pour mieux comprendre cela exigera quelques exemples d'utilisation. Parfois, il est souhaitable dans les tables scientifiques d'avoir les nombres alignés sur la virgule décimale. Ceci peut être réalisé en faisant ce qui suit:

 \begin{tabular}{r@{,}l}
  3&14159\\
  16&2\\
  123&456\\
\end{tabular}

Image:align.png

Son application supprimant les espaces, il peut être très utile pour contrôler l'espacement horizontal entre les colonnes. À partir d'un tableau de base, changeons les descriptions des colonnes:

\begin{tabular}{|l|l|}
\hline
truc & truc \\ \hline
truc & truc \\
\hline
\end{tabular}
{|l|l|}

Image:prescripteur1.png

{|@{}l|l@{}|}

Image:prescripteur2.png

{|@{}l@{}|l@{}|}

Image:prescripteur3.png

{|@{}l@{}|@{}l@{}|}

Image:prescripteur4.png


[modifier] Lignes enveloppant des colonnes multiples

La commande adéquate ressemble à ceci:

\multicolumn{nomb_col}{alignement}{contenu}.
  • nomb_col est le nombre de colonnes consécutives à fusionner;
  • alignement est assez évident, et doit être remplacé par l, c, ou r ;
  • contenu représente simplement les données mêmes que vous désirez inclure dans la cellule.

Donnons un exemple simple:

\begin{tabular}{|l|l|}
  \hline
  \multicolumn{2}{|c|}{Membres de l'équipe} \\
  \hline
  GK & Paul Robinson \\
  LB & Lucus Radebe \\
  DC & Michael Duberry \\
  DC & Dominic Matteo \\
  RB & Didier Domi \\
  MC & David Batty \\
  MC & Eirik Bakke \\
  MC & Jody Morris \\
  FW & Jamie McMaster \\
  ST & Alan Smith \\
  ST & Mark Viduka \\
  \hline
\end{tabular}

Image:multicolonne.png

[modifier] Colonnes enveloppant des lignes multiples

Nous avons proposé précédemment une méthode simple mais détournée (cf. Faire des tableaux > Fusionner les lignes).

Si l'on veut vraiment fusionner les lignes, il faut avoir recours à l'extension multirow, et donc ajouter

\usepackage{multirow}

dans le préambule. Cela fournit alors la commande requise pour envelopper des lignes :

\multirow{nomb_ligne}{largeur}{contenu}

Les paramètres sont assez simples à comprendre. Avec le paramètre largeur, vous pouvez indiquer une largeur fixe si vous le désirez, ou une largeur normale (c'est-à-dire, juste assez large pour adapter le contenu de la colonne) puis entrez simplement un astérisque (*). Cette approche a été employée dans l'exemple suivant:

\begin{tabular}{|l|l|l|}
  \hline
  \multicolumn{3}{|c|}{Membres de l'équipe} \\
  \hline
  Gardien de but & GK & Paul Robinson \\ \hline
  \multirow{4}{*}{Défenseurs} & LB & Lucus Radebe \\
    & DC & Michael Duberry \\
    & DC & Dominic Matteo \\
    & RB & Didier Domi \\ \hline
  \multirow{3}{*}{Milieux de terrain } & MC & David Batty \\
    & MC & Eirik Bakke \\
    & MC & Jody Morris \\ \hline
  Avant & FW & Jamie McMaster \\ \hline
  \multirow{2}{*}{Attaquants} & ST & Alan Smith \\
    & ST & Mark Viduka \\
 \hline
\end{tabular}

Image:multiligne.png

Ce qui est essentiel de remarquer lorsque vous utilisez la commande \multirow sur les lignes consécutives à envelopper, est qu'une entrée vide devant les cellules concernées doit être insérée : en effet, la commande \multirow indique simplement que le texte est sur plusieurs lignes, il ne modifie pas la structure du tableau (contrairement à \multicolumn). Ceci a de l'importance lorsque l'on met un fond coloré (voir ci-après).

[modifier] Couleur

Nous avons vu dans Programmation LaTeX/Options de mise en forme avancées > Couleur comment mettre du texte en couleur, caractères et fond.

Mais le fond du texte est une boîte plus petite que la cellule du tableau. Si l'on veut metttre le fond d'une cellule en couleur, il faut utiliser l'extension colortbl. Vous pouvez l'appeler en même temps de xcolor en utilisant l'option table :

\usepackage[table]{xcolor}

Le recours à l'extension array est fortement recommandé pour améliorer le rendu.

Vous pouvez alors définir :

  • la couleur de fond d'une ligne en mettant \rowcolor{couleur} en début de ligne ;
  • la couleur de fond d'une colonne en mettant >{\columncolor{couleur}} avant la désignation de la colonne dans la définition de l'environnement tabular ; on peut lui adjoindre la couleur des caractères >{\color{couleur} \columncolor{couleur}} ;
  • la couleur de fond d'une cellule en mettant \cellcolor{couleur} en début de cellule.

Par exemple

\begin{tabular}{l l >{\columncolor{green}} l}
   1 & 2 & 3 \\
   a & b & c
\end{tabular}
\begin{tabular}{l l l}
   \rowcolor{cyan} 1 & 2 & 3 \\
   a & b & c
\end{tabular}
\begin{tabular}{l l >{\columncolor{green}} l}
   1 & 2 & 3 \\
   a & \cellcolor{gray} b & c
\end{tabular}

On a souvent recours à une alternance de couleurs d'une ligne à l'autre. On peut utiliser pour cela la commande \rowcolors (avec un sthinsp;) :

\rowcolors{début}{couleur impaire}{couleur paire}

l'argument début est la ligne où commence cette alternance, ce qui permet d'épargner les lignes d'en-tête. Par exemple

 \rowcolors{2}{gray}{}
\begin{tabular}{l l >{\columncolor{green}} l}
   1 & 2  & 3 \\
   a & b  & c \\
   I & II & III
\end{tabular}

Notez que :

  • une commande \rowcolor annule une commande \columncolor pour la ligne en cours ;
  • une commande \cellcolor annule une commande \columncolor ou \rowcolor(s) pour la cellule en cours.

La commande \arrayrulecolor{couleur} permet de définir la couleur des filets (horizontaux et verticaux). Elle influe sur les filets tracés après cette commande ; elle peut donc être placée avant un tableau ou bien à l'intérieur de celui-ci.

Dans toutes les commandes, {couleur} peut être remplacé par [modèle]{couleur}, cf. Programmation LaTeX/Options de mise en forme avancées > Modèles de couleur
Cas de \multirow

La fonction \columncolor colorie les cases une par une. Lorsque l'on utilise \multirow, on a donc :

  1. La première case est colorée par \columncolor.
  2. Le texte est écrit sur plusieurs lignes par \multirow.
  3. Au passage à la ligne suivante, la deuxième case est colorée par \columncolor.

La deuxième ligne de texte est donc recouverte par la couleur de fond. Pour éviter ceci, il faut mettre le \multirow sur la dernière ligne et utiliser une valeur négative pour le nombre de lignes. Par exemple

 \begin{tabular}{l >{\columncolor{lightgray}} l l}
    1 &   & 3 \\
    a &   & c \\
    I & \multirow{-3}{1em}{2 A II} & III
 \end{tabular}

[modifier] Résumé

Nous en avons déjà assez dit au sujet des tableaux de base à mon avis. Après vous pouvez expérimenter afin d'en maîtriser le concept. Je dois admettre que la syntaxe d'un tableau en Latex peut sembler plutôt tordue, et ainsi voir des exemples plus sophistiqués pourrait vous embrouiller davantage. Mais heureusement, nous en avons assez vu pour que vous puissiez créer par vous-même n'importe quel tableau dont vous pouvez avoir besoin dans vos documents. Il est clair que Latex a beaucoup de ressources, ainsi attendez-vous à trouver des instructions plus avancées dans un proche avenir.

Créer une compilation