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:
\makeatletter
\newcommand\@foo[2][]{[1: #1, 2: #2.] }
\newcommand\foo{\@dblarg\@foo}
\makeatother
\foo{same}
\foo[hello]{world}
Obviously, the \makeatletter commands can be dropped if you're doing this inside a .sty or .cls file.
An ugly hack:
\usepackage{ifthen}
...
\newcommand{\whatever}[2][uniquenonesense]{
...
\ifthenelse{\equal{#2}{uniquenonesense}}{#1}{#2}
...
}
Presumably you wanted something cleaner, but that's what I've got.
Depending on your semantics, uniquenonesense might be empty.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With