Todo el espectáculo por encima de difícil que puede ser para hacer una buena y flexible (o prohibir una sobrecarga) en función del látex !!! (Que el código TeX parece griego para mí)
así, sólo para añadir mi desarrollo reciente (aunque no tan flexible), esto es lo que he usado recientemente en mi documento de tesis, con
\usepackage{ifthen} % provides conditonals...
de inicio el comando, con el comando "opcional" conjunto blanco de forma predeterminada:
\newcommand {\figHoriz} [4] [] {
entonces tengo la macro establece una variable temporal, \ temp {}, de manera diferente dependiendo de si o no el argumento opcional está en blanco. Esto podría extenderse a cualquier argumento pasado.
\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)
Luego ejecuto la macro utilizando la variable \ temp {} para los dos casos. (Aquí solo establece el subtítulo para igualar el título largo si no fue especificado por el usuario).
\begin{figure}[!]
\begin{center}
\includegraphics[width=350 pt]{#3}
\temp %see above for caption etc.
\label{#2}
\end{center}
\end{figure}
}
En este caso, solo verifico el único argumento "opcional" que \ newcommand {} proporciona. Si tuviera que configurarlo para, digamos, 3 argumentos "opcionales", todavía tendría que enviar los 3 argumentos en blanco ... por ejemplo.
\MyCommand {first arg} {} {} {}
que es bastante tonto, lo sé, pero eso es por lo que yo voy a ir con LaTeX - no se trata sólo de que sensical una vez que empezar a buscar en código TeX ... me gusta el Sr. xparse método de Robertson embargo, tal vez voy a intentarlo ...
pregunta relevante: [Diferentes definiciones de comandos con y sin argumento opcional] (http://tex.stackexchange.com/q/308/1347) . –