\
section
\
newcommand
, don’t
quite work like the optional argument to \
section
. The default
value of \
section
’s optional argument is the value of the
mandatory argument, but \
newcommand
requires that you ‘know’ the
value of the default beforehand.
The requisite trick is to use a macro in the optional argument:
\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 itself has a trickier (but less readily understandable)
method, using a macro \
@dblarg
; inside LaTeX, the example
above would have been programmed:
\newcommand\thing{\@dblarg\@thing} \newcommand\@thing[2][\@error]{% optional arg: #1, mandatory arg: #2% }
In that code, \
@thing
is only ever called with an optional and a
mandatory argument; if the default from the \
newcommand
is
invoked, a bug in user code has bitten…
This question on the Web: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=oarglikesect