Les tableaux complexes avec TABLE

Fleuron

Premier tableau

Toutes les commandes pour construire un tableau sont des environnements, elles commencent toutes par un begin (abrégé par b) et s'achève par un end (e). Donc pour créer un tableau tu utilises :


\bTABLE . . . \eTABLE

Pour une colonne :

\bTD . . . \eTD

Une ligne par :

\bTR . . . \eTR

Des colonnes à en-tête par :

\bTH . . . \eTH

H pour Head, met le texte de la ligne en gras.

Attention les majuscules sont obligatoires.

Voici un premier tableau :

\bTABLE
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH
\bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD
\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Contrôler la largeur du tableau

Si tu veux que ton tableau occupe toute la largeur de ton texte, tu emploies l'option :

option=stretch

Voici le tableau précédent avec cette option :

\bTABLE[option=stretch]
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Tu peux contrôler la taille du tableau avec l'option width=

Fusionner les cellules verticalement

Tu utilises l'option [nr=n]n est le nombre de cellules fusionnées

\bTABLE
\bTR \bTH Couple \eTH \bTH Enfants \eTH \bTH Chien \eTH\bTH Autre \eTH \eTR
\bTR \bTD Robert & Raymonde \eTD \bTD \eTD \bTD Kador \eTD \bTD \eTD\eTR
\bTR \bTD[nr=2] Marcel & Ginette \eTD \bTD Alphonsine \eTD \bTD Pépette \eTD \bTD[nr=2] Raoul, coq nain \eTD\eTR \bTR \bTD Nordine \eTD \bTD Kiki \eTD \eTR
\bTR \bTD[nr=4] Amaury & Cunégonde \eTD \bTD Amaury Jr \eTD \bTD[nr=4] Foufoune \eTD \bTD Sid, rat \eTD\eTR \bTR \bTD Sigefroy \eTD \bTD[nr=3] Galant de Semilly, cheval \eTD\eTR
\bTR \bTD Berthe \eTD \eTR
\bTR \bTD Childéric \eTD \eTR
\eTABLE

Comme tu peux le voir tu n'es pas obligé comme avec LaTeX de créer des cellules vides dans les colonnes fusionnées.

Fusionner les cellules horizontalement

Tu utilises l'option [nc=n]n est le nombre de cellules fusionnées

\bTABLE
\bTR \bTD colonne 1 ligne 1\eTD \bTD[nc=2] c2 l1 et c3 l1 \eTD \eTR
\bTR \bTD colonne 1 ligne 2\eTD \bTD c2 l2 \eTD \bTD c3 l2 \eTD \eTR
\bTR \bTD[nc=3] toutes les cellules fusionnées \eTD \eTR
\eTABLE

Fusionner les cellules horizontalement & verticalement

Voici un exemple repris du manuel de ConTeXt :

\bTABLE
\bTR \bTD[nc=2,nr=2] l1c1 \eTD \bTD l1c3 \eTD \bTD[nr=2] l1c4 \eTD \bTD[nr=2,nc=2] l1c5 \eTD \eTR
\bTR \bTD[nr=2] l2c3 \eTD \eTR
\bTR \bTD[nc=2] l3c1 \eTD \bTD[nc=2] l3c4 \eTD \bTD l3c6 \eTD \eTR
\bTR \bTD l4c1 \eTD \bTD[nc=2] l4c2 \eTD \bTD[nr=2] l4c4 \eTD \bTD[nc=2] l4c5 \eTD \eTR
\bTR \bTD[nr=2,nc=2] l5c1 \eTD \bTD[nr=2] l5c3 \eTD \bTD[nr=2,nc=2] l5c5 \eTD \eTR
\bTR \bTD l6c4 \eTD \eTR
\eTABLE

Configurer le tableau

La configuration d'un tableau ce fait à plusieurs niveaux. Tu peux configurer l'ensemble du tableau, une seule ou un ensemble de lignes, une seule ou un ensemble de colonnes, ou bien une seule ou un ensemble de cellules. Tu peux également avoir des options qui s'appliquent à l'ensemble du tableaux et d'autre à des éléments particuliers.

Configurer tous les tableaux de ton document

Il faut utiliser

\setupTABLE[option1,option2]

que tu places avant le \starttext. Cela ne t'empêche pas de modifier localement un tableau.

Configurer un tableau

Tu as deux possibilités soit à la suite de \bTABLE

\bTABLE[option1,option2,. . .]

Par exemple avec l'option color qui règle la couleur du texte :

\bTABLE[color=red]
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Soit avec

\setupTABLE[option1,option2]

Que tu places juste après le \bTABLE

\bTABLE
\setupTABLE[option1,option2]
...
\eTABLE

Par exemple :

\bTABLE
\setupTABLE[color=red]
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Tu obtiens le même résultat que l'image précédente.

La première méthode est à réservée pour les configurations qui concernent peu d'éléments. La deuxième est préférable d'autant qu'il est possible d'utiliser plusieurs \setupTABLE, ce qui permet de structurer ta configuration. Tu peux par exemple avoir un \setupTABLE pour gérer les filet, un autre pour le texte, un pour les espaces, ou la couleur. . .

Un exemple avec les options color et rulethickness qui règle l'épaisseur des filets.

\bTABLE
\setupTABLE[color=red,rulethickness=3pt]
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

et

\bTABLE
\setupTABLE[color=red]
\setupTABLE[rulethickness=3pt]
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

donne le même résultat :

Configurer une ligne

Tu ajoutes la ou les options à \bTR

\bTR[option1,option2]

Par exemple :

\bTABLE
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR[color=red] \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Configurer une cellule

Tu ajoutes la ou les options à \bTD

\bTD[option1,option2]

Par exemple :

\bTABLE
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD[color=red] Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD[color=red] Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Tu peux mélanger toutes les méthodes précédentes pour obtenir le résultat désiré mais les réglages les plus fins s'obtiennent avec \setupTABLE qui possède d'autre possibilité.

Les réglages de \setupTABLE

Configurer une ou des ligne(s)

\setupTABLE[row][n][option1,option2]

Configurer une ou des colonne(s)

C'est le même principe que pour les lignes, avec [column] abrégé en [c] et les mêmes options.

\setupTABLE[c][n][option1,option2]

plusieurs tu sépares leur numéro par une virgule : [3] modifie la troisième colonne et [2,7,8] affecte les deuxième, septième et huitième.

Configurer une cellule

Chaque cellule d'un tableau est identifiée par son numéro de colonne et son numéro de ligne. Tu peux la configurer par :

\setupTABLE[numéro de colonne][numéro de ligne][option1,option2]

Par exemple :

\bTABLE
\setupTABLE[3 ][ 2][color=red]
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Tu peux également utiliser first et last

\setupTABLE[first][last][option1,option2]

Applique les options à la première colonne (cellule) de la dernière ligne.

\setupTABLE[last][2,5][option1,option2]

Applique les options à la dernière colonne (cellule) des lignes 2 et 5.

Les options de configuration

L'alignement du texte

C'est l'option align qui peux prendre les valeurs :

Si tu utilises deux valeurs, tu les encadre de { }. Par exemple pour centrer le contenu horizontalement et verticalement :

align={middle,lohi}

Par exemple :

\bTABLE[align={middle,lohi}]
\bTR \bTH Couple \eTH \bTH Enfants \eTH \bTH Chien \eTH\bTH Autre \eTH \eTR
\bTR \bTD Robert & Raymonde \eTD \bTD \eTD \bTD Kador \eTD \bTD \eTD\eTR
\bTR \bTD[nr=2] Marcel & Ginette \eTD \bTD Alphonsine \eTD \bTD Pépette \eTD \bTD[nr=2] Raoul, coq nain \eTD\eTR
\bTR \bTD Nordine \eTD \bTD Kiki \eTD \eTR
\bTR \bTD[nr=4] Amaury & Cunégonde \eTD \bTD Amaury Jr \eTD \bTD[nr=4] Foufoune \eTD \bTD Sid, rat \eTD\eTR
\bTR \bTD Sigefroy \eTD \bTD[nr=3] Galant de Semilly, cheval \eTD\eTR
\bTR \bTD Berthe \eTD \eTR
\bTR \bTD Childéric \eTD \eTR
\eTABLE

La largeur et la hauteur des cellules

Les traits

Pour pouvoir utiliser topframe, bottomframe,leftframe et rightframe il faut au préalable mettre frame=off.

La couleur

Les options pour la couleur dans un tableau sont :

Pour utiliser des niveaux de gris :

background=screen

et

backgroundscreen=nombre

avec nombre compris entre 0 (noir) et 1 (blanc), donc 0.25 donnera un gris foncé et 0.85 un gris clair.

Changer de fonte

Tu peux également employer des commandes comme : style=\tfx\it

Longs tableaux, sur plusieurs pages

Pour créer un tableau s'étalant sur plusieurs page il faut diviser ton tableau en plusieurs parties :

\bTABLEhead . . . \eTABLEhead

Qui contient l'entête de ton tableau, attention il faut mettre des \bTH

\bTABLEnext . . . \bTABLEnext

Un entête alternatif qui n'est pas obligatoire et qui remplace l'entête sur les pages suivantes, attention il faut mettre des \bTH

\bTABLEbody . . . \bTABLEbody

Le corps de ton tableau

\bTABLEfoot . . . \bTABLEfoot

Un pied de tableau qui n'est pas obligatoire. Enfin il faut ajouter l'option :

\setupTABLE[split=yes%]

Pour te monter comment ça marche j'ai créé une petite page de 15cm de large sur 8 cm de haut sur laquelle j'ai mis mon tableau.

Voici le code complet :

\mainlanguage[fr]
\definepapersize[exemple][width=15cm,height=8cm]
\setuppapersize[exemple][exemple]
\setuppagenumbering[location={footer,right}]
\setupheader[state=empty]
\usetypescript[heros]
\setupbodyfont[heros,16pt]
\starttext
\setupTABLE[r][each][ align=center]
\setupTABLE[r][first] [background=color,backgroundcolor=red]
\bTABLE[split=yes,option=stretch]
\bTABLEhead
\bTR \bTH Nom \eTH \bTH Caractéristique \eTH\eTR
\eTABLEhead
\bTABLEbody
\bTR \bTC Robert \eTC \bTC Le plus vert \eTC \eTR
\bTR \bTC Ginette \eTC \bTC La plus chouette \eTC\eTR
\bTR \bTC Annie \eTC \bTC Qui aime les sucettes \eTC\eTR
\bTR \bTC Hervé \eTC \bTC Le plus énervé \eTC\eTR
\bTR \bTC Roland \eTC \bTC Le plus lent \eTC\eTR
\bTR \bTC Marius \eTC \bTC Un sacré olibrius \eTC\eTR
\bTR \bTC Léon \eTC \bTC Qui joue du bandonéon \eTC\eTR
\bTR \bTC Cunégonde \eTC \bTC Une sacrée blonde \eTC\eTR
\bTR \bTC Armand \eTC \bTC Le plus charmant \eTC\eTR
\bTR \bTC Roberte \eTC \bTC Elle est experte \eTC\eTR
\eTABLEbody
\eTABLE
\stoptext

Si tu veux que l'entête se répète sur toutes les pages il faut mettre

\setupTABLE[split=repeat]

Dans ce cas ce qui se trouve entre \bTABLEhead . . . \eTABLEhead sera répété sur toutes les pages sauf si tu as précisé une \bTABLEnext . . . \bTABLEnext alors sur la première page tu as l'entête et sur toutes les suivante l'entête alternatif. La dernière ligne du tableau (sur la dernière page) contient le pied de tableau si tu as renseigné \bTABLEfoot . . . \bTABLEfoot.

\mainlanguage[fr]
\definepapersize[exemple][width=15cm,height=8cm]
\setuppapersize[exemple][exemple]
\setuppagenumbering[location={footer,right}]
\setupheader[state=empty]
\usetypescript[heros]
\setupbodyfont[heros,16pt]
\starttext
\setupTABLE[r][each][ align=center]
\setupTABLE[r][first][background=color,backgroundcolor=red]
\setupTABLE[r][last][style=bold,background=color,backgroundcolor=yellow]
\bTABLE[split=repeat,option=stretch]
\bTABLEhead
\bTR \bTH Nom \eTH \bTH Caractéristique \eTH\eTR
\eTABLEhead
\bTABLEnext
\bTR [background=color,backgroundcolor=green]
\bTH Nom (suite) \eTH \bTH Caractéristique (suite) \eTH\eTR
\eTABLEnext
\bTABLEbody
\bTR \bTC Robert \eTC \bTC Le plus vert \eTC \eTR
\bTR \bTC Ginette \eTC \bTC La plus chouette \eTC\eTR
\bTR \bTC Annie \eTC \bTC Qui aime les sucettes \eTC\eTR
\bTR \bTC Hervé \eTC \bTC Le plus énervé \eTC\eTR
\bTR \bTC Roland \eTC \bTC Le plus lent \eTC\eTR
\bTR \bTC Marius \eTC \bTC Un sacré olibrius \eTC\eTR
\bTR \bTC Léon \eTC \bTC Qui joue du bandonéon \eTC\eTR
\bTR \bTC Cunégonde \eTC \bTC Une sacrée blonde \eTC\eTR
\bTR \bTC Armand \eTC \bTC Le plus charmant \eTC\eTR
\bTR \bTC Roberte \eTC \bTC Elle est experte \eTC\eTR
\eTABLEbody
\bTABLEfoot
\bTR \bTH Nom (fin) \eTH \bTH Caractéristique (fin) \eTH\eTR
\eTABLEfoot
\eTABLE
\stoptext

Distance entre deux colonnes

Elle se règle avec l'option distance

\setupTABLE[distance=longueur]
\setupTABLE[distance=3em]
\bTABLE
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \bTH Italien \eTH\eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD\bTD Pantaloni \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD\bTD Strofinaccio \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD\bTD Fangos \eTD \eTR
\eTABLE

Tu peux préciser une distance à droite et à gauche du tableau. Dans l'exemple suivant j'ai encadré le tableau d'un cadre rouge pour une meilleur compréhension :



 \framed[offset=none,framecolor=red]{
\setupTABLE[distance=2cm,,leftmargindistance=1cm,rightmargindistance=.5cm]
\bTABLE
\bTR \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \eTR
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD \eTR
\eTABLE}

Entête verticaux

\setupTABLE hérite de \setupframed donc tout ce qui est valable pour \setupframed l'est également pour \setupTABLE. \setupframed a une option orientation donc tu peux l'utiliser pour ton tableau. D'une manière général si tu veux un entête particulier il faut utiliser \bTABLEhead\eTABLEhead qui gère l'entête du tableau et \bTABLEbody\eTABLEbody pour le corps du tableau.

\bTABLE
\bTABLEhead
\bTR[orientation=90] \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \eTR
\eTABLEhead
\bTABLEbody
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD \eTR
\eTABLEbody
\eTABLE

Il y a un petit problème de taille de cellule. On va régler cela avec height.

\setupTABLE[header][height=3cm]
\bTABLE
\bTABLEhead
\bTR[orientation=90] \bTH Français \eTH \bTH Chti \eTH \bTH Anglais \eTH \eTR
\eTABLEhead
\bTABLEbody
\bTR \bTD Pantalon\eTD \bTD Marrone \eTD \bTD Pants \eTD \eTR
\bTR \bTD Serpillière\eTD \bTD Wassingue \eTD \bTD Swab \eTD \eTR
\bTR \bTD Boue\eTD \bTD Berdoule \eTD \bTD Mud \eTD \eTR
\eTABLEbody
\eTABLE