Le package colortbl fournit le mécanisme pour placer une couleur de fond derrière les cellules, lignes et colonnes d’un tableau, ainsi que pour colorer ses filets. Le chargement tient en une ligne : \usepackage[table]{xcolor}. L’option table de xcolor charge automatiquement colortbl, ce qui donne les deux fonctions à la fois : les noms de couleurs de xcolor et la coloration des tableaux de colortbl. Le cœur se compose de trois commandes — \rowcolor (colorer une ligne), \columncolor (colorer une colonne) et \cellcolor (colorer une cellule) — auxquelles s’ajoutent \rowcolors pour les bandes automatiques et \arrayrulecolor pour les filets colorés. Cette page couvre les cinq, ainsi que leur priorité : cellule avant ligne avant colonne.
Chargement — l’option table de xcolor
colortbl peut être chargé seul, mais le point d’entrée recommandé est xcolor. Charger xcolor avec l’option table active à la fois xcolor (noms de couleurs, mélanges, conversions de modèles) et colortbl (coloration dans les tableaux). colortbl dépend lui-même de deux packages internes, array et color, qui sont aussi chargés automatiquement par cette voie.
\usepackage[table]{xcolor}Cette seule ligne active tout ce qui suit : \rowcolor, \columncolor, \cellcolor, \rowcolors et \arrayrulecolor. Dans beamer, l’écriture diffère légèrement : il faut le passer comme option de classe, \documentclass[xcolor=table]{beamer}. Les couleurs peuvent être des noms simples comme gray et red, ou toute expression xcolor telle que gray!20 (20 % d’intensité) ou red!30!yellow (30 % de rouge mélangé à du jaune). Pour des fonds doux, une forme diluée comme name!20 est habituelle.
Trois commandes : ligne, colonne, cellule
Le cœur repose sur trois commandes. \rowcolor{color} colore une ligne entière, \columncolor{color} une colonne entière, et \cellcolor{color} une seule cellule. Toutes trois suivent la même forme, \columncolor[model]{color}[left overhang][right overhang] : un argument optionnel de modèle de couleur avant la couleur, puis des arguments optionnels de débordement gauche / droit après. Le débordement indique jusqu’où le panneau coloré dépasse la colonne de chaque côté ; omis, il vaut \tabcolsep par côté, ou \arraycolsep dans array.
Notez que les trois commandes se placent à trois endroits différents. \rowcolor va au début de la ligne, avant le contenu de la première cellule, c’est-à-dire juste après le \\ précédent. \columncolor ne va pas dans le corps mais dans la spécification des colonnes, sous la forme >{\columncolor{gray!20}} ; le crochet >{…} du package array injecte du contenu juste avant chaque cellule de cette colonne. Seul \cellcolor est libre : il peut apparaître n’importe où dans la cellule concernée.
\begin{tabular}{>{\columncolor{gray!20}}l c r}
\rowcolor{blue!30}
項目 & 数量 & 価格 \\
りんご & 3 & 380 \\
みかん & \cellcolor{yellow!40}5 & 120 \\
\end{tabular}Dans cet exemple, la colonne 1 est gris clair grâce à >{\columncolor{gray!20}}, la ligne d’en-tête est bleu pâle avec \rowcolor{blue!30}, et seule la cellule de quantité de « mikan » est surlignée en jaune par \cellcolor{yellow!40}. Notez que \rowcolor se trouve au début de la ligne d’en-tête, tandis que \columncolor vit dans le >{} de la spécification des colonnes.
Priorité — cellule avant ligne avant colonne
Lorsque les trois couleurs se rencontrent dans une même cellule, la gagnante est définie clairement. \cellcolor remplace \rowcolor, qui remplace \columncolor : autrement dit, cellule avant ligne avant colonne. On peut donc les superposer naturellement : colorer toute une colonne en gris (\columncolor), seulement la ligne d’en-tête en bleu (\rowcolor), puis une cellule précise en jaune (\cellcolor). Plus la portée est étroite, plus la priorité est élevée.
Avant l’existence de \cellcolor, colorer une seule cellule imposait le détour \multicolumn{1}{>{\columncolor{…}}c}{…}. Cette méthode a de vrais défauts : le contenu peut empêcher la coloration de se déclencher, et il faut recopier l’alignement de colonne à la main, source d’erreurs avec les colonnes p{}. L’auteur du package qualifie lui-même \multicolumn{1} de « silly ». Pour colorer une cellule, utilisez simplement \cellcolor.
Bandes alternées automatiques — \rowcolors
Pour colorer une ligne sur deux — des bandes zébrées — automatisez avec \rowcolors{start}{odd-row color}{even-row color} de xcolor ; notez le s final, car \rowcolor sans s est une autre commande. Placée une fois avant le tableau, elle fait alterner les couleurs des lignes suivantes comme indiqué. Le premier argument est la ligne où commence la coloration ; utilisez 2 pour sauter l’en-tête. L’un ou l’autre argument de couleur peut être vide, ce qui signifie « pas de couleur ».
\rowcolors{2}{gray!15}{white}
\begin{tabular}{l r r}
項目 & 数量 & 価格 \\
りんご & 3 & 380 \\
みかん & 5 & 120 \\
ぶどう & 2 & 600 \\
もも & 4 & 450 \\
\end{tabular}Cet exemple commence les bandes à la ligne 2, en alternant gray!15 (gris clair) et white. L’en-tête (ligne 1) reste sans couleur ; seules les lignes de données alternent. \rowcolors prend aussi un argument optionnel initial : \rowcolors[\hline]{2}{…}{…} exécute une commande comme \hline avant chaque ligne. Et comme un \rowcolor ou un \multicolumn explicite remplace la coloration automatique de \rowcolors, on peut toujours recolorer une ligne isolée au milieu des bandes.
| Commande | Ce qui est coloré | Emplacement |
|---|---|---|
\columncolor{c} | Colonne entière | Dans >{…} de la spécification |
\rowcolor{c} | Ligne entière | Début de ligne, avant la première cellule |
\cellcolor{c} | Cellule unique | Dans cette cellule, n’importe où |
\rowcolors{n}{a}{b} | Lignes alternées | Une fois avant le tableau |
\arrayrulecolor{c} | Filets suivants | Hors tableau / début de ligne / >{} de la spécification |
Colorer les filets — \arrayrulecolor
La couleur des filets (\hline, \cline et | vertical) se règle avec \arrayrulecolor{color}. C’est une déclaration globale prenant les mêmes arguments que \color, et elle peut se placer hors du tableau, au début d’une ligne ou dans un >{} de la spécification. Attention : donnée au milieu du tableau, elle n’affecte que les filets dessinés ensuite ; les filets verticaux déjà déclarés dans le préambule gardent leur couleur. Pour revenir à la valeur par défaut, déclarez de nouveau \arrayrulecolor{black}.
L’espace entre les doubles filets créés par || ou \hline\hline reste blanc par défaut. Pour le colorer aussi, utilisez \doublerulesepcolor{color} avec la longueur \doublerulesep, qui donne la largeur de cet espace. L’exemple ci-dessous met les filets en bleu et l’espace du double filet en jaune.
\setlength\arrayrulewidth{1pt}\arrayrulecolor{blue}
\setlength\doublerulesep{2pt}\doublerulesepcolor{yellow}
\begin{tabular}{||l|c||}
\hline\hline
one & two \\
three & four \\
\hline\hline
\end{tabular}Pour colorer manuellement un seul filet vertical, on peut aussi insérer !{\color{green}\vline} dans la spécification à la place de |, sans commande spéciale. \arrayrulewidth est la longueur qui contrôle l’épaisseur des filets ; une ligne très fine peut devenir peu visible une fois colorée, donc épaississez-la légèrement si nécessaire.
Utilisation avec booktabs et précautions
colortbl fonctionne avec booktabs, mais l’association a une particularité. booktabs place un petit espace au-dessus et au-dessous de \toprule, \midrule et \bottomrule (\aboverulesep et \belowrulesep), ce qui laisse un espace blanc entre la couleur de fond d’une ligne et le filet. Pour que le remplissage touche le filet, le correctif courant consiste à mettre ces espaces à 0pt et à déplacer cette quantité dans \extrarowheight.
Autre problème classique : un contenu haut ou un gros corps peut toucher le \hline ou le bord supérieur du panneau coloré juste au-dessus. Pour cela, colortbl fournit la longueur \minrowclearance : \setlength\minrowclearance{2pt} ajoute un peu d’espace au-dessus des lignes hautes. Restez modéré : si la hauteur des capitales plus cette valeur dépasse la hauteur normale de ligne, l’espacement devient irrégulier.
Pour finir, un mot de retenue. La plupart des guides typographiques mettent en garde contre l’excès de filets et de couleurs. Les fonds colorés fonctionnent mieux lorsqu’ils sont réservés à une ligne d’en-tête à souligner, ou à de légères bandes qui aident l’œil à suivre. La spécification des couleurs elles-mêmes (noms, modèles, mélanges) est traitée dans la page « Couleurs (xcolor) », et les conventions de filets dans la page « Filets ».