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.
The LaTeX kernel has an inbuilt method of doing this, although it’s not widely used. Here’s an example:
Obviously, the
\makeatlettercommands can be dropped if you’re doing this inside a.styor.clsfile.