> 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Une nouvelle série d’articles : les jetons TeX et les concepts associés — mais pourquoi (et comment) ?

Cet article d’introduction vise à expliquer pourquoi cette série a été écrite, ce que j’espère accomplir et à fournir des informations de contexte sur les techniques utilisées pour explorer les jetons TeX en observant le fonctionnement interne d’un moteur TeX. Cette page d’article est également conçue pour contenir les liens vers tous les articles de la série et sera mise à jour afin de fournir ces liens au fur et à mesure de la publication de chaque nouvel article.

### Liens vers les articles

Chaque article contiendra un ensemble de liens vers d’autres articles de cette série.

* [Qu’est-ce qu’un « jeton TeX » ?](/latex/fr/articles-approfondis/53-what-is-a-tex-token.md)
* [Qu’est-ce qu’une « liste de jetons TeX » ?](/latex/fr/articles-approfondis/54-what-is-a-tex-token-list.md)

## Contexte de cette série d’articles

La motivation pour écrire cette série d’articles est née de lectures sur TeX qui expliquaient nombre des activités de TeX à travers le concept de « jetons », ainsi que le « processus de tokenisation » de TeX, les « listes de jetons » et des concepts connexes tels que « l’expansion des macros » et les « commandes expansibles ». Chaque fois que je rencontrais des explications liées à TeX formulées en termes de « jetons TeX », la même question me revenait sans cesse à l’esprit : qu’est-ce, précisément, *est* un jeton TeX ? Je devais le découvrir.

La portée et le contenu du premier article, [Qu’est-ce qu’un « jeton TeX » ?](/latex/fr/articles-approfondis/53-what-is-a-tex-token.md), sont, par leur nature même, assez « proches du matériel », comme diraient les programmeurs, et il ne fait aucun doute que les « jetons TeX » pourraient être classés comme un sujet plutôt ésotérique sur lequel écrire : alors, pourquoi s’en soucier ? Au bout du compte, on se fait une opinion — ou peut-être un acte de foi — selon laquelle d’autres personnes se seront peut-être elles aussi interrogées sur le même sujet et qu’il y a de la place pour un article ou deux afin de combler certaines lacunes. Mon objectif est de fournir quelques explications de contexte utiles qui peuvent compléter d’autres textes que vous pourriez lire et, je l’espère, aider à mieux comprendre certains concepts clés qui apparaissent lorsque l’on apprend TeX et que l’on explore les macros et la programmation.

De toute évidence, dans les limites d’articles de blog, nous ne pouvons qu’effleurer la surface — il n’est tout simplement pas pratique d’essayer d’expliquer tous les sujets importants ou de plonger dans les eaux les plus troubles. Par nécessité, je passerai sous silence de nombreux détails et marcherai sur la fine ligne qui sépare la simplification à l’excès du recours à des analogies poussées jusqu’à leurs limites.

« Écrire les articles qu’on aimerait avoir lus » est un guide utile, et j’ai essayé de l’appliquer au mieux en rédigeant cette série.

## Après avoir posé la question, et maintenant ?

Le défi immédiat était clair : comment en apprendre davantage sur les jetons TeX, puisque de tels détails (jetons, tokenisation, etc.) sont enfouis profondément dans le code logiciel des moteurs TeX — on n’est pas vraiment censé s’en soucier, sauf, bien sûr, si l’on s’intéresse réellement à ces détails.

Une façon d’explorer ces questions consiste à essayer de parcourir le code source original de TeX dans [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)— en exécutant [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) pour extraire la documentation TeX — ou en achetant un exemplaire du livre [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). J’ai acheté un exemplaire du livre imprimé ! Il est certainement extrêmement utile d’avoir le code source de TeX publié sous forme de livre et il y a, bien sûr, de nombreuses explications utiles tout au long de l’ouvrage. Cependant, le TeX de Knuth est écrit en Pascal et, naturellement, le code source Pascal est documenté selon la méthodologie de programmation littéraire de Knuth — présentant le code en petits morceaux faciles à digérer. Il est facile d’apprécier à quel point l’approche de documentation de Knuth aide réellement pour un logiciel aussi complexe que TeX, mais la lecture du livre implique tout de même pas mal de renvois croisés et d’allers-retours entre les pages.

Bien que ce soit utile, le livre seul ne suffisait pas tout à fait (pour moi) pour mieux comprendre ce qui se passe lorsque TeX crée des « jetons » — le sujet qui m’intéressait particulièrement. Il n’y a qu’une seule façon de le savoir vraiment : compiler le programme TeX, l’exécuter sur un petit fichier TeX et observer littéralement le code s’exécuter pendant que TeX analyse et lit l’entrée. Les détails de la compilation de TeX à partir des sources sont quelque peu ésotériques — conversion du Pascal en C — mais une brève description figure dans la section suivante, avec un lien vers un billet de blog personnel qui entre plus en détail.

Contrairement à XeTeX et LuaTeX — qui peuvent traiter du texte au format UTF-8 et prennent en charge l’encodage Unicode —, le TeX de Knuth est un moteur 8 bits, ce qui signifie qu’il suppose que les caractères d’entrée sont compris entre 0 et 255. Bien que ce soit une distinction importante, cela ne *matériellement* n’affecte pas notre discussion des jetons TeX, car nous abordons des sujets et des principes communs à tous les moteurs TeX : ils sont au cœur même du logiciel.

## Comment étudier les jetons TeX ?

Démêler le chemin qui mène du texte d’entrée aux jetons TeX a, pour moi, été tout un voyage — je dois avouer que des degrés variables de confusion m’ont accompagné de façon semi-permanente en cours de route : TeX est un logiciel si complexe.

Pendant plusieurs années (depuis environ 2009), je compile régulièrement la dernière version de LuaTeX à partir de son code source — un processus assez simple grâce à l’excellente façon dont le code source de LuaTeX est distribué. Forte de cette expérience, j’ai voulu mieux comprendre comment compiler le TeX original de Knuth à partir de son code source — une *très* proposition différente, car TeX est écrit selon la méthodologie de programmation littéraire de Knuth. Cette compilation personnelle de TeX, sous Windows mais à l’aide de compilateurs et d’outils open source, a été réalisée en dehors de la distribution TeX Live et constitue un projet autonome. Elle a également nécessité la construction de la chaîne d’outils nécessaire pour convertir `tex.web` en un programme C qui pouvait ensuite être compilé puis exécuté dans un débogueur afin de voir ce que TeX fait réellement lorsqu’il traite les caractères d’entrée.

Le TeX original de Knuth a été utilisé à la place de pdfTeX, XeTeX ou LuaTeX parce que j’avais besoin d’une version de TeX aussi proche que possible du code source imprimé dans le livre TeX: The Program. Ce livre a été publié pour la première fois en 1986 et, bien que TeX ait connu quelques mises à jour depuis cette époque, la dernière version de TeX (3.14159265, publiée en janvier 2014) est certainement suffisamment proche du code source contenu dans le livre.

Reflétant la méthodologie de programmation littéraire de Knuth, le code source de TeX est distribué dans un format texte appelé WEB : un mélange de documentation TeX et de code source Pascal. L’idée de base est d’utiliser deux utilitaires appelés TANGLE et WEAVE qui traitent les fichiers WEB pour en extraire soit la documentation TeX, soit le code source Pascal :

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) extrait le code source Pascal d’un fichier WEB
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) extrait la documentation TeX du fichier WEB

Cependant, avant d’extraire le code source Pascal, vous devez prétraiter le fichier de Knuth `tex.web` afin d’appliquer un certain nombre de modifications qui permettent de convertir le code Pascal de TeX en code C à l’aide d’un processus appelé Web2C. Cette étape de prétraitement est appelée *l’application de fichiers de modification*.

Le fichier de code original de Knuth (tex.web) ne doit en aucun cas être modifié directement ; à la place, vous appliquez des modifications à l’aide de ce qu’on appelle des fichiers de modification (extension `.ch`) qui contiennent les changements que vous souhaitez appliquer au `.web` fichier principal — comme `tex.web`. Les fichiers de modification sont fusionnés avec le code source original de Knuth — à l’aide d’un programme utilitaire supplémentaire appelé TIE — pour créer un fichier appelé, par exemple, `mytex.web` que vous traitez avec TANGLE pour extraire le code Pascal dans `mytex.pas`. Une fois que vous disposez d’un fichier source Pascal approprié, vous pouvez appliquer les dernières étapes du processus Web2C pour le convertir en un fichier source C que vous pouvez compiler en un programme TeX exécutable. Si vous souhaitez en savoir plus sur le processus de conversion Web2C assez tortueux, vous trouverez davantage de détails sur le [blog personnel de cet auteur](http://www.readytext.co.uk/?p=2529).

Le résultat final est un programme TeX qui peut être exécuté à l’aide de l’excellent et gratuit [Eclipse IDE pour C/C++](http://www.eclipse.org/home/index.php) pour avancer pas à pas dans le code source de TeX (en C) et observer ce qui se passe pendant qu’il parcourt votre entrée. Ce n’est certainement pas le passe-temps le plus divertissant, car le code C est généré automatiquement et, par endroits, extrêmement difficile à suivre (le code source de TeX fait un usage très généreux des GOTO et des variables globales). Le livre TeX: The Program reste néanmoins inestimable pour aider à naviguer dans le code source C, même si le livre contient le code source de TeX dans un magnifique code Pascal mis en pages.

Pour clore la discussion, voici une capture d’écran d’exemple montrant TeX exécuté via l’EDI Eclipse avec l’exécution en pause sur la fonction `getnext()`— qui est au cœur des processus de génération de jetons de TeX.

![Capture d’écran montrant TeX exécuté via l’EDI Eclipse](/files/e4665b31735cb05e4197b35306b099f6dc7abb5f)

Parcours pas à pas du code source C de TeX à l’aide de l’EDI open source Eclipse pour C/C++.

## Conclusions et remerciements

La rédaction du premier article et la mise au point d’idées pour de futurs billets de blog dans la série ont certainement demandé beaucoup de temps. Je suis extrêmement reconnaissant à John Hammersley et Mary Anne Baynes chez Overleaf pour leur soutien à cette idée de série et pour m’avoir permis de consacrer le temps nécessaire à des recherches de contexte supplémentaires. J’espère que cette série d’articles identifie et aborde avec succès des sujets d’intérêt commun et qu’elle s’avère utile à ceux qui la liront.


---

# 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.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.
