I would like to define a *'d version of a command, something like


If I try to do this, LaTeX complains that I'm trying to redefine \foo, so I guess I need to do something special to handle *s. But what?

  • 5
    Of the different replies given: what is currently the recommended answer to this question? Commented Feb 23, 2016 at 7:49

3 Answers 3


See this entry in the TeX FAQ.

The "elegant" way is to use the suffix package (which requires eTeX):






  • Does this work with commands with optional arguments too? If so how?
    – jan-glx
    Commented Mar 11, 2014 at 10:59
  • 1
    @YAK I don't know. Note that the combination starred/optional is very rare.
    – lockstep
    Commented Mar 11, 2014 at 11:37
  • 1
    Ups, I meant normal arguments, not optionals. And it works (\WithSuffix\newcommand\foo*[1]{Foo #1}) but warns "No 2nd argument following newcommand"...
    – jan-glx
    Commented Mar 11, 2014 at 12:13
  • Maybe I misunderstood what you meant, and maybe the package has changed since then, but; \WithSuffix\newcommand\mycommand*[3]{starred command #1 #2 #3} works fine (\mycommand*{1}{2}{3})
    – Mogu
    Commented Jul 25, 2019 at 9:22
  • 1
    Note that when using \WithSuffix, the name of the new command \foo* apparently cannot be surrounded by brackets {...} in the definition.
    – Paul Wintz
    Commented Sep 25, 2022 at 5:48

If you look at source2e you might see a lot of lines that look like


This makes \foo a one-argument command that has regular and starred versions. The starred version is the expansion of \@foo while the nonstarred version is that of \@@foo. Using the @ sign in the auxiliary macros is a TeX convention which some authors embrace and some avoid.

There are higher-level ways to do it (as lockstep points out) but once you learn this pattern it's not too hard to use. Just make sure it's between \makeatletter...\makeatother or in a .sty file.

Edits removed some inaccuracies and editorializing.

  • 1
    What's the controversy with @? FWIW, it's also used in Plain and ConTeXt (although far less in the latter, which do is more common, leading to some funny command names such as \dodohideblock). Commented Oct 22, 2010 at 3:22
  • 2
    Let me be clear that I follow the @-convention and am not advocating against it. But I can also see the point of view that the name \@foo (or \f@o or \f@@) doesn't help the human reader understand the relationship. \@foowithstar and \@foowithoutstar might be better. Sorry if I blew that internal ambivalence into a controversy. :-) Also, I wanted to point out that @'s are not required in auxiliary macros. Commented Oct 22, 2010 at 11:12
  • 14
    Yes, using '@' in place of vowels is a pain in the neck, whereas using it as a divider is fine.
    – Joseph Wright
    Commented Oct 23, 2010 at 17:39

LaTeX3 solution:

    {blahblah}% If a star is seen
    {blah}%     If no star is seen
  • 1
    This was the only solution that worked for me when using \dekotenize in the command and invoking the command from the caption of a lstlisting. Commented Oct 5, 2021 at 20:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .