> 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/autres-sujets/20-how-tex-macros-actually-work-part-2.md).

# Comment fonctionnent réellement les macros TeX : partie 2

[Partie 1](/latex/fr/autres-sujets/19-how-tex-macros-actually-work-part-1.md) [Partie 2](/latex/fr/autres-sujets/20-how-tex-macros-actually-work-part-2.md) [Partie 3](/latex/fr/autres-sujets/21-how-tex-macros-actually-work-part-3.md) [Partie 4](/latex/fr/autres-sujets/22-how-tex-macros-actually-work-part-4.md) [Partie 5](/latex/fr/autres-sujets/23-how-tex-macros-actually-work-part-5.md) [Partie 6](/latex/fr/autres-sujets/24-how-tex-macros-actually-work-part-6.md)

## Introduction : une histoire en images

Comme indiqué dans la partie 1, TeX doit « lire » chaque caractère de votre `.tex` fichier, et ce processus de lecture est plus correctement appelé *balayage*. Traditionnellement, le traitement des entrées de TeX (le balayage) est comparé à des « yeux » permettant à TeX d’observer l’entrée ; nous adopterons donc cette analogie éprouvée dans les graphiques ci-dessous.

### Graphique 1 : Les yeux sont prêts

Nous supposons que TeX a obtenu une entrée à partir d’un `.tex` fichier et s’apprête à traiter notre chaîne de caractères `Hello World \jobname` contenue dans un paragraphe de texte. Il vérifiera chaque caractère à tour de rôle et examinera son code de catégorie.

![Les yeux de TeX prêts à balayer une ligne de texte](/files/ca31ed76b0b5b85a70ada65d7602a68582eec69e)

### Graphique 2 : Traitement des codes de catégorie

Dans le graphique suivant, nous voyons, dans ses grandes lignes (avec davantage de détails ci-dessous), comment TeX réagit à plusieurs codes de catégorie différents. Notez qu’il existe au total 16 codes de catégorie, mais, pour simplifier, nous ne présentons que l’usage de trois d’entre eux : 11, 10 et 0. D’autres codes de caractères deviennent importants au cours des processus de composition de TeX, comme la construction de tableaux, la composition des mathématiques et la reconnaissance des paramètres de macros.

![TeX réagissant à plusieurs codes de catégorie différents](/files/39d8c127bf948815bbac300dd9cb1c3f0b5bd9b9)

#### Notes pour le graphique 2

Ici, nous considérons TeX lorsqu’il lit (balaye) des caractères qui font partie d’un paragraphe de texte. TeX examine chaque caractère, vérifie son code de catégorie et prend l’action appropriée en fonction du code de catégorie et du « mode » de TeX (un état fondé sur ce qu’il est en train de faire).

* **(yeux verts)** TeX verra que chacun de ces caractères a le code de catégorie 11 (« lettre ») et transmettra ces caractères pour la composition en tant que partie du paragraphe qu’il est en train de construire. Cependant, TeX ne transmet pas (n’utilise pas) le seul code du caractère ; à la place, il utilise la paire de nombres (code du caractère, code de catégorie) pour calculer une valeur entière composite appelée un *jeton de caractère* (voir ci-dessous). Une fois ce jeton de caractère produit, il entre dans les processus/algorithmes internes de composition de TeX.
* **(yeux bleus)** TeX voit un caractère espace (ASCII 32) avec le code de catégorie 10 (« espaces ») — notez que, comme discuté, il est tout à fait possible que le code de catégorie d’un espace (ASCII 32), ou de n’importe quel caractère, ait été modifié pour une autre valeur — avant qu’il ne soit lu par TeX.

La manière dont TeX traite réellement les caractères ayant le code de catégorie 10 (« espaces ») varie selon le moment/l’endroit où TeX les voit — c’est-à-dire selon le « mode » courant de TeX. Par exemple, il arrive que TeX les ignore simplement. Ici, TeX saura qu’il a détecté un caractère de code de catégorie 10 (qui se trouve être un espace, ASCII 32) lors du traitement du texte d’un paragraphe ; il le convertira finalement en ce qu’on appelle une colle inter-mots : une sorte d’espace souple pouvant s’étirer ou se rétrécir.

* **(yeux rouges)** Ici, TeX a observé un caractère ayant un code de catégorie très important : 0 (caractère d’échappement).

Un caractère d’échappement —*tout* caractère ayant le code de catégorie 0 — indique à TeX de passer dans un mode de lecture spécial et d’analyser soigneusement (lire) les caractères suivants, car ils identifient le nom d’une *commande*, et non du texte à composer. Dans la littérature TeX, vous verrez également le terme « commande » désigné comme *séquence de contrôle*. *immédiatement après lui*; c’est parce que TeX reconnaît deux types de commande :

* des commandes multi-lettres appelées *mots de contrôle*: le caractère qui suit immédiatement le caractère d’échappement a le code de catégorie 11. Tous les caractères suivants ayant le code de catégorie 11 sont considérés comme faisant partie du nom d’une commande. TeX cessera de rechercher les caractères faisant partie d’un nom de commande lorsqu’il détectera tout caractère qui *ne déclenche pas* ont le code de catégorie 11 — par exemple un caractère espace avec le code de catégorie 10.
* des commandes d’une seule lettre appelées *symboles de contrôle*: le caractère qui suit immédiatement le caractère d’échappement *ne déclenche pas* a le code de catégorie 11.

On peut considérer qu’un caractère d’échappement déclenche chez TeX une « échappée » hors de son comportement habituel de balayage et lui fait adopter une approche différente pour les quelques caractères suivants — cela est indiqué par la boîte rouge en pointillés montrant que TeX va **Commencer à rechercher une commande**.

### Graphique 3 : Traitement du code de catégorie 11 (« lettres »)

Dans la partie 1 de cette série, nous avons noté que chaque caractère que TeX lit depuis son entrée est décrit par deux entiers :

* code du caractère : un entier définissant la représentation numérique d’un caractère ;
* code de catégorie : une valeur de 0 à 15 que TeX attribue à chaque caractère susceptible d’apparaître dans son entrée.

TeX utilise ces deux informations à l’étape suivante de son traitement : la création de jetons de caractère.

Le graphique 3 développe le graphique 2 pour montrer ce que TeX fait avec ces caractères d’entrée ayant le code de catégorie 11 (lettre) : il crée *jetons de caractères*— des valeurs entières que TeX calcule en combinant le code de catégorie et le code du caractère de ce caractère.

**Remarque**: Dans cet exemple, nous ne parlons que des caractères ayant le code de catégorie 11, mais vous devez savoir que TeX crée aussi des valeurs de jeton pour les caractères d’entrée ayant d’autres codes de catégorie — sauf le code de catégorie 0, qui n’est jamais transformé en jeton : le caractère d’échappement sert simplement d’« interrupteur » pour déclencher un traitement spécial.

![TeX traite des caractères ayant le code de catégorie 11](/files/cf7c4c3fdd4cbc6882a23245eeb97d4cf409aa4c)

Le graphique 5, ci-dessous, montrera ce que TeX fait lorsqu’il voit un caractère ayant le code de catégorie 0 (un caractère d’échappement).

#### Notes pour le graphique 3 : traitement du code de catégorie 11 (« lettre »)

Ici, nous nous concentrerons sur l’ **vert** activité : ce qui se passe lorsque TeX voit des caractères ayant le code de catégorie 11 (« lettre »). Après que TeX a lu un caractère et déterminé son code de catégorie (ici 11), ce que TeX fait ensuite est de *combiner* cette paire de nombres en un seul entier appelé jeton de caractère : ces jetons (des entiers) sont transmis à l’étape suivante des algorithmes/processus internes de composition de TeX. Comme indiqué, TeX crée aussi des jetons de caractère pour les caractères ayant d’autres codes de catégorie (c’est-à-dire différents de 11) ; ici, nous utilisons simplement le code de catégorie 11 comme exemple.

Chaque jeton de caractère (un entier) lie de façon permanente un caractère d’entrée au code de catégorie attribué à ce caractère **au moment où il a été balayé (lu) par TeX**: ce fait est d’une importance cruciale pour comprendre le comportement des macros TeX/LaTeX. Bien sûr, au cours du traitement ultérieur, TeX devra parfois décomposer un jeton de caractère pour déterminer quelle paire (code du caractère, code de catégorie) a servi à construire ce jeton. Cependant, une fois qu’un caractère est lu par le processus d’entrée (balayage) de TeX, la valeur du jeton de caractère calculée par TeX fait que ce caractère est *de manière permanente* lié au code de catégorie qui lui a été attribué *au moment où il a été lu*.

**Calcul des jetons de caractère**

Les moteurs TeX utilisent une formule simple pour calculer un jeton de caractère, $$T$$, à partir d’un caractère ayant le code de catégorie $$C$$ et le code du caractère $$A$$:

$$T = \text{constant} \times C + A$$

Les moteurs 8 bits, comme pdfTeX, utilisent :

$$T = 256\times C + A$$

Les moteurs compatibles Unicode, comme XeTeX ou LuaTeX, doivent utiliser une formule différente car, sous Unicode, les codes des caractères peuvent être bien supérieurs au maximum de 255 dans l’ancien univers de codage ASCII 8 bits. XeTeX, par exemple, utilise :

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Encore une fois, il convient de noter que les caractères ayant le code de catégorie 0 ne sont pas convertis en jetons de caractère : le code de catégorie 0 occupe une place très particulière dans le filtrage des entrées de TeX et sert uniquement d’« interrupteur » pour amener TeX dans un mode spécial de balayage des quelques caractères suivants. Le graphique 5 traite de cela.

### Graphique 4 : Traitement du code de catégorie 10 (« espace »)

Le traitement par TeX des caractères ayant le code de catégorie 10 (« espace ») dépend de ce sur quoi TeX travaille à ce moment-là lorsqu’il détecte un caractère de code de catégorie 10 dans l’entrée. Dans notre exemple, TeX effectue un traitement ordinaire de paragraphe et le caractère espace, de code de catégorie 10, sera converti en colle inter-mots.

![TeX traite des caractères ayant le code de catégorie 10](/files/87d6d1ab719c772946c7bc566919e5d83b3f2c14)

Le traitement des espaces par TeX peut sembler assez idiosyncrasique, mais une bonne vue d’ensemble se trouve dans les chapitres 1 et 2 de [TeX par l’exemple](http://www.eijkhout.net/texbytopic/texbytopic.html) de Victor Eijkhout — vous pouvez [télécharger une copie PDF gratuite](https://bitbucket.org/VictorEijkhout/tex-by-topic) sur son site web.

Par exemple, lorsque TeX voit un caractère de code de catégorie 10, il arrive que TeX :

* les ignore tous — par exemple, lorsque TeX est en mode vertical ;
* convertisse plusieurs espaces en un seul espace — en supprimant les espaces superflus, par exemple lors du traitement d’un paragraphe ;
* les absorbe — par exemple en absorbant un seul espace après le nom d’une commande ;

Notez aussi qu’il arrive que TeX *génère* des espaces — en convertissant les caractères de fin de ligne en espace. Le comportement/le traitement des caractères espace (tout caractère ayant le code de catégorie 10) est l’une des « particularités » de TeX : il faut du temps/de la pratique pour se familiariser (se sentir à l’aise) avec cet aspect de TeX.

### Graphique 5a : Traitement du code de catégorie 0 (un « caractère d’échappement »)

Dans ce graphique, TeX a traité tous les caractères jusqu’au `\` caractère, qui a un code de catégorie de 0 : le « caractère d’échappement » — nous utiliserons une autre série de graphiques pour montrer comment TeX traite un caractère d’échappement et identifie le nom d’une commande.

![TeX traite des caractères ayant le code de catégorie 0](/files/6861b83c49b6d7a40bcc7c3ae85d5e73355cec89)

### Graphique 5b : À la recherche d’un nom de commande

Dans ce graphique, nous regardons dans la section encadrée en pointillés rouges (**Commencer à rechercher une commande**) pour voir ce que TeX fait après avoir vu un caractère d’échappement.

![TeX à la recherche d’un nom de commande](/files/7f13d40189f8fd06297b3fdc244fed6ade21a585)

**Notes pour le graphique 5b**

* Une fois reconnu, le caractère d’échappement a fait son travail : il a servi d’interrupteur et ne participe à aucun traitement ultérieur — plus précisément, il est **ne** converti en jeton de caractère.
* Par commodité, nous allons répéter un détail mentionné plus haut. Après avoir vu un caractère d’échappement, TeX vérifie le code de catégorie du caractère qui suit *immédiatement après lui*; c’est parce que TeX reconnaît deux types de commande :
* * des commandes multi-lettres appelées *mots de contrôle*: le caractère qui suit immédiatement le caractère d’échappement a le code de catégorie 11. Tous les caractères suivants ayant le code de catégorie 11 sont considérés comme formant le nom d’une commande (*mot de contrôle*). TeX cessera de rechercher les caractères faisant partie du nom d’une commande lorsqu’il détectera tout caractère qui *ne déclenche pas* ont le code de catégorie 11 — par exemple un caractère espace avec le code de catégorie 10.
  * des commandes d’une seule lettre appelées *symboles de contrôle*: le caractère qui suit immédiatement le caractère d’échappement *ne déclenche pas* a le code de catégorie 11.
* Dans notre exemple, le premier caractère après le `\` est un `j` (code de catégorie 11), ce qui indique à TeX de chercher une commande qui est (potentiellement) une séquence multilette de caractères ayant le code de catégorie 11.
* TeX continue de vérifier s’il existe d’autres caractères ayant le code de catégorie 11. Dès qu’il détecte un caractère avec un autre code de catégorie, comme un espace de code de catégorie 10, TeX sait qu’il a atteint la fin du nom de la commande. Pour insister sur ce point : ici, c’est un caractère espace (code de catégorie 10) qui a « terminé » la commande, mais cela aurait pu être n’importe quel caractère qui **n’a pas** a le code de catégorie 11.

## Partie 3

Dans la partie 3, nous poursuivrons à partir du graphique 5b pour achever cette partie de l’histoire — comment TeX identifie une commande — et passer à ce qu’il fait ensuite. Nous examinerons aussi plus en profondeur certains aspects internes du traitement de TeX — dont certaines parties peuvent être ignorées à la première lecture, sauf si vous aimez vraiment les détails.

[Partie 1](/latex/fr/autres-sujets/19-how-tex-macros-actually-work-part-1.md) [Partie 2](/latex/fr/autres-sujets/20-how-tex-macros-actually-work-part-2.md) [Partie 3](/latex/fr/autres-sujets/21-how-tex-macros-actually-work-part-3.md) [Partie 4](/latex/fr/autres-sujets/22-how-tex-macros-actually-work-part-4.md) [Partie 5](/latex/fr/autres-sujets/23-how-tex-macros-actually-work-part-5.md) [Partie 6](/latex/fr/autres-sujets/24-how-tex-macros-actually-work-part-6.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/autres-sujets/20-how-tex-macros-actually-work-part-2.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.
