Que signifie l’erreur : « Illegal parameter number in definition of ⟨commande⟩ » ?#
Message :
Illegal parameter number in definition of ⟨commande⟩
Origine : TeX
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
FAQ erreurs - Lettre I, sur le site Developpez.com
LaTeX Companion, 2e édition, Frank Mittelbach, Michel Goossens, Johannes Braams, David Carlisle, Chris Rowley (Pearson, 2006)