Que signifie l’erreur : « Illegal parameter number in definition of ⟨commande⟩ » ?#

  • Message : Illegal parameter number in definition of ⟨commande⟩

  • Origine :

Cette erreur survient lorsqu’une commande ou un environnement (re)défini utilise #⟨chiffre⟩ dans son texte de remplacement, avec un chiffre strictement supérieur au nombre de paramètres déclarés, surtout si ce nombre n’est pas indiqué comme dans l’exemple suivant (avec deux manières de définir une commande) :

\newcommand{\mot}{Voici le mot #1 !} % Façon LaTeX

\def\terme{Voici le terme #1 !}      % Façon TeX

Dans l’un ou l’autre des cas ci-dessus, la définition utilise un argument, mais le programmeur n’a pas indiqué, à l’avance, qu’elle allait le faire. Le correctif est simple :

\newcommand{\mot}[1]{Voici le mot #1 !} % Façon LaTeX

\def\terme#1{Voici le terme #1 !}       % Façon TeX

Cette erreur peut être provoquée implicitement en raison de commandes de déclarations emboîtées, comme \newcommand, en ayant oublié que les commandes intérieures se réfèrent à leurs arguments en doublant les caractères #. Voici un exemple de code générant cette anomalie :

\newcommand{\ajout}{Définition de commande %  % Façon LaTeX
  \newcommand{\mot}[1]{Voici le mot #1 !}%
}

\def\enplus{Définition de commande %          % Façon TeX
  \def\terme#1{Voici le mot #1 !}%
}

Ce point est expliqué dans la question « Comment définir des commandes dans des commandes ? ». La bonne manière de l’écrire est ici :

\newcommand{\ajout}{Définition de commande %  % Façon LaTeX
  \newcommand{\mot}[1]{Voici le mot ##1 !}%
}

\def\enplus{Définition de commande %          % Façon TeX
  \def\terme##1{Voici le mot ##1 !}%
}

Enfin, une autre cause est de se référer à des arguments d’un environnement dans le troisième paramètre obligatoire de \newenvironment ou \renewenvironment (celui donnant le code appliqué en fin d’environnement), comme expliqué à la question « /2_programmation/macros/que_sont_les_environnements ».


Sources