Optional arguments like `\section`

  • latex
  • macros

Optional arguments, in macros defined using \newcommand, don't quite work like the optional argument to \section. The default value of \sections 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: <!– {% raw %} –

>

snippet.latex
\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}

<

!– {% endraw %} –

>

L

aTeX itself has a trickier (but less readily understandable) method, using a macro \@dblarg; inside LaTeX, the example above would have been programmed: <!– {% raw %} –

>

snippet.latex
\newcommand\thing{\@dblarg\@thing}
\newcommand\@thing[2][\@error]{%
optional arg: #1,  mandatory arg: #2%
}

<

!– {% endraw %} –

>

I

n 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 website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Creative Commons Lizenzvertrag Edit this page Old revisions Sitemap Backlinks RSS feed Impressum Flattr this