\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.