Quelle est la structure des messages d’erreur de TeX ?#

Les messages d’erreur de rappellent l’époque où ce logiciel a été conçu (les années 1970) : ils ne sont pas très conviviaux, bien qu’ils contiennent toutes les informations que peut offrir, généralement de manière assez concise.

Les rapports d’erreur de ont tous la même structure :

* un message d'erreur ;
* un peu de « contexte » ;
* une invite de commande d'erreur.

Le message d’erreur#

Le message d’erreur se rapporte à ce qui pose un problème à . Malheureusement, dans le cas de formats tels que (ou ses extensions), le problème sous-jacent peut être difficile à relier au problème réel dans les commandes de « niveau supérieur ». De nombreux problèmes détectés par se manifestent par des erreurs génériques, avec un texte d’erreur fourni par lui-même (ou par une classe ou une extension).

Le contexte de l’erreur#

Le contexte de l’erreur est une représentation stylisée de ce que faisait au moment où il a détecté l’erreur. Comme indiqué dans la question « Comment traiter les erreurs ? », une extension peut indiquer à la quantité de contexte à afficher, et l’utilisateur peut avoir besoin d’annuler ce que l’extension a fait. Chaque ligne de contexte est divisée au point de l’erreur. Si l’erreur s’est produite dans une commande appelée à partir de la ligne actuelle, la coupure est au point de l’appel. Si cette commande présente des arguments, la coupure apparaît après l’analyse de tous les arguments.

Voici un exemple de code fautif avec une commande (non définie) sans argument :

% !TEX noedit
\blabla et ainsi de suite

Il se produit l’erreur suivante dans laquelle indique que la commande n’existe pas :

% !TEX noedit
! Undefined control sequence.
l.4 \blabla
            et ainsi de suite

Voici maintenant une commande appelant une commande non définie dans sa définition :

% !TEX noedit
\newcommand{\blabla}[1]{\blibli #1}
\blabla{et} ainsi de suite

L’erreur produite diffère un petit peu dans le sens où :

  • vous indique qu’une commande en appelle une autre qui pose problème ;

  • le point de coupure se situe après l’argument de la commande.

% !TEX noedit
! Undefined control sequence.
\blabla #1->\blibli
                    #1
l.5 \blabla{et}
                ainsi de suite

Enfin, voici le cas où la commande bien définie reçoit en argument une commande non définie :

% !TEX noedit
\newcommand{\blabla}[1]{#1 et}
\blabla{\blibli} ainsi de suite

Le message d’erreur est alors une nouvelle fois après la fin de l’argument de la commande qui inclut la commande fautive :

% !TEX noedit
! Undefined control sequence.
<argument> \blibli

l.5 \blabla{\blibli}
                     ainsi de suite

L’invite de commande d’erreur#

L’invite de commande n’apparaît que si vous êtes en mode de compilation interactive (ce qui n’est généralement pas le cas avec les éditeurs à interface graphique où la compilation interactive est désactivée par défaut).

Elle n’accepte que les commandes à un seul caractère et la liste de ce qui est disponible peut être obtenue en tapant ?. Une commande précieuse est h qui développe le message original de , parfois accompagné d’un indice sur ce qu’il faut faire pour contourner le problème à court terme. Si vous tapez simplement sur la touche entrée (ou tout ce que votre système utilise pour signaler la fin d’une ligne) à l’invite, tentera de continuer (souvent avec assez peu de succès).


Source : The structure of TeX error messages