Dans ce chapitre, nous allons nous attarder un peu sur le fonctionnement de TeX et sur quelques principes qui nous seront utiles pour la suite.
Les tokens
Ici, nous allons voir comment TeX comprend en gros un fichier qu’on lui demande de compiler. En fait, un fichier en entrée est transformé en séquence de caractères et cette séquence de caractères est transformée en tokens, chaque token étant un caractère ou une séquence de contrôle (qui commence par \
).
Les séquences de contrôles sont alors transformées en primitives (qui sont aussi des tokens). Les opérations correspondant à ces primitives sont alors effectuées ce qui nous permet d’obtenir une liste de pages qui est transformée dans le format demandé.
Bien sûr, ce que nous venons de décrire ne correspond que grossièrement au fonctionnement de TeX, mais cette description légère nous suffit.
Lorsque le fichier en entrée est lu, TeX a besoin de savoir à quoi chaque caractère correspond (pour savoir s’il s’agit d’une séquence de contrôle ou pas, etc.). Le code de catégorie (ou catcode) d’un caractère détermine le rôle de ce caractère. TeX attribue un code à chaque caractère qu’il lit. Il y a un code pour les lettres, un autre pour les espaces, etc. Cela permet par exemple de distinguer les caractères spéciaux.
Nous pouvons alors comprendre grossièrement de quelle manière TeX fonctionne. Voici comment le livre « TeX pour l’impatient » le présente en utilisant une métaphore très imagée.
Pour plus d’informations à ce sujet, nous pouvons consulter un livre sur Tex. La référence, en anglais, est « The TeXbook » de Donald Knuth, mais nous pouvons également regarder « Apprendre à programmer en TeX » de Christian Tellechea ou « Tex pour l’impatient » en français.
Les groupes
Profitons de cette partie pour parler de quelques principes de TeX. Nous allons parler des groupes. Un groupe est une zone délimitée par des tokens spéciaux où les modifications, les assignations et les définitions sont locales (sauf si l’on indique qu’elles sont globales). Pour mieux comprendre comment ils agissent, considérons la commande \em
qui permet de passer en « mode emphase ».
\begin{document}
On est dans le document. \em On a utilisé la commande pour mettre cette phrase en emphase.
On est dans un nouveau paragraphe.
\end{document}
On remarque que tout ce qui suit \em
est mis en emphase. Ça peut être un peu embêtant et pour limiter l’effet de la commande \em
à une partie du document, nous allons la placer dans un groupe. La modification (le passage à l’emphase) sera alors locale et ne se fera que dans le groupe. Essayons alors le code qui suit.
\begin{document}
On est dans le document. {\em On a utilisé la commande pour mettre cette phrase en emphase.}
On est dans un nouveau paragraphe.
\end{document}
Ici, nous avons placé la phrase dans un groupe simple en l’entourant d’accolades. Les accolades sont donc les tokens pour les groupes simples. Nous pouvons aussi utiliser les tokens \bgroup
et \egroup
qui sont respectivement équivalentes à {
et }
à quelques détails près.
D’un autre côté, nous avons les groupes semi-simples, délimités par les tokens \begingroup
et \endgroup
. Nous ne verrons pas la différence entre les deux, mais il faut savoir que nous ne pouvons pas fermer un groupe semi-simple avec le token d’un groupe simple ni fermer un groupe simple avec le token d’un groupe semi-simple. Ainsi le code qui suit ne compile pas.
On ouvre un groupe simple {\begingroup et un groupe semi-simple} dans ce document. \endgroup
Ce code provoquera l’erreur « Extra }, or forgotten \endgroup ».
La commande \em
est une commande dite « à bascule » (on parle également de déclaration), car son effet s’applique dans tout le document à partir de son utilisation (en fait, jusqu’à ce qu’on utilise une commande qui permet de supprimer son effet), le groupe permettant de limiter son effet à une zone. Ici, nous avons utilisé la commande \em
à titre d’exemple. Cependant, son usage n’est pas recommandé et nous verrons dans le chapitre suivant par quoi la remplacer.
Les environnements
Définition d’un environnement
Pour continuer ce chapitre, parlons un peu des environnements.
Pour commencer, qu’est-ce qu’un environnement ?
Un environnement est un groupe semi-simple. Dans ce groupe, une macro est exécutée au début du groupe et une autre macro est exécutée à sa fin. Puisque la localité existe dans les groupes, les environnements permettent de délimiter une partie du document dans laquelle d’autres règles (de mise en page par exemple) s’appliquent. Un environnement s’ouvre avec la commande \begin{nom}
et se ferme avec la commande \end{nom}
.
À chaque \begin
doit correspondre un \end
, ou nous obtiendrons une erreur. Il ne faut donc pas oublier de fermer chaque environnement que l’on ouvre. De plus, nous ne pouvons pas faire deux environnements se chevaucher. Ils peuvent être imbriqués l’un dans l’autre, mais ne peuvent pas se chevaucher.
Tout comme les commandes normales, les environnements peuvent avoir des options et des arguments. En fait, certains environnements ont même des variantes étoilées. Il ne faut donc pas nous étonner si un jour nous voyons ceci.
\begin{environnement*}[options]
\end{environnement*}
Dans la suite de ce chapitre, nous verrons plusieurs environnements qui permettent de donner une sémantique à notre texte.
Que font vraiment les commandes \begin
et \end
?
Sans rentrer dans les détails, nous pouvons voir ce que font les commandes \begin
et \end
. En gros, la commande \begin{nom}
fait ceci :
- elle vérifie que la commande
\nom
existe (si ce n’est pas le cas, on obtient une erreur) ; - elle garde en mémoire
nom
; - elle ouvre un groupe semi-simple ;
- elle exécute la commande
\nom
.
La commande \end{nom}
fait cela :
- elle exécute la commande
\endnom
si elle existe et ne fait rien sinon ; - elle vérifie que le nom correspond au dernier nom gardé en mémoire par
\begin
et si ce n’est pas le cas, on obtient une erreur (c’est pour cela qu’on ne peut pas faire deux environnements se chevaucher) ; - elle ferme le groupe.
En gros, la commande \begin
place juste une commande dans un groupe semi-simple.
\begin{nom}
Dans un environnement.
\end{nom}
Ce code n’est que la manière en LaTeX d’écrire le code TeX qui suit.
\begingroup \nom
Dans un environnement.
\endnom \endgroup
Notons alors que nous pouvons utiliser n’importe quel nom de commande avec \begin
. Par exemple, pour mettre une partie du texte en emphase, nous pouvons utiliser ce code.
\begin{em}
Tout ce qui est là est en dans un groupe semi-simple dans lequel on a utilisé la commande em.
\end{em}
Ce chapitre était plutôt court, et pourtant nous y avons vu les environnements qui sont une notion importante en LaTeX. Notons bien qu’une compréhension fine des tokens et des catcodes n’est pas essentielle pour la suite.