Comment fusionner des cellules d’une même colonne dans un tableau ?#
Certains tableaux nécessitent une cellule qui s’étendent sur plusieurs lignes. Le cas classique est celui où la colonne la plus à gauche étiquette le reste de la table. Si cette présentation peut être éventuellement traitée en utilisant une séparation diagonale comme vu à la question « Comment diviser une cellule par une diagonale ? », cette technique reste très limitée. Voici des solutions plus générales.
1. Avec l’extension multirow#
L’extension multirow vous permet de construire des cellules s’étendant sur plusieurs lignes. Par exemple :
\documentclass[french]{article}
\usepackage[T1]{fontenc} % Encodage T1 (adapté au français)
\usepackage{lmodern} % Caractères plus lisibles
\usepackage{babel} % Réglages linguistiques (avec french)
\pagestyle{empty} % N'affiche pas de numéro de page
\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|}
\hline
\multirow{4}{*}{Texte multiligne}
& Ligne 1 \\
& Ligne 2 \\
& Ligne 3 \\
& Ligne 4 \\
\hline
\end{tabular}
\end{document}
L’extension centrera verticalement « Texte multiligne » dans la cellule étendue. Notez que les lignes qui ne contiennent pas la spécification multiligne doivent avoir des cellules vides pour laisser la place à la cellule multiligne.
Le symbole *
peut être remplacé par une largeur de colonne. Dans ce cas,
le contenu de la cellule multiligne peut contenir des sauts de ligne imposés :
\documentclass[french]{article}
\usepackage[T1]{fontenc} % Encodage T1 (adapté au français)
\usepackage{lmodern} % Caractères plus lisibles
\usepackage{babel} % Réglages linguistiques (avec french)
\pagestyle{empty} % N'affiche pas de numéro de page
\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|}
\hline
\multirow{4}{25mm}{Texte%
\\multiligne}
& Ligne 1 \\
& Ligne 2 \\
& Ligne 3 \\
& Ligne 4 \\
\hline
\end{tabular}
\end{document}
Un effet similaire (permettant un peu plus de sophistication) peut être obtenu
en mettant un tableau plus petit qui aligne le texte dans une commande
\multirow
utilisant *
.
La commande \multirow
peut également être utilisée pour placer
des textes écrits verticalement d’un côté ou de l’autre d’un tableau
(à l’aide de l’extension graphicx qui fournit la commande
\rotatebox
) :
\documentclass[french]{article}
\usepackage[T1]{fontenc} % Encodage T1 (adapté au français)
\usepackage{lmodern} % Caractères plus lisibles
\usepackage{babel} % Réglages linguistiques (avec french)
\pagestyle{empty} % N'affiche pas de numéro de page
\usepackage{multirow}
\usepackage{graphicx}
\begin{document}
\begin{tabular}{|l|l|}
\hline
\multirow{4}{*}{%
\rotatebox{90}{Texte}}
& Ligne 1 \\
& Ligne 2 \\
& Ligne 3 \\
& Ligne 4 \\
\hline
\end{tabular}
\end{document}
Cet exemple donne un texte qui va vers le haut. Pour un texte allant
vers le bas, il faudrait prendre un angle de -90
.
Pour créer une cellule s’étendant sur plusieurs lignes et plusieurs colonnes,
il faut inclure la commande \multirow
à l’intérieur de la commande
\multicolumn
, l’inverse ne fonctionnant pas :
\documentclass[french]{article}
\usepackage[T1]{fontenc} % Encodage T1 (adapté au français)
\usepackage{lmodern} % Caractères plus lisibles
\usepackage{babel} % Réglages linguistiques (avec french)
\pagestyle{empty} % N'affiche pas de numéro de page
\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|c|}\hline
\multicolumn{2}{|c|}{
\multirow{2}{*}{Cellules combinées}}
& Haut droit \\ \cline{3-3}
\multicolumn{2}{|c|}{} & Centre droit \\ \hline
Bas gauche & Bas centre & Bas droit \\ \hline
\end{tabular}
\end{document}
L’extension multirow est configurée pour interagir
avec l’extension bigstrut (abordée dans la question
« Comment améliorer l’espacement entre les lignes d’un tableau ? »).
Vous pouvez utiliser un argument facultatif de la commande \multirow
pour dire combien de lignes de votre cellule multiligne sont ouvertes
avec \bigstrut
.
La documentation de multirow et de bigstrut se trouve, sous forme de commentaires, dans les fichiers des extensions elles-mêmes.
2. Avec l’extension tabularray#
L’extension tabularray propose une syntaxe plus unifiée pour
présenter des tableaux. Au sein de son environnment tblr
, elle traite
en particulier la fusion des cellules avec sa commande \SetCell
placée
dans la cellule qui doit être s’étaler dans le tableau. Elle a
pour syntaxe :
\SetCell[r=⟨hauteur⟩,c=⟨largeur⟩]{⟨alignement⟩}
Dans cette syntaxe, ⟨hauteur⟩
est le nombre de lignes fusionnées,
⟨largeur⟩
le nombre de colonne fusionnées tandis que ⟨alignement⟩
vaut c
,l
ou r
selon les conventions usuelles d’alignement
dans les tableaux.
L’extension propose également une variante syntaxique où les définitions de fusion peuvent se faire dans l’en-tête du tableau avec l’option
cell{⟨x⟩}{⟨y⟩}={r=⟨hauteur⟩,c=⟨largeur⟩}{⟨alignement⟩}
Ici, ⟨x⟩
et ⟨y⟩
désignent les coordonnées de la cellule à modifier
dans le tableau.
Voici un exemple des deux méthodes :
\documentclass[french]{article}
\usepackage[T1]{fontenc} % Encodage T1 (adapté au français)
\usepackage{lmodern} % Caractères plus lisibles
\usepackage{babel} % Réglages linguistiques (avec french)
\pagestyle{empty} % N'affiche pas de numéro de page
\usepackage{tabularray}
\begin{document}
Un tableau avec le code de fusion dans les cellules :
\begin{table}[h]
\centering
\begin{tblr}{|c|c|}
\hline
\SetCell[r=4]{c} Texte multiligne & Ligne 1 \\
Ho ! & Ligne 2 \\
Hooooo ! & Ligne 3 \\
Hooooooooooooooooooooooooo ! & Ligne 4 \\
\hline
\end{tblr}
\end{table}
Le même tableau avec le code de fusion dans l'en-tête
du tableau :
\begin{table}[h]
\centering
\begin{tblr}{colspec={|c|c|},cell{1}{1}={r=4}{c}}
\hline
Texte multiligne & Ligne 1 \\
& Ligne 2 \\
& Ligne 3 \\
& Ligne 4 \\
\hline
\end{tblr}
\end{table}
\end{document}
À faire
Poursuivre la rédaction d’exemples.
D’autres fonctionnalités de cette extension sont présentées à la question « Comment construire un tableau avec le package tabularray ? ».