Comment dépasser la limite des 9 arguments pour une commande ?#

Si vous y réfléchissez, vous vous rendrez compte que la syntaxe de définition de commande dans (avec \def) et (avec \newcommand) a une conséquence importante :

\def\truc#1#2 ... #9{Contenu de la commande}

En effet, les commandes sont intrinsèquement limitées à 9 arguments (vous ne pouvez pas mettre un #10 qui sera lu comme #1 suivi de 0).

1.  Avec des commandes de base#

Si vous devez vraiment avoir plus de 9 arguments, la voie à suivre est la suivante :

\def\truc#1#2 ... #9{%
  \def\ArgI{{#1}}%
  \def\ArgII{{#2}}%
  ...
  \def\ArgIX{{#9}}%
  \TrucBis
}
\def\TrucBis#1#2#3{%
  % Les arguments 1 à 9 sont maintenant dans
  % \ArgI-\ArgIX.
  % Les arguments 10 à 12 sont maintenant dans
  % #1 à #3.
  Texte de la commande%
}

Cette technique est facilement extensible par les spécialites de mais elle n’est pas vraiment recommandée.

2.  En définissant des arguments clé-valeur#

En définissant des arguments clé-valeur, on peut s’affranchir de la limite des 9 arguments tout en facilitant l’utilisation de la commande par les utilisateurs, par exemple en permettant d’écrire ceci :

\instancefleur{espece=Primula veris,
  famille=Primulaceae,
  localisation=Coldham's Common,
  typeemplacement=Paturage,
  date=24/04/1995,
  nombre=50,
  typesol=alkaline
}

Le mérite d’une telle débauche de code est simple : l’utilisateur n’a pas besoin de se souvenir de l’ordre des paramètres, par exemple que le douzième argument serait typesol. Sans compter la lisibilité du code pour un humain !