Résumé
Cette leçon étend le tableau lisible de la leçon précédente aux cas que la grille simple ne résout pas. Elle enseigne à fusionner des cellules en largeur avec \multicolumn, pour regrouper des en-têtes sous un filet partiel et pour changer l’alignement d’une seule cellule, et elle établit où va la largeur excédentaire d’un en-tête regroupé ; elle enseigne à fusionner des cellules en hauteur avec \multirow et à décider quand il vaut mieux l’éviter ; elle compare trois manières de donner à un tableau la largeur de la ligne (tabularx avec sa colonne X, tabular* avec \extracolsep, et la mise à l’échelle avec \resizebox, qui est déconseillée) ; elle compose des tableaux de plusieurs pages avec longtable, avec leur en-tête répété et les passes dont ils ont besoin ; elle présente la rotation des pages pour les tableaux très larges ; elle produit des tableaux à partir d’un fichier de données avec csvsimple et pgfplotstable, en créant le fichier avec filecontents ; elle montre tabularray comme alternative moderne ; et elle se termine par les erreurs typiques, lues dans de vrais journaux de compilation.
Objectifs d’apprentissage
- Construire des en-têtes regroupés avec
\multicolumnet\cmidrule, compter les cellules de chaque ligne et prévoir le résultat quand le compte ne correspond pas. - Choisir entre
\multirowet la cellule vide de la tradition de booktabs, en justifiant le choix par la lecture. - Ajuster un tableau à la largeur de la ligne avec tabularx ou avec
tabular*, et expliquer pourquoi on ne le met pas à l’échelle avec\resizebox. - Composer avec longtable un tableau de plusieurs pages doté de son propre en-tête et de son propre pied, interpréter ses avertissements et savoir pourquoi il ne peut pas aller dans un flottant.
- Produire un tableau à partir d’un fichier de données et expliquer ce que l’on gagne à n’avoir qu’une seule source pour les données.
Cellules qui s’étendent sur plusieurs colonnes
La commande \multicolumn{n}{alignement}{texte} occupe la place de n cellules contiguës d’une ligne et les remplace par une seule, avec l’alignement indiqué dans son deuxième argument, qui s’écrit comme dans le préambule du tableau (l, c, r, p{…}, et aussi @{}). Il en découle une règle de compte que l’auteur doit vérifier à chaque ligne : la somme des cellules simples et des largeurs déclarées dans chaque \multicolumn doit être, au plus, le nombre de colonnes du préambule.
Changer l’alignement d’une seule cellule
L’usage le plus modeste de \multicolumn ne s’étend que sur une colonne : \multicolumn{1}{c}{…} ne fusionne rien, mais impose à cette cellule un alignement différent de celui de sa colonne. C’est la manière de centrer l’en-tête d’une colonne de nombres alignés à droite, ou d’aligner à droite l’intitulé d’une ligne de total, qui doit se trouver près de son nombre.
\documentclass{article}\usepackage{fontspec}\usepackage[french]{babel}\usepackage{booktabs}\begin{document}\begin{tabular}{llr}\toprulePoste & Détail & \multicolumn{1}{c}{Montant} \\\midruleMissions & Deux séjours aux archives & 1\,200 \\Fournitures& Papier et disques externes & 300 \\Prestations& Numérisation de fonds & 850 \\\midrule\multicolumn{2}{r}{Total} & 2\,350 \\\bottomrule\end{tabular}\end{document}L’en-tête « Montant » est centré au-dessus d’une colonne qui reste alignée à droite, et l’intitulé « Total », qui s’étend sur les deux premières colonnes, est aligné à droite, près de son nombre.
En-têtes regroupés
Quand plusieurs colonnes partagent une catégorie, le tableau gagne à avoir un en-tête à deux niveaux : en haut, le nom du groupe, qui s’étend sur ses colonnes ; en dessous, celui de chaque colonne. Entre les deux niveaux, booktabs offre le filet partiel \cmidrule{2-3}, qui ne souligne que les colonnes 2 à 3 ; avec les options (lr), \cmidrule(lr){2-3}, le filet est un peu raccourci à gauche et à droite, de sorte que deux filets contigus ne se touchent pas et que l’œil voie deux groupes.
\documentclass{article}\usepackage{fontspec}\usepackage[french]{babel}\usepackage{booktabs}\begin{document}\begin{tabular}{lrrrr}\toprule& \multicolumn{2}{c}{Groupe témoin}& \multicolumn{2}{c}{Groupe expérimental} \\\cmidrule(lr){2-3} \cmidrule(lr){4-5}Mesure & Moyenne & É.-t. & Moyenne & É.-t. \\\midruleInitiale & 52,1 & 8,3 & 51,7 & 7,9 \\Finale & 54,0 & 8,1 & 61,2 & 7,4 \\\bottomrule\end{tabular}\end{document}La première ligne a une cellule vide (le & initial) et deux cellules de deux colonnes : un plus deux plus deux, cinq, comme le préambule. On remarquera que la colonne de l’écart-type du groupe expérimental est plus large que celle du groupe témoin.
Où va la largeur excédentaire
La différence de largeurs de l’exemple précédent n’est pas fortuite. Si le texte d’un \multicolumn est plus large que la somme des colonnes qu’il couvre, le tableau doit s’élargir, et le moteur donne tout l’excédent à la dernière de ces colonnes ; les autres conservent leur largeur naturelle. « Groupe expérimental » est plus large que « Moyenne » et « É.-t. » réunis, et c’est la seconde qui reçoit la différence. Avec un en-tête beaucoup plus long que ses données, l’effet cesse d’être discret.
\documentclass{article}\usepackage{fontspec}\usepackage[french]{babel}\usepackage{booktabs}\begin{document}\begin{tabular}{lrr}\toprule& \multicolumn{2}{c}{Groupe expérimental après l’intervention} \\\cmidrule(lr){2-3}Mesure & Moyenne & É.-t. \\\midruleInitiale & 51,7 & 7,9 \\Finale & 61,2 & 7,4 \\\bottomrule\end{tabular}\end{document}La moyenne se trouve loin de son écart-type, séparée de lui par un blanc qui ne signifie rien. La correction n’est pas typographique, mais rédactionnelle : un en-tête bref (« Expérimental ») et l’explication dans la légende du tableau ou dans le texte.
Chargement du contenu…