All dies zeigt, dass es schwierig sein kann, eine schöne, flexible (oder überlastete) Funktion in LaTeX zu erstellen !!! (Dieser TeX-Code sieht für mich wie Griechisch aus.)
Nun, nur um meine jüngste (wenn auch nicht so flexible) Entwicklung hinzuzufügen, hier ist, was ich kürzlich in meinem Diplomarbeitsdokument verwendet habe, mit
\usepackage{ifthen} % provides conditonals...
Starten Sie den Befehl, wobei der Befehl "optional" standardmäßig leer ist:
\newcommand {\figHoriz} [4] [] {
Ich habe dann das Makro eine temporäre Variable \ temp {} gesetzt, je nachdem, ob das optionale Argument leer ist oder nicht. Dies kann auf jedes übergebene Argument ausgedehnt werden.
\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)
Dann führe ich das Makro mit der Variablen \ temp {} für die beiden Fälle aus. (Hier wird nur die kurze Beschriftung so eingestellt, dass sie der langen Beschriftung entspricht, wenn sie nicht vom Benutzer angegeben wurde.)
\begin{figure}[!]
\begin{center}
\includegraphics[width=350 pt]{#3}
\temp %see above for caption etc.
\label{#2}
\end{center}
\end{figure}
}
In diesem Fall überprüfe ich nur das einzelne "optionale" Argument, das \ newcommand {} bereitstellt. Wenn Sie es beispielsweise für 3 "optionale" Argumente einrichten würden, müssten Sie immer noch die 3 leeren Argumente senden ... z.
\MyCommand {first arg} {} {} {}
Das ist ziemlich albern, ich weiß, aber das ist ungefähr so weit, wie ich es mit LaTeX machen werde - es ist einfach nicht so sinnlich, wenn ich mir TeX-Code anschaue ... Ich mag die xparse-Methode von Mr. Robertson, vielleicht auch ich werde es versuchen ...