« LaTeX/Faire des tableaux » : différence entre les versions

Contenu supprimé Contenu ajouté
syntaxe des exemples reprise de celle des doc latex avec <arg> pour noter un argument
Critiques de la page "faire des tableaux"
Ligne 1 :
Deux critiques justifiées:
<noinclude>{{NavTitre|book={{BASEPAGENAME}}|prev=Mise en forme du texte|next=Inclure des images}}</noinclude>
<noinclude>{{LaTeX/Navigation}}</noinclude>
 
Y en a marre de lire du baratin dans le genre:
''N. B. : Pour obtenir des tableaux typographiquement corrects, il faut charger l’extension'' <code>array</code>. ''On placera donc un''
<code>\usepackage{array}</code> ''dans le préambule du document. Cependant, sauf exception signalée, les exemples ci-dessous sont utilisables sans cette extension.''
 
" paragraphe en pavé (c'est-à-dire justifié, mais sans alinéa)"
 
Quand l'auteur de cette page écrit cette sorte de charabia, il ne vise à rien d'autre que de convaincre le lecteur qu'il n'a pas le niveau et qu'il ne comprendra jamais rien à rien: que veut dire justifier? qu'est-ce que l'alinéa dans un tableau?
Commencons par faire un tableau assez simple qui contient 2 lignes et trois colonnes :
{| cellspacing="0" cellpadding="5"
! Fichier source !! Résultat (en PostScript)
|-
|
<source lang="latex">
\begin{tabular}{lll}
1.1 & 1.2 & 1.3 \\
2.1 & 2.2 & 2.3 \\
\end{tabular}
</source>
|
[[Image:Latex_tableaux_1.png]]
|}
 
Deuxième critique: dans l'exemple des colonnes fusionnées, et dans celui des lignes fusionnées, les cellules sont séparées par deux lignes au lieu d'une, et le lecteur ne comprend absolument pas pourquoi. D'ailleurs en réalité ce n'est pas vrai, le code source proposé par l'auteur de cette page produit une ligne et pas deux.
L'environnement de base pour les tableaux en LaTeX est <code>tabular</code>, il prend un argument obligatoire qui spécifie le nombre de colonnes du tableau :
<source lang="latex">
\begin{tabular}{<colonnes>}
<lignes>
\end{tabular}
</source>
L'argument ''<colonnes>'' est une suite de caractères qui peuvent être :
* un <code>l</code> pour une colonne alignée à gauche ''(left)'' ;
* un <code>r</code> pour une colonne alignée à droite ''(right)'' ;
* un <code>c</code> pour une colonne centrée ''(center)''.
* un <code>p{''largeur''}</code> pour une colonne avec un paragraphe en pavé (c'est-à-dire justifié, mais sans alinéa) ; la largeur est indiquée de manière classique, par exemple <code>p{3cm}</code> ou <code>p{10em}</code>.
 
Les ''<lignes>'' sont représentées par les valeurs des colonnes séparées par des esperluettes <code>&</code> et terminées par deux contre-obliques <code>\\</code>.
 
<span id="tube1">Si</span> l'on veut séparer les colonnes par des filets (traits) verticaux, on ajoutera des
tubes <code>|</code> à l'endroit souhaité dans l'argument de l'environnement.
 
<span id="hline1">On</span> peut aussi ajouter des filets horizontaux avec la commande <code>\hline</code>.
 
{| cellspacing="0" cellpadding="5"
! Fichier source !! Résultat (en PostScript)
|-
|
<source lang="latex">
\begin{tabular}{|l|c|r|}
\hline
colonne 1 & colonne 2 & colonne 3 \\
\hline
1.1 & 1.2 & 1.3 \\
2.1 & 2.2 & 2.3 \\
\hline
\end{tabular}
</source>
|
[[Image:Latex_tableaux_2.png]]
|}
 
On peut faire suivre deux <code>\hline</code> pour avoir une ligne double.
 
<span id="array1">{{Note|Même lorsque l'on n'a pas besoin de fonctionnalités spécifiques, il est utile de déclarer l'extension <code>array</code>, qui règle un certain nombre de défauts.}}</span>
 
== Fusionner les colonnes ==
 
Pour fusionner des colonnes, on utilise l'instruction <code>\multicolumn</code>. Celle-ci se place à l'endroit où se trouve la première cellule. Sa syntaxe est :
<source lang="latex">
\multicolumn{<nombre>}{<colonne>}{<texte>}
</source>
* ''<nombre>'' est le nombre de colonnes fusionnées ;
* ''<colonne>'' indique l'alignement (<code>l</code>, <code>c</code>, <code>r</code>) ; le filet de gauche est le filet normal de la première cellule (celui défini dans la définition du tableau), mais il faut définir le filet de droite.
 
Par exemple :
<source lang="latex">
\begin{tabular}{|l|c|r|}
\hline
colonne 1 & \multicolumn{2}{c|}{colonnes 2 \& 3} \\
\hline
1.1 & 1.2 & 1.3 \\
\hline
2.1 & 2.2 & 2.3 \\
\hline
\end{tabular}
</source>
donne
{{début rendu LaTeX}}
{| border="1"
|-
| align="left" | colonne 1
| colspan="2" align="center" | colonnes 2 & 3
|-
| align="left" | 1.1
| align="center" | 1.2
| align="right" | 1.3
|-
| align="left" | 2.1
| align="center" | 2.2
| align="right" | 2.3
|}
{{fin rendu LaTeX}}
 
Si l'on veut changer la composition du texte (alignement) pour une cellule, on peut utiliser <code>\multicolumn{1}{''<colonne>''}{''<texte>''}</code>. À moins que la première colonne ne soit incluse, on n'indique que le filet de droite (par exemple <code>{l|}</code>, le filet de gauche étant déterminé par la description générale.
 
== Fusionner les lignes ==
 
La fusion des lignes ''stricto sensu'' nécessite le recours à une extension particulière, <code>multirow</code>. Son utilisation est décrite dans la section ''[[../Tableaux#Colonnes enveloppant des lignes multiples|Tableaux > Colonnes enveloppant des lignes multiples]]''. Nous allons ici procéder à une approche simplifiée, consistant à laisser des cellules vides et à ne tracer un filet horizontal ne faisant pas toute la largeur.
 
Pour tracer ce filet, on utilise l'instruction
\cline{''<col1>''-''<col2>''}
Par exemple :
{{bleu|\begin{}}tabular{{bleu|<nowiki>}</nowiki>}}{{bleu|{}}|l|c|r|{{bleu|} }}
\hline
colonne 1 & \multicolumn{2}{c|}{colonnes 2 \& 3} \\
\hline
1.1 & 1.2 & 1.3 \\
{{rouge|\cline{}}2-3{{rouge|} }}
& 2.2 & 2.3 \\
\hline
{{bleu|\end{}}tabular{{bleu|} }}
donne
{{début rendu LaTeX}}
{| border="1"
|-
| align="left" | colonne 1
| colspan="2" align="center" | colonnes 2 & 3
|-
| rowspan="2" align="left" valign="top" | 1.1
| align="center" | 1.2
| align="right" | 1.3
|-
| align="center" | 2.2
| align="right" | 2.3
|}
{{fin rendu LaTeX}}
 
== Tableau flottant ==
 
On peut laisser notre typographe virtuel placer le tableau ; on parle alors de tableau flottant. On indique l'endroit où l'on souhaiterait voir le tableau (à côté du texte le précédant dans le fichier source, ou bien en haut ou en bas d'une page), et LaTeX fait de son mieux en fonction des contraintes, notamment de la présence d'autres objets flottants. S'il n'arrive pas à placer le flottant sur la page en cours, il est « mis en attente » et sera placé plus loin. De plus, LaTeX numérote automatiquement le tableau, ce qui permet de dresser un index des tableaux.
 
Pour cela, on encapsule le tableau dans un environnement <code>table</code> :
<source lang="latex">
\begin{table}[<position>]
\begin{tabular}{<colonnes>}
[…]
\end{tabular}
\end{table}
</source>
où ''<position>'' est une lettre indiquant l'emplacement désiré :
* <code>h</code> pour qu'il soit à côté du texte précédant dans le source ''(here)'',
* <code>t</code> : en haut d'une page ''(top)'',
* <code>b</code> : en bas d'une page ''(bottom)'',
* <code>p</code> : dans une page ne contenant que des flottants (regroupement des figures et tableaux).
Si l'on veut donner un titre et placer une étiquette permettant de faire référence au tableau (cf. ''[[../Structuration du texte#Références|Structuration du texte &gt; Références]]''), on utilisera la syntaxe suivante :
<source lang="latex">
\begin{table}[<position>]
\caption{\label{<étiquette>} <titre>}
\begin{tabular}{<colonnes>}
[…]
\end{tabular}
\end{table}
[…]
Dans le tableau~\ref{<étiquette>} page~\pageref{<étiquette>}, […].
</source>
 
Si l'on veut centrer le tableau dans l'environnement, il est recommandé d'utiliser l'extension <code id="array2">array</code> et la commande <code id="centering1">\centering</code> plutôt que l'environnement <code>center</code> :
<source lang="latex">
\usepackage{array}
[…]
\begin{table}[<position>]
\centering
\begin{tabular}{<colonnes>}
[…]
\end{tabular}
\end{table}
</source>
 
Lorsqu'il y a trop de flottants, la mise en page peut devenir problématique. On pourra avoir recours à l'instruction <code id="clearpage1">\clearpage</code> qui provoque un changement de page et l'affichage de tous les flottants en attente. L'instruction <code id="cleardoublepage1">\cleardoublepage</code> a le même effet, mais le texte qui suit est placé sur une page impaire (« belle page » si l'on est en recto-verso).
 
L'index des tables s'obtient avec l'instruction <code id="listoftables1">\listoftables</code>. L'extension <code id=tocbibind2">tocbibind</code> permet de faire figurer cet index dans la table des matières.
 
== Voir aussi ==
 
* [[Programmation LaTeX/Tableaux|Programmation LaTeX Tableaux]]
 
{{LaTeX-nav}}
 
[[Catégorie:LaTeX (livre)|Faire des tableaux]]
 
[[en:LaTeX/Tables]]
[[nl:LaTeX/Tabellen]]
[[pl:LaTeX/Tabele]]