David Z - 1 year ago 106
LaTeX Question

LaTeX: how to use a required arg as the default for an optional one?

I'm trying to create a LaTeX command with two arguments, one of them optional. Normally I'd do this as

``````\newcommand{\whatever}[2][default]{first #1 second #2}
``````

where
`default`
is the default value for the first argument. But for this command I want the value of the second argument to be used as the default value for the first argument - that is, I want

``````\whatever{blah}
\whatever{foo}
\whatever[lol]{rofl}
``````

to be equivalent to

``````\whatever[blah]{blah}
\whatever[foo]{foo}
\whatever[lol]{rofl}
``````

Does anyone know how to do this? I can drop down to plain TeX if necessary.

``````\makeatletter
Obviously, the `\makeatletter` commands can be dropped if you're doing this inside a `.sty` or `.cls` file.