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 des questions sur les définitions avec LaTeX et sur définitions avec des primitives TeX. 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 second paramètre obligatoire de \newenvironment ou \renewenvironment.


Sources :

2_programmation/erreurs/i/illegal_parameter_number_in_definition_of_command.txt · Dernière modification: 2021/03/26 10:04 par yannick.tanguy
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0