Ceci est une ancienne révision du document !
Comment définir des arguments optionnels comme ceux de `\section`?
Les arguments optionnels des macros définies avec \newcommand
ne fonctionnent pas vraiment comme l'argument optionnel de \section
.
En effet, la valeur par défaut de l'argument optionnel de \section
est celle l'argument obligatoire, par contre, \newcommand
exige
que vous connaissiez à l'avance la valeur par défaut de l'argument.
L'astuce requise consiste à utiliser une macro dans l'argument optionnel :
\documentclass{article} \newcommand\thing[2][\DefaultOpt]{% \def\DefaultOpt{#2}% optional arg: #1, mandatory arg: #2% } \begin{document} \thing{manda}% #1=#2 \thing[opti]{manda}% #1="opti" \end{document}
LaTeX lui-même a une méthode plus subtile (mais moins facile à comprendre):
il utilise une macro
\@dblarg
. Voici comment l'exemple précédent aurait
été écrit dans LaTeX :
\newcommand\thing{\@dblarg\@thing} \newcommand\@thing[2][\@error]{% optional arg: #1, mandatory arg: #2% }
Dans ce code, \@thing
n'est jamais appelé qu'avec un argument optionnel
et un argument obligatoire ; si la valeur par défaut de la \newcommand
est appelée, un bug apparaît dans le code utilisateur…