\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…
Go to previous question, or next question
Go to FAQ home.
URL for this question: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=oarglikesect
Comments, suggestions, or error reports? - see “how to improve the FAQ”.
This is FAQ version 3.27, released on 2013-06-07.