====== 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 <latex>\TeX</latex> (avec ''\def'') et <latex>\LaTeX</latex> (avec ''\newcommand'') a une conséquence importante : 

<code latex>
\def\truc#1#2 ... #9{Contenu de la commande}
</code>

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 : 

<code latex>
\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%
}
</code>

Cette technique est facilement extensible par les spécialites de <latex>\TeX</latex> mais elle n'est pas vraiment recommandée.

===== En définissant des arguments clé-valeur =====

En [[https://faq.latex-fr.net/2_programmation/macros/arguments-cle-valeur|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 :

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

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 :// [[faquk>FAQ-moren9|How to break the 9-argument limit]]

{{htmlmetatags>metatag-keywords=(LaTeX,programming)
metatag-og:title=(Comment dépasser la limite des 9 arguments pour une commande)
metatag-og:site_name=(FAQ LaTeX francophone)
}}