> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/fr/articles-approfondis/14-how-do-tex-engines-typeset-tables.md).

# Comment les moteurs TeX composent les tableaux

## Comment les moteurs TeX composent-ils des tableaux

## Introduction : Que couvre cette série ?

Produire des tableaux esthétiques peut prendre du temps — que vous utilisiez un outil de mise en page visuelle, LaTeX ou un langage de balisage tel que HTML ou Markdown. Pour les utilisateurs de LaTeX en particulier, la composition de tableaux figure en bonne place sur la liste des « points de douleur » de beaucoup de gens, comme en témoigne peut-être le fait que « tables » soit l’un des sujets les plus [sujets les plus étiquetés sur tex.stackexchange](https://tex.stackexchange.com/tags).

En plus des réponses et exemples sur tex.stackexchange, un simple survol de l’aide disponible sur la composition de tableaux avec LaTeX révèle un certain nombre de ressources d’information liées aux tableaux :

* les [pages d’aide](https://www.overleaf.com/learn/latex/tables) et d’autres sites tels que [learnlatex.org](https://www.learnlatex.org/en/lesson-08)
* CTAN, le Comprehensive TeX Network, recense plus de [70 packages TeX/LaTeX](https://ctan.org/topic/table) liés à la création de tableaux
* un ouvrage entier [sur la composition de tableaux avec LaTeX](https://www.amazon.co.uk/Typesetting-Tables-LaTeX-Herbert-Voss/dp/1906860254)
* un excellent [générateur de tableaux LaTeX en ligne](https://www.tablesgenerator.com/latex_tables)

Une simple recherche Google pour [tableaux LaTeX](https://www.google.com/search?q=latex+tables) donne un énorme nombre de résultats, listant de nombreux sites offrant aide, conseils, exemples et explications.

### TeX, pas LaTeX

Compte tenu de l’abondante littérature disponible sur la composition de tableaux avec LaTeX, y a-t-il encore quelque chose à écrire à leur sujet — encore plus d’exemples de tableaux et d’énumérations/démonstrations de commandes de paquets ? Existe-t-il une manière d’aborder le sujet de la composition de tableaux qui mette en lumière ou se concentre sur les principes et concepts fondamentaux de la composition de tableaux ? Il en existe une, mais elle exige d’éplucher l’oignon LaTeX…

Nous avons décidé de produire une série d’articles qui vise à fournir aux lecteurs des informations de fond et des explications sur les *mécanismes* de la composition de tableaux fondée sur TeX. Au lieu de nous concentrer sur la composition de tableaux à l’aide de macros/paquets LaTeX spécifiques, nous explorerons le *comportement sous-jacent* des moteurs TeX : explorer la mécanique de composition de bas niveau qui fournit les fondations sur lesquelles sont construites les commandes macro LaTeX. L’objectif ultime est de dégager et d’expliquer les méthodes et algorithmes de base de la composition de tableaux fondée sur TeX — en espérant aider les lecteurs/utilisateurs à mieux comprendre pourquoi les tableaux se comportent comme ils le font. Une conséquence inévitable de cette approche, qui consiste à retirer les couches protectrices d’isolement des macros LaTeX, est l’exposition à des détails de bas niveau confus, dont les utilisateurs sont généralement (et avec ravissement) protégés par des couches de code macro LaTeX.

Il a fallu beaucoup de temps pour rechercher, rédiger et illustrer ces articles, et nous espérons donc qu’ils constitueront un ajout valable à la littérature, en fournissant du contenu qui informera les lecteurs et les aidera à mieux comprendre ce domaine complexe de la composition TeX. Nous devons souligner que cette série d’articles *pas* s’écartera pour aborder *l’esthétique* de la conception des tableaux — un sujet riche en préférences subjectives et dont les débats doivent se tenir ailleurs…

### Explorer les mécanismes des tableaux TeX : comment peut-on faire cela ?

Pour explorer, puis écrire sur, les mécanismes et processus de bas niveau qui se déroulent à l’intérieur des moteurs TeX, tels que la composition de tableaux, Overleaf a construit (compilé) des versions « debug » du moteur TeX de Knuth en utilisant le [processus Web2W](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html).

Traditionnellement, la construction de TeX implique un processus appelé Web2C, utilisé dans TeX Live, qui génère du code C en convertissant le code source Pascal original de TeX en son équivalent C. Ce processus génère du code C qui n’a jamais été destiné à être lu par des humains, seulement par des compilateurs C. Le code C généré mécaniquement est *exceptionnellement* difficile à lire ou à modifier à des fins d’expérimentation.

En revanche, Web2W produit du code source C (disponible [ici](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/ctex.c)) qui est *des ordres de grandeur* plus lisible que le code produit par Web2C. Par conséquent, le code source C de Web2W se prête beaucoup mieux à des modifications à des fins d’apprentissage/d’expérimentation.

Web2W produit une version de TeX (« CTeX ») qui est *extrêmement* proche du programme original de Knuth : « CTeX » n’inclut pas les nombreuses modifications et améliorations introduites par le processus Web2C — telles que SyncTeX, le traitement en ligne de commande et la recherche de fichiers via Kpathsea. Bien que vous sacrifiiez ces précieuses améliorations, le code C résultant (Web2W) est relativement facile à parcourir à l’aide du code source TeX publié par Knuth, même si TeX a été écrit en Pascal.

* **Une remarque sur les noms :** À strictement parler, le nom « TeX » ne doit désigner que le logiciel original écrit et publié par Donald Knuth. Toute modification de son logiciel doit utiliser un nom différent pour le logiciel de composition de tableaux fondé sur TeX qui en résulte. Ici, nous avons utilisé le processus Web2W pour construire un moteur qui reste, en effet, le logiciel original de Knuth. Toutefois, pour éviter toute ambiguïté, nous utiliserons le terme « CTeX » pour désigner la version spécifique construite avec Web2W, mais nous utiliserons aussi « TeX » pour désigner soit le moteur original de Knuth, soit un terme général pour le langage de composition fondé sur les principes du TeX de Knuth. Nous espérons que les lecteurs pardonneront toute occasionnelle entorse à l’application/l’usage rigoureux de la terminologie strictement correcte : nous espérons que le sens/l’intention ressort du contexte.

La version de débogage de CTeX a été exécutée à l’aide de [l’IDE Eclipse](https://www.eclipse.org/downloads/packages/), ce qui a permis d’observer en temps réel le traitement du code C qui implémente les commandes primitives (intégrées) de TeX, ainsi que les algorithmes conçus par Knuth pour prendre en charge la composition des tableaux.

La courte vidéo suivante (environ 90 secondes) montre le moteur CTeX s’exécutant dans le [l’IDE Eclipse](https://www.eclipse.org/downloads/packages/):

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/7drdFwYR6h5xD88XnurDIH/36511f504755ab274f4da2e3f3fc1ce5/TeXtables.mp4>" %}

En plus de CTeX, nous avons également compilé e-TeX pour accéder à quelques primitives supplémentaires absentes du logiciel original de Knuth. Bien que CTeX et e-TeX soient, à présent, de vieux moteurs fondés sur TeX, ils restent adaptés comme base pour explorer les mécanismes de la composition de tableaux, car ces principes sous-jacents s’appliquent toujours à tous les moteurs de composition fondés sur TeX.

### Pourquoi utiliser un ancien moteur TeX pour explorer les tableaux ?

Tout d’abord, le livre imprimé, [TeX:The Program](https://www.amazon.co.uk/Computers-Typesetting-TeX-Program-TEX/dp/0201134373), qui répertorie et explique le code source de TeX, reste un guide extrêmement pratique dans les eaux troubles du fonctionnement interne de TeX, malgré sa publication il y a plus de 30 ans (1986). Bien sûr, vous pouvez composer vous-même la documentation du code source de TeX ; voyez par exemple le projet Overleaf [Composez la documentation du code source de TeX, e-TeX ou pdfTeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv). Depuis la publication de TeX:The Program en 1986, de nouveaux moteurs TeX ont évolué, notamment pdfTeX, XeTeX et LuaTeX, introduisant tous des fonctionnalités et des commandes qui ne sont pas documentées dans TeX:The Program tout simplement parce qu’elles n’étaient pas présentes dans le logiciel original de Knuth.

Pour de nombreux processus fondamentaux, tels que la composition de tableaux de TeX, le code documenté dans TeX:The Program reste pertinent comme base d’étude — même si le code source de TeX est écrit en Pascal. De plus, le TeX de Knuth est relativement facile et rapide à compiler — notamment grâce au très utile [Web2W](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html) processus développé par Martin Ruckert. La facilité/la rapidité de compilation rendent beaucoup plus pratique la modification de TeX de manière simple — comme la création de graphiques SVG utilisés plus loin dans cette série d’articles.

### Comprendre la différence entre TeX et LaTeX

De nombreux lecteurs savent déjà que LaTeX n’est en réalité pas un *exécutable* programme de composition, mais un vaste ensemble de commandes (*macros*) qui sont, en fin de compte, écrites dans un langage de composition/programmation de niveau inférieur appelé TeX. Votre code LaTeX ne produit une sortie composée qu’après avoir été traité par un programme exécutable appelé un *moteur TeX*—le logiciel qui se situe entre votre code LaTeX (document) et le PDF composé. Aujourd’hui, les utilisateurs peuvent choisir parmi divers moteurs TeX pour composer leur code LaTeX, notamment pdfTeX, XeTeX et des variantes de LuaTeX.

Ceux qui découvrent l’écosystème TeX/LaTeX sont souvent, et à juste titre, déroutés par la profusion de noms à consonance mystérieuse utilisés pour les outils qu’ils rencontrent : TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX et LuaLaTeX. Si vous ressentez la même chose, une aide est à portée de main dans l’article Overleaf [Qu’y a-t-il dans un nom : guide des nombreuses variantes du TeX](/latex/fr/articles-approfondis/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) qui explique l’origine et la signification de tous ces termes.

#### Dialectes et primitives TeX

Chaque moteur TeX possède un ensemble de commandes intégrées appelées *primitives* qui, collectivement, constituent le « dialecte » de ce moteur du langage de composition TeX, reflétant les capacités intégrées à chaque moteur. Ici, le terme « primitive » utilisé pour décrire les commandes intégrées des moteurs TeX ne *pas* signifie pas que ces commandes sont basiques ou simplistes, mais qu’elles sont fondamentales et indivisibles : elles ne sont pas construites à partir d’autres commandes (contrairement aux macros). Tous les moteurs TeX partagent un vaste ensemble de primitives de base, mais certains contiennent des primitives spécifiques à ce moteur — d’où la notion de « dialecte » du TeX.

Quel que soit le moteur TeX utilisé pour composer votre document LaTeX, son travail consiste à traiter (« exécuter ») l’ensemble des commandes LaTeX (c’est-à-dire des macros) utilisées pour écrire et construire votre document. En effet, le moteur TeX « convertit » *en* leurs commandes primitives constitutives du moteur TeX, que le moteur peut exécuter pour réaliser la composition proprement dite. Vous ne *devez* à utiliser des commandes LaTeX pour composer des documents avec des moteurs TeX — vous *pourriez* pourriez choisir de construire vos documents entièrement avec des primitives TeX, c’est-à-dire directement dans le *langage de programmation TeX* intégré aux moteurs TeX. Cependant, selon les normes actuelles, le langage TeX est assez ésotérique et est généralement considéré comme difficile à programmer — il peut aussi nécessiter un grand nombre de primitives intégrées pour atteindre votre objectif de composition, ce qui en fait une tâche de programmation sujette aux erreurs et potentiellement répétitive.

Pour éviter d’avoir à écrire directement en TeX, ou à retaper sans cesse la même série de commandes, les moteurs TeX vous permettent de créer des « raccourcis » appelés *macros*. En créant des macros, vous définissez vos propres commandes qui regroupent des séquences potentiellement longues et complexes de primitives du langage TeX (ou d’autres macros) en une seule commande de « plus haut niveau ». Les programmeurs TeX peuvent écrire des macros très sophistiquées qui encapsulent une grande partie de fonctionnalités dans une seule commande — comme les commandes fournies par LaTeX. En utilisant des paquets de macros, tels que LaTeX (ou [ConTeXt](https://wiki.contextgarden.net/Main_Page)), les auteurs de documents sont (en grande partie) protégés de nombreux détails fastidieux, ce qui leur permet de se concentrer sur la rédaction et la composition plutôt que de se débattre sans cesse avec les complexités et les nuances du langage TeX.

## Au commencement…

En plus de concevoir des algorithmes pour la composition des mathématiques et la césure sophistiquée des lignes, Knuth a dû relever le défi de programmer son logiciel TeX pour composer des tableaux. Manifestement, tout algorithme de construction de tableaux ne doit pas être indûment restrictif, car cela frustrerait les utilisateurs qui ont besoin de la liberté de créer une gamme presque infinie de mises en page de tableaux. En outre, les cellules de tableau peuvent contenir une grande variété de contenus, notamment des mathématiques, des graphiques et des morceaux de texte découpés en lignes joliment composées — en fait, tout ce que TeX est capable de composer. Offrir cette flexibilité exige que les algorithmes de construction de tableaux de TeX travaillent main dans la main avec les autres parties de la mécanique de composition de TeX.

Cependant, les moteurs TeX exigent un prix pour la flexibilité offerte par leurs capacités de construction de tableaux : de nombreuses subtilités et nuances dans le comportement de bas niveau des commandes intégrées (primitives) de composition de tableaux, au nombre de 9 :

* **`\halign`**, **`\valign`**: commandes essentielles de construction de tableaux
* **`\tabskip`**: colle placée entre les colonnes de \halign ou les lignes de \valign
* **`\cr`**: terminateur obligatoire « retour chariot » pour toutes les lignes d’un tableau
* **`\noalign`**: insérer du contenu entre les lignes de \halign ou les colonnes de \valign
* **`\everycr`**: commandes (registre de jetons) à lire après la détection de \cr
* **`\span`**: commande à double fonction : \span crée des cellules s’étendant sur plusieurs colonnes ou lignes, ou développe des commandes dans le préambule du tableau (nous l’examinerons en détail)
* **`\omit`**: ignorer les modèles pour une cellule particulière
* **`\crcr`**: utilisé dans les macros pour éviter les erreurs si les utilisateurs oublient un \cr requis

Nous rencontrerons ces commandes au cours de notre exploration de la construction des tableaux.

### Lointains échos des défis

Enfoui dans [le code source de TeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) se trouve une introduction quelque peu intimidante au sujet de l’implémentation des commandes de bas niveau \halign et \valign conçues pour composer des tableaux :

> « C’est un peu miraculeux chaque fois que \halign et \valign fonctionnent, car elles traversent tant de structures de contrôle de TeX. Par conséquent, la présente page n’est probablement pas le meilleur endroit pour qu’un débutant commence à lire ce programme ; il vaut mieux maîtriser tout le reste d’abord. »

Knuth poursuit en disant

> « Notez que pendant le traitement de \halign, nous abandonnons sans crainte le contrôle au reste de TeX. Aux moments critiques, une routine d’alignement est appelée pour intervenir et effectuer une petite action, mais la plupart du temps ces routines restent simplement tapies en arrière-plan. C’est un peu comme une suggestion post-hypnotique. »

À partir de ces remarques, il semble raisonnable de conclure que, même pour Knuth, la mise en œuvre de la composition des tableaux dans TeX était « un véritable défi » — offrir à l’utilisateur contrôle et flexibilité tout en veillant simultanément à ce que les algorithmes automatisés de construction de tableaux de TeX soient bien orchestrés avec les processus de composition fondamentaux de TeX.

L’auteur atteste volontiers de la complexité du code et des algorithmes sous-jacents aux capacités de composition de tableaux de TeX, mais aussi de son admiration pour l’énorme quantité de fonctionnalités contenue dans une quantité relativement réduite de code Pascal (ou C), certes dense.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/fr/articles-approfondis/14-how-do-tex-engines-typeset-tables.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
