Placement et mise en forme des tableaux

tabular compose seulement le *contenu* d’un tableau. Donner à ce tableau un titre numéroté (une légende) et le faire flotter à un emplacement raisonnable sur la page est le rôle de l’environnement flottant table. Cette page couvre tout ce qui entoure le tabular : les spécificateurs de placement dans \begin{table}[htbp], les conventions de \caption et \label, les techniques de réduction et de rotation pour un tableau trop large, ainsi que threeparttable pour ajouter des notes. Pour construire le contenu lui-même, voir « bases de tabular ».

Pourquoi les tableaux « flottent »

Les tableaux et les figures ne peuvent pas être coupés par un saut de page : ils doivent tenir entiers sur une seule page. Si LaTeX essayait d’en placer un exactement à l’endroit où il apparaît dans la source alors que l’espace restant est insuffisant, on obtiendrait un grand blanc ou un tableau maladroitement tronqué. LaTeX traite donc tableaux et figures comme des flottants : il les détache du texte courant et les fait flotter automatiquement vers un emplacement commode, souvent le haut de la page suivante.

L’environnement table sert à utiliser ce mécanisme. On y place un tabular, on lui donne un titre numéroté comme « Tableau 1 » avec \caption{…}, puis on le rend référençable dans le texte avec \label{…} et \ref{…}. Dans le texte, on écrit donc une référence par numéro, par exemple « comme le montre le tableau 1 » ; quelle que soit la page où le tableau finit par flotter, la référence pointe vers le bon numéro. C’est le bénéfice des flottants.

Spécificateurs de placement [htbp] et [H]

Dans les crochets juste après \begin{table}, on donne, une lettre à la fois, ses préférences d’emplacement. Il existe quatre spécificateurs.

SpécificateurSens
hIci, à la position de la source. Mais h seul n’est pas autorisé ; t est ajouté automatiquementHere
tHaut d’une page de texteTop
bBas d’une page de texteBottom
pPage séparée réservée aux flottants, sans texte courantPage

Sans spécificateur, la valeur par défaut est tbp dans article comme dans book. Enchaîner plusieurs lettres, comme [htbp], donne l’ensemble des emplacements autorisés : « ici si possible, sinon en haut, sinon en bas, sinon sur une page de flottants ». Point crucial : l’ordre écrit ne change pas l’ordre des essais de LaTeX. Il tente toujours t, puis b, puis p ; [htbp] et [bpht] se comportent donc de la même manière. Voyez cela comme une chaîne de repli si le premier choix ne tient pas.

Un point d’exclamation initial, comme dans [!ht], signifie : « pour ce flottant seulement, ignorer les limites internes sur le nombre de flottants et la proportion flottant/texte sur la page, puis tenter le placement ». ! ne veut pas dire « mets-le ici » : il ne fait qu’assouplir les critères. Pour le fixer réellement à l’endroit de la source, utilisez [H] du package float : avec \usepackage{float}, \begin{table}[H] empêche le tableau de flotter et le compose exactement à ce point de la source, au risque de laisser un grand blanc en bas de page. Il est utile de voir H comme « un flottant qui ne flotte pas ».

document.tex
\usepackage{float}   % \begin{table}[H] のために

\begin{table}[htbp]
  \centering
  \caption{四半期ごとの売上}
  \label{tab:sales}
  \begin{tabular}{lrr}
    \hline
    四半期 & 売上 & 前年比 \\
    \hline
    Q1 & 1{,}200 & +5\% \\
    Q2 & 1{,}350 & +8\% \\
    \hline
  \end{tabular}
\end{table}

On le référence dans le texte avec Table~\ref{tab:sales} (le ~ est une espace insécable qui empêche le mot et le numéro d’être séparés par un saut de ligne). Les solutions lorsque le placement refuse obstinément de coopérer sont détaillées dans la page « Flottants et placement ».

Légende, label et centrage

\caption{…} donne à un flottant un titre numéroté, par exemple « Tableau 1: » dans article ou « Tableau 1.1: » dans book. Tableaux et figures utilisent des compteurs séparés, donc leurs numéros ne se mélangent pas. Avec l’argument optionnel \caption[short]{full caption}, la liste des tableaux affiche la forme courte, tandis que le corps affiche la forme complète.

Deux conventions comptent. D’abord, c’est \caption qui avance le compteur, donc \label doit venir après \caption ; dans l’ordre inverse, \ref pointera vers le numéro précédent. Ensuite, la convention de placement : par usage, la légende se met au-dessus d’un tableau et au-dessous d’une figure. Dans LaTeX, elle est *au-dessus* si \caption est écrit *avant* le tabular, et *au-dessous* s’il est écrit *après*.

\centering est une déclaration qui fait passer le contenu du flottant de l’alignement à gauche par défaut au centrage. Dans les flottants, l’idiome est \centering, et non l’environnement center (\begin{center}…\end{center}) : center ajoute de l’espace vertical au-dessus et au-dessous, tandis que \centering est seulement une déclaration et n’ajoute rien. Pour affiner la mise en forme de la légende (police, séparateur, largeur), utilisez le package caption ; voir la page « Légendes et sous-figures ».

Tableaux plus larges que la page

Comme les colonnes l, c et r ne se replient pas, un tableau avec beaucoup de colonnes ou des entrées longues dépasse la largeur du texte (\textwidth). La solution la plus rapide consiste à réduire tout le tableau avec \resizebox de graphicx. Sa forme est \resizebox{width}{height}{material} ; si l’un des deux paramètres vaut !, l’autre commande une mise à l’échelle proportionnelle, avec conservation du rapport d’aspect.

latex
\resizebox{\textwidth}{!}{%
  \begin{tabular}{lrrrrr}
    \hline
    項目 & 1月 & 2月 & 3月 & 4月 & 5月 \\
    \hline
    売上 & 120 & 135 & 128 & 142 & 150 \\
    \hline
  \end{tabular}%
}

Cela rend le tableau exactement aussi large que le texte. Mais \resizebox *met à l’échelle* son contenu : graisse des glyphes, épaisseur des filets et même symboles mathématiques sont tous étirés ou comprimés uniformément, et le corps finit souvent par ne plus correspondre au texte voisin. Considérez donc la réduction comme un dépannage ; la vraie correction consiste à réparer le tableau lui-même : supprimer des colonnes, replier avec p{width} ou abréger. À la place de \resizebox, le package adjustbox s’intègre mieux à la mise en page environnante et peut s’écrire comme un environnement, par exemple \begin{adjustbox}{width=\textwidth}…\end{adjustbox}.

Pour éviter toute mise à l’échelle, on peut aussi réduire tout le tableau d’une taille de police : déclarer \small ou \footnotesize dans \begin{table} le compose dans une vraie police plus petite, sans déformer les proportions des filets ou des mathématiques. Pour un réglage plus fin, on peut par exemple placer \hfill avant le contenu afin de pousser le tableau vers la droite plutôt que de le centrer. Les contrôles de largeur plus fondamentaux, comme tabularx, qui étire les colonnes jusqu’à une largeur cible, sont traités dans la page « Environnements de tableaux avancés ».

Rotation — tableaux en paysage

Un tableau trop grand pour une page en portrait peut être tourné en paysage afin d’utiliser une page entière. Le package rotating, construit sur la couche graphique standard, fournit l’environnement sidewaystable, à utiliser à la place de table. Le tableau est placé tourné de 90° sur une page dédiée, avec sa légende et son numéro également tournés, et il apparaît toujours dans la liste des tableaux. En recto verso, le package choisit même automatiquement le sens de rotation pour une lecture naturelle de la double page. Pour les figures, l’équivalent est sidewaysfigure.

document.tex
\usepackage{rotating}

\begin{sidewaystable}
  \centering
  \caption{多数の列を持つ横向きの表}
  \label{tab:wide}
  \begin{tabular}{lrrrrrrrr}
    \hline
    地域 & Q1 & Q2 & Q3 & Q4 & 合計 & 前年 & 増減 & 比率 \\
    \hline
    東日本 & 120 & 135 & 128 & 142 & 525 & 500 & +25 & 105\% \\
    \hline
  \end{tabular}
\end{sidewaystable}

Pour faire pivoter seulement une partie d’un tableau selon un angle arbitraire, utilisez \rotatebox{angle}{material} (également fourni par graphicx/rotating). Un usage courant consiste à mettre une cellule d’en-tête debout avec \rotatebox{90}{long column name} ; les angles positifs tournent dans le sens antihoraire. Notez que rotating manipule des boîtes tournées, et qu’une boîte tient toujours sur une seule page. Pour composer du *texte courant* en paysage sur plusieurs pages, utilisez lscape ou pdflscape, qui tourne la page PDF elle-même, plutôt que rotating.

threeparttable — tableaux avec notes

On veut souvent attacher des notes de bas de page aux cellules d’un tableau. Mais \footnote dans un tabular se comporte mal : la note part en bas de page, ou ne s’imprime pas du tout. Le package threeparttable résout ce problème. Comme son nom l’indique, il traite un tableau en trois parties : titre (légende), corps (tabular) et notes (tablenotes), et place les notes à la largeur du tableau, juste au-dessous.

Pour l’utiliser, placez dans un environnement threeparttable, dans l’ordre, \caption, puis le tabular, puis un environnement tablenotes. Le lien entre notes est manuel : placez un marqueur comme \tnote{a} dans une cellule, puis écrivez la note avec la même lettre \item[a] … dans tablenotes. L’auteur l’a gardé manuel volontairement, car une même note est souvent référencée par plusieurs cellules. Un threeparttable ne flotte pas tout seul ; pour obtenir numéro et placement, enveloppez le tout dans un table.

document.tex
\usepackage{threeparttable}

\begin{table}[htbp]
  \centering
  \begin{threeparttable}
    \caption{品種ごとの収量}
    \label{tab:yield}
    \begin{tabular}{lrr}
      \hline
      品種 & 収量\tnote{a} & 価格\tnote{b} \\
      \hline
      コシヒカリ & 540 & 380 \\
      あきたこまち & 520 & 360 \\
      \hline
    \end{tabular}
    \begin{tablenotes}
      \footnotesize
      \item[a] 単位は 10a あたりの kg。
      \item[b] 1kg あたりの卸売価格(円)。
    \end{tablenotes}
  \end{threeparttable}
\end{table}

Ici, le table extérieur porte le numéro et le placement, tandis que threeparttable lie les trois parties : légende, corps et notes. Les \tnote{a} et \tnote{b} des cellules d’en-tête apparaissent comme de petits marqueurs en exposant, et sous le tableau les notes a et b correspondantes s’alignent sur la même largeur que le tableau. L’environnement tablenotes accepte les options de mise en forme suivantes.

OptionEffet
paraComposer plusieurs notes dans un seul paragraphe, sans retours à la ligneNotes à la suite
flushleftSupprimer le retrait suspendu des notesPas de retrait suspendu
onlineLa marque \item s’imprime en taille normale, pas en exposantMarque en taille normale
normalRétablir la mise en forme par défaut (pour annuler les options globales)Rétablir les défauts

Ces options peuvent être fixées pour tout le document, comme dans \usepackage[para]{threeparttable}, ou pour un tableau précis, comme dans \begin{tablenotes}[flushleft]. Notez que threeparttable ne met pas lui-même la légende en forme ; pour un vrai aspect de titre, associez-le au package caption. Pour mettre des notes sur un tableau qui s’étend sur plusieurs pages (longtable), utilisez le package frère threeparttablex.