Tout ce qui précède montre qu'il peut être difficile de créer une fonction agréable et flexible (ou d'interdire une fonction surchargée) dans LaTeX !!! (ce code TeX ressemble à du grec pour moi)
Eh bien, juste pour ajouter mon développement récent (mais pas aussi flexible), voici ce que j'ai récemment utilisé dans ma thèse, avec
\usepackage{ifthen} % provides conditonals...
Démarrez la commande, avec la commande "facultative" vide par défaut:
\newcommand {\figHoriz} [4] [] {
J'ai alors la macro définir une variable temporaire, \ temp {}, différemment selon que l'argument optionnel est vide ou non. Cela pourrait être étendu à tout argument passé.
\ifthenelse { \equal {#1} {} } %if short caption not specified, use long caption (no slant)
{ \def\temp {\caption[#4]{\textsl{#4}}} } % if #1 == blank
{ \def\temp {\caption[#1]{\textsl{#4}}} } % else (not blank)
Ensuite, j'exécute la macro en utilisant la variable \ temp {} pour les deux cas. (Ici, il définit simplement la légende courte pour qu'elle soit égale à la légende longue si elle n'a pas été spécifiée par l'utilisateur).
\begin{figure}[!]
\begin{center}
\includegraphics[width=350 pt]{#3}
\temp %see above for caption etc.
\label{#2}
\end{center}
\end{figure}
}
Dans ce cas, je ne vérifie que le seul argument "optionnel" fourni par \ newcommand {}. Si vous deviez le configurer pour, disons, 3 arguments "optionnels", vous devrez toujours envoyer les 3 arguments vides ... par exemple.
\MyCommand {first arg} {} {} {}
ce qui est assez idiot, je sais, mais c'est à peu près aussi loin que je vais aller avec LaTeX - ce n'est tout simplement pas si sensique une fois que je commence à regarder le code TeX ... J'aime la méthode xparse de M. Robertson, peut-être que je Je vais l'essayer ...