As far as I understand, whatever can be done using DeclareMathOperator
can also be achieved using newcommand
, but not the other way around. If this is the case, what are the circumstances where DeclareMathOperator
is the better choice? When should I take solely newcommand
?
I found a question regarding arguments and DeclareMathOperator
, and I wonder what other aspects should be taken into consideration when it comes to choosing which method to use when defining math operators.
Best Answer
\DeclareMathOperator
is designed to create commands that should typeset operator names such assin
andlim
. Some of these are already defined in base TeX or LaTeX so one writes2\sin\theta
instead of
2sin\theta
giving correct spacing and font. If you need an operator of this type that is not predefined, then you create it with
\DeclareMathOperator
, e.g. the space of endomorphisms of a vector space is written\End V
but you need to make the definition
\DeclareMathOperator{\End}{End}
first: a minimal working example is\newcommand
is much more general and can be used to define direct short cuts or more complicated macros. So for example if you find youself writing\left.\frac d{dt}\right|_{t=0}
many times in your document you can package this up as a single command\dtzero
via\newcommand{\dtzero}{\left.\frac d{dt}\right|_{t=0}}
and just type\dtzero
each time instead.I would usually recommend reserving
\DeclareMathOperator
for the use described above and using\newcommand
in most other situations. To get the effect of\DeclareMathOperator
in a one-off situation, or inside a\newcommand
, you use\operatorname
; so you can write\operatorname{End}V
for the above example.Finally, one should note that there is a starred version
\DeclareMathOperator*
. This is used for defining operators that have limits typeset beneath them instead of to the right (at least when in a display). For exampleSimilarly there is the starred variant
\operatorname*
.Remark. The above code samples load the
amsmath
package. Strictly speaking all you need is theamsopn
package, whichamsmath
reads in automatically. Alternatively, one can loadmathtools
which is a modern package building further onamsmath
.