### Commands defined with * options

LaTeX commands commonly have “versions” defined with an asterisk tagged onto their name: for example `\``newcommand` and `\``newcommand*` (the former defines a `\``long` version of the command).

The simple-minded way for a user to write such a command involves use of the ifthen package:

>     \newcommand{\mycommand}[1]{\ifthenelse{\equal{#1}{*}}%
>       {\mycommandStar}%
>       {\mycommandNoStar{#1}}%
>     }
>     \newcommand{\mycommandStar}{starred version}
>     \newcommand{\mycommandNoStar}[1]{normal version}

This does the trick, for sufficiently simple commands, but it has various tiresome failure modes, and it requires `\``mycommandnostar` to take an argument.

Of course, the LaTeX kernel has something slicker than this:

>     \newcommand{\mycommand}{\@ifstar
>                          \mycommandStar%
>                          \mycommandNoStar%
>     }
>     \newcommand{\mycommandStar}[2]{starred version}
>     \newcommand{\mycommandNoStar}[1]{normal version}

(Note that arguments to `\``mycommandStar` and `\``mycommandNoStar` are independent — either can have their own arguments, unconstrained by the technique we’re using, unlike the trick described above.) The `\``@ifstar` trick is all very well, is fast and efficient, but it requires the definition to be `\``makeatletter` protected.

A pleasing alternative is the suffix package. This elegant piece of code allows you to define variants of your commands:

>     \newcommand\mycommand{normal version}
>     \WithSuffix\newcommand\mycommand*{starred version}

The package needs e-LaTeX, but any new enough distribution defines LaTeX as e-LaTeX by default. Command arguments may be specified in the normal way, in both command definitions (after the “`*`” in the `\``WithSuffix` version). You can also use the TeX primitive commands, creating a definition like:

>     \WithSuffix\gdef\mycommand*{starred version}

`ifthen.sty`
  Part of the LaTeX distribution
`suffix.sty`
  Distributed as part of macros/latex/contrib/bigfoot (gzipped tar, browse)

This question on the Web: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=cmdstar