> 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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md).

# Comment fonctionne \expandafter : TeX utilise des listes temporaires de jetons

[Partie 1](/latex/fr/articles-approfondis/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Partie 2](/latex/fr/articles-approfondis/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Partie 3](/latex/fr/articles-approfondis/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Partie 4](/latex/fr/articles-approfondis/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Partie 5](/latex/fr/articles-approfondis/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Partie 6](/latex/fr/articles-approfondis/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## Expansion et listes de jetons internes

Jusqu’à présent, nous avons exploré les jetons, les listes de jetons et les principes fondamentaux derrière le concept d’expansion de TeX. Dans cette section, nous utiliserons la primitive TeX `\jobname` pour introduire un aspect important du traitement de l’expansion : l’utilisation par TeX de *listes de jetons temporaires*—qui constituent un *fondamental* aspect de la façon dont `\expandafter` fonctionne, comme nous le verrons plus loin dans cette série d’articles.

`\jobname` est une primitive TeX expansible dont l’expansion génère une série de jetons de caractères qui représentent le nom du principal `.tex` fichier d’entrée. Par exemple, supposons que nous ayons le texte suivant dans un `.tex` fichier appelé `mycode.tex`:

```
    Le nom de mon fichier est \jobname .tex %Notez l’espace après \jobname
```

Cela donnerait à la composition

```
    Le nom de mon fichier est mycode.tex
```

Lorsque nous utilisons la `\jobname` commande, les caractères composés résultants ne sont pas lus depuis votre `.tex` fichier physique, alors d’où viennent-ils : où TeX stocke-t-il/lit-il ces jetons ? Invisible pour l’utilisateur (c.-à-d. profondément à l’intérieur même de TeX) le processus d’expansion pour `\jobname` crée une liste de jetons temporaire construite à partir de la série de jetons de caractères qui représentent le nom de votre fichier. Une fois que `\jobname` a créé cette liste de jetons, TeX « détourne temporairement son regard » de sa source d’entrée actuelle (ici, notre `.tex` fichier) pour lire des jetons (des jetons de caractères) à partir de cette liste de jetons temporaire. Lorsque TeX a besoin d’un autre jeton d’entrée, il lira son jeton suivant dans cette liste interne et continuera ainsi jusqu’à atteindre la fin de la liste ; à ce moment-là, TeX reprend la lecture des jetons à partir de sa source d’entrée précédente qui, ici, serait le texte lu depuis notre `.tex` fichier d’entrée.

Comme le montre le schéma suivant, TeX reprend la lecture du `.tex` fichier d’entrée à l’endroit exact où il s’est arrêté après le traitement de `\jobname`—après avoir lu le caractère espace mais avant d’avoir lu le caractère « . ». Le point (.) attend en pratique d’être lu depuis le tampon d’entrée de TeX — une petite zone de la mémoire de TeX conçue pour contenir une ligne de texte lue depuis le `.tex` fichier — TeX lit et traite votre `.tex` fichier une ligne à la fois, il ne charge pas le fichier entier en mémoire.

Lorsque vous étudiez le graphique suivant, lisez-le depuis le bas et remontez pour suivre le flux du processus.

![Comment TeX développe \jobname](/files/4e315d2577ad8d88f065d7f4f553e2f85410f9ad)

En revenant à notre discussion sur l’expansion, nous pouvons observer que l’expansion de `\jobname` a entraîné `\jobname` la commande (jeton) d’être *supprimé* retirée de l’entrée et *remplacé* par des jetons issus de l’expansion : la liste de jetons temporaire générée pour contenir le nom du `.tex` fichier.

Les commandes expansibles (comme `\jobname`) ne sont pas les seules primitives TeX à créer et utiliser « secrètement » des listes de jetons pour produire leur effet. Par exemple, les commandes `\uppercase` et `\lowercase` créent toutes deux des listes de jetons internes pour changer la casse de leur argument. Une fois le travail de changement de casse effectué, TeX bascule pour lire des jetons de caractères à partir des listes de jetons générées par ces commandes. Les listes de jetons sont le seul mécanisme de « stockage de données de jetons » de TeX — à l’exception de l’écriture des données vers un fichier physique sur disque.

### Sources de jetons : TeX est un jongleur de génie

Lorsque TeX traite un document typique, il doit gérer *de nombreuses* sources de jetons : l’entrée provenant de nombreux fichiers physiques sur disque et d’innombrables listes de jetons internes créées pendant le traitement. Dans cette section, nous allons très brièvement explorer comment TeX parvient à « jongler » avec ces sources d’entrée.

Supposons que nous voulions une macro simple qui compose le nom de notre `.tex` fichier :

```
    \def\myfile{Le nom de mon fichier est \jobname .tex}
```

Plus tard, à un moment donné dans notre `.tex` fichier, nous appelons la macro `\myfile`: temporairement, TeX passe de la création/lecture de jetons via le texte de votre fichier texte (`.tex`) à la lecture de jetons depuis la `\myfile` définition (liste de jetons) stockée dans sa mémoire. Lorsque TeX exécute la `\myfile` macro (traite ses jetons), il détecte un jeton représentant la `\jobname` commande, dont l’expansion crée encore une autre liste de jetons temporaire à partir de laquelle TeX doit lire des jetons. Même dans ce scénario simple, TeX doit gérer trois sources d’entrée :

1. le `.tex` fichier texte contenant la `\myfile` macro ;
2. la liste de jetons qui stocke la définition de `\myfile` macro ;
3. une liste de jetons créée par la `\jobname` commande dans la `\myfile` macro.

À mesure que TeX traite un document, il bascule constamment entre des sources d’entrée : fichiers physiques et listes de jetons, alors comment TeX garde-t-il la trace de cela ? La réponse est qu’en interne, les moteurs TeX maintiennent une soi-disant [pile d’entrée](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) qui agit comme une sorte de « mémoire » permettant à TeX de se rappeler ce qu’il faisait (où il lisait) lorsqu’il passe d’une source d’entrée à une autre.

Sans entrer trop dans les détails, le code interne des moteurs TeX utilise une variable globale appelée `curinput` (entrée courante) qui, entre autres choses, indique à TeX s’il lit actuellement depuis un fichier physique ou une liste de jetons. `curinput` indique aussi à TeX l’emplacement (dans la liste de jetons courante ou son tampon de texte) d’où il doit obtenir le jeton suivant. Si TeX lit depuis une liste de jetons `curinput` enregistre aussi le type de liste de jetons en cours de traitement — par exemple, la liste de jetons stockée comme une macro ou si ces jetons proviennent d’une autre source.

Lorsque nécessaire, la `curinput` variable sera modifiée pour pointer vers une nouvelle source d’entrée et l’« état d’entrée » actuel de TeX (source et emplacement) sera enregistré dans la pile d’entrée afin que TeX puisse ensuite revenir à cet emplacement exact (position dans un `.tex` fichier ou le jeton suivant dans une liste de jetons). Une fois cette nouvelle source d’entrée épuisée (par exemple, plus aucun jeton dans la liste de jetons ou la fin d’un fichier atteinte), elle est retirée de la pile et `curinput` est mise à jour pour garantir que TeX revienne à la lecture des jetons depuis la source précédente.

## Approfondir (lecture facultative)

Les sections suivantes fournissent des informations de fond supplémentaires pour les lecteurs qui aiment les détails.

### Vraies listes de jetons

Le graphique suivant a été généré à l’aide de la version personnalisée d’Overleaf du TeX de Knuth, qui donne accès aux données internes et aux structures de données de TeX. Cette illustration d’une liste de jetons s’appuie sur la version simplifiée présentée ci-dessus et inclut des données supplémentaires, par exemple l’affichage des caractères générés par `\jobname` ont le code de catégorie 12, et non le code de catégorie habituel 11. Dans ce schéma, « nœud » est simplement le nom donné à une unité de stockage mémoire utilisée par TeX.

![À l’intérieur d’une liste de jetons TeX](/files/93543a24245062df1ae135d27e4ec72e3fac48d7)

### Comment TeX lit et traite \jobname

Toujours, pour être complet, voici un aperçu des « processus de réflexion » de TeX lorsqu’il détecte `\jobname` dans notre `.tex` fichier d’entrée. Dans ce graphique, nous voyons comment TeX détecte un caractère d’échappement (`\` avec le code de catégorie 0), traite la séquence de caractères `jobname`, génère un jeton et recherche la signification de la `\jobname` commande, où TeX découvrira qu’elle a un code de commande > 100, ce qui indique qu’il s’agit d’une commande expansible.

![Comment TeX analyse et traite \jobname](/files/79661a663b225d37a5413b79e8538b66245974c8)

[Partie 1](/latex/fr/articles-approfondis/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Partie 2](/latex/fr/articles-approfondis/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Partie 3](/latex/fr/articles-approfondis/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Partie 4](/latex/fr/articles-approfondis/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Partie 5](/latex/fr/articles-approfondis/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Partie 6](/latex/fr/articles-approfondis/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)


---

# 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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.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.
