Les tableaux scientifiques sous LaTeX

Dans ce court billet, je vais vous donner quelques astuces pour obtenir sous $latex \LaTeX$ des tableaux de qualité scientifique, c’est à dire rigoureux tout en étant esthétiques, donc potentiellement publiables…

Filets et largeur des tableaux

Déjà, sachez que la plupart des éditeurs de journaux demandent à ce que les colonnes ne soient pas séparées par des filets, mais par des blancs. Si on applique cette simple règle, et que l’on souhaite dessiner un tableau élémentaire, on aura quelque-chose dans ce goût là :

\begin{table}
	\caption{Example of dummy table. No matter what it consists in, really, nobody cares.}
	\label{tab:schemes}
	\centering
	\begin{tabular}{ccccc}
		\hline
		 Specimen			& 1		& 2		& 3		& 4\\
						& In situ	& In situ	& Ex situ	& Ex situ\\
		\hline
		$\left[\mathrm{I}\right]$	& 1.0		& -		& -		&-\\
		$\left[\mathrm{I'}\right]$	& 1.1		& -		& -		&-\\
		$\left[\mathrm{Ian}\right]$	& 1.0		& yes		& -		&-\\
		$\left[\mathrm{II}\right]$	& 1.0		& yes		& 0.7		& yes\\
		\hline
	\end{tabular}
\end{table}

Ce qui produira donc :

Tableau habituel utilisant l'environnement 'tabular'
Tableau habituel utilisant l’environnement ‘tabular’

Vous en conviendrez, ce n’est pas d’une rare élégance, principalement du fait que le tableau ne prenne pas toute la largeur de la colonne. Pour cela, il faut donc utiliser l’environnement ‘tabular*’, qui nous permet de spécifier la largeur totale du tableau. Il nous faut de plus lui dire où placer les blancs qui vont permettre cet élargissement. Ce qui donnera le code suivant :

\usepackage{booktabs}
 
\begin{table}
	\caption{Example of dummy table. No matter what it consists in, really, nobody cares.}
	\label{tab:schemes}
	\centering
	\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}ccccc}
		 \toprule
		 Specimen			& 1		& 2		& 3		& 4\\
						& In situ	& In situ	& Ex situ	& Ex situ\\
		 \midrule
		$\left[\mathrm{I}\right]$	& 1.0		& -		& -		&-\\
		$\left[\mathrm{I'}\right]$	& 1.1		& -		& -		&-\\
		$\left[\mathrm{Ian}\right]$	& 1.0		& yes		& -		&-\\
		$\left[\mathrm{II}\right]$	& 1.0		& yes		& 0.7		& yes\\
		\bottomrule
	\end{tabular*}
\end{table}

Vous aurez aussi relevé que, après avoir chargé le package booktabs, j’ai abandonné \hline aux profits de \toprule, \midrule et \bottomrule. On obtient donc :

Tableau avec différents filets et largeurs de colonnes élastiques
Tableau avec différents filets et largeurs de colonnes élastiques

Ici, j’ai spécifié que je voulais que le tableau fasse exactement la largeur de la ligne (\begin{tabular*}{\linewidth}).

Sachez enfin que la commande \cline (qui permet d’habitude de tracer un filet vertical sur un nombre de colonnes donné) est à remplacer par :

\cmidrule(r){m-n}

r indique de quel côté se trouve le blanc, afin d’aligner la fin du filet sur les autres colonnes (left, center ou right). Les valeurs de m et n servent respectivement à indiquer les numéros des colonnes de début et de fin.

 

Alternative

La solution donnée ci-dessus consiste à élargir toutes les colonnes jusqu’à remplir toute la largeur de la page. Une autre solution, qui requiert la package tabularx, permet d’élargir une colonne seulement, jusqu’à avoir un tableau d’une largeur souhaitée. La syntaxe est alors la suivante :

\begin{tabularx}{<largeursouhaitée>}{Xcc}
	% Commandes habituelles pour le tableau
\end{tabularx}

L’option « X » indique que la colonne en question sera à étendre jusqu’à ce que le tableau ait la largeur largeursouhaitée. Cet environnement est tout à fait compatible avec les commandes \toprule, \bottomrule et autres \midrule citées précédemment.

 

Notes en bas de page dans les tableaux

Avant de commencer, la typographie proscrit le placement de note en bas de page si la référence est dans un tableau. La note doit en effet se situer en bas du tableau lui-même. Si toutefois vous souhaitez outrepasser cette règle, voir plus bas.

Nativement, l’environnement ‘table’ est incompatible avec la commande \footnote (globalement, tous les flottants le sont). Mais comme si vous en doutiez, il existe une solution : threeparttable. Après avoir chargé ce package, il vous suffit d’utiliser l’environnement threeparttable. Ainsi, les notes se définissent comme dans l’exemple ci-dessous :

\begin{threeparttable}
	\caption{Another example of table with absolutely nothing interesting, but the table itself.}
	\label{tab:GrainSize}
	\centering
	\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lccccr}
		\toprule
		Condition	& as-rec.	& Def.	& Mill-ann.	& Fully ann.	& recasted\\
		\midrule
		MGS		& 8.3 		& 1.0	& 0.43		& 5.3		& 0.94\\
		KLL		& 3.7\tnote{1}	& 11	& 7.2\tnote{1}	& 2.8\tnote{1}	& 1.6\tnote{2}\\
		\bottomrule
	\end{tabular*}
	\begin{tablenotes}
		\footnotesize
   		\item[1] Irrelevant data
   		\item[2] Out of the scope
  	\end{tablenotes}
\end{threeparttable}

On obtient donc finalement :

Notes "en bas de tableau"
Notes « en bas de tableau »

On remarquera que la définition des notes est toutefois assez inhabituelle : la référence et le texte sont donnés séparément.

Remarque importante : l’environnement threeparttable n’est pas flottant. Si vous voulez rendre votre tableau flottant, comme dans un article, il faut alors l’encapsuler dans un environnement table.

Enfin, si vous n’avez pas peur de subir les ires des relecteurs et que vous voulez absolument que les notes soient en bas de page, alors une solution est d’utiliser le package footnote, qui charge l’environnement ‘savenotes’. Par contre, il ne fonctionne pas avec la commande \footnotetext, donc si vous souhaitez avoir plusieurs fois la référence à une même note (comme c’est le cas dans l’exemple ci-dessus), il faut un peu feinter sur les numéros de références aux notes. Ainsi :

\begin{savenotes}
	\begin{table}
		\caption{Another example of table with absolutely nothing interesting, but the table itself.}
		\label{tab:GrainSize}
		\centering
		\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lccccr}
			\toprule
			Condition	& as-rec.				& Def.	& Mill-ann.		& Fully ann.		& recasted\\
			\midrule
			MGS		& 8.3 					& 1.0	& 0.43			& 5.3			& 0.94\\
			KLL		& 3.7\footnote[1]{Irrelevant data}	& 11	& 7.2\footnotemark{1}	& 2.8\footnotemark{1}	& 1.6\footnote[2]{Out of the scope}\\
			\bottomrule
		\end{tabular*}
	\end{table}
\end{savenotes}

Pour aller plus loin

Si vous vous arrachez les cheveux avec les tableaux, vous pouvez lire mes deux autres billets à ce propos :

Vous pouvez aussi lire la documentation officielle du package threeparttable ou celle de Booktabs (disponible en français ici).

 

Bonne publication !