\DeclareRobustCommand ¶Synopsis:
\DeclareRobustCommand{cmd}[num][default]{definition}
\DeclareRobustCommand* (same parameters
\DeclareRobustCommand and its starred form are generally like
\newcommand and \newcommand* (see \newcommand & \renewcommand), with the addition that they define a so-called
robust command, even if some code within the definition is
fragile. (For a discussion of robust and fragile commands,
see \protect.)
Also unlike \newcommand, these do not give an error if macro
cmd already exists; instead, a log message is put into the
transcript file if a command is redefined. Thus,
\DeclareRobustCommand can be used to define new robust commands
or to redefine existing commands, making them robust.
The starred form, \DeclareRobustCommand*, disallows the
arguments from containing multiple paragraphs, just like the starred
form of \newcommand and \renewcommand. The meaning of
the arguments is the same.
Commands defined this way are a bit less efficient than those defined
using \newcommand so unless the command’s data is fragile and the
command is used within a moving argument, use \newcommand.
Related to this, the etoolbox package offers three commands
and their starred forms: \newrobustcmd(*)
\renewrobustcmd(*), and
\providerobustcmd(*). They are similar to
\newcommand, \renewcommand, and \providecommand
and their own starred forms, but define a robust cmd. They have
two possible advantages compared to \DeclareRobustCommand:
\protect mechanism, so they do not incur
the slight loss of performance mentioned above, and
\new…,
\renew…, and \provide…, as the standard
commands. That is, they do not just write a log message when you
redefine cmd that already exists; you need to use either
\renew… or \provide…, or you get an error.
This may or may not be a benefit.