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 \TeX (avec \def) et \LaTeX (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).

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 \TeX mais elle n'est pas vraiment recommandée.

Avec l'extension keyval

Les utilisateurs de \LaTeX disposent d'un moyen de sortir de cette syntaxe de commande barbare : l'extension keyval. Avec celle-ci et un peu de programmation, il est possible d'écrire des commandes assez sophistiquées, dont l'appel pourrait ressembler à :

\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 !


Source : How to break the 9-argument limit

2_programmation/macros/definir_une_macro_a_plus_de_9_arguments.txt · Dernière modification: 2021/04/23 11:25 par yannick.tanguy
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0