Tout ce qui précède montre qu'il peut être difficile de faire une fonction agréable et flexible (ou, à défaut, surchargée) en LaTeX ! !! (ce code TeX ressemble à du grec pour moi)
Pour ajouter mon développement récent (bien que moins flexible), voici ce que j'ai récemment utilisé dans mon document de thèse, avec
\usepackage{ifthen} % provides conditonals...
Lance la commande, avec le paramètre "optionnel" vide par défaut :
\newcommand {\figHoriz} [4] [] {
Je demande ensuite à la macro de définir une variable temporaire, \temp {}, différemment selon que l'argument optionnel est vide ou non. Ceci 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 fonction \temp {} pour les deux cas. (Ici, la légende courte est simplement é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 l'unique argument "facultatif" que l'on peut utiliser. \newcommand {} fournit. Si vous deviez le configurer pour, disons, 3 args "optionnels", vous devriez toujours envoyer les 3 args vides... ex.
\MyCommand {first arg} {} {} {}
ce qui est assez stupide, je sais, mais c'est à peu près tout ce que je vais faire avec LaTeX - ce n'est tout simplement pas si sensé une fois que je commence à regarder le code TeX... J'aime bien la méthode xparse de M. Robertson, je vais peut-être l'essayer...