据我所知,使用 可以完成的所有事情DeclareMathOperator
也可以使用 实现newcommand
,但反过来不行。如果是这样,什么情况下DeclareMathOperator
是更好的选择?我什么时候应该单独使用newcommand
?
我发现了一个关于论点和DeclareMathOperator
,我想知道在选择定义数学运算符时使用哪种方法时还应该考虑哪些方面。
答案1
\DeclareMathOperator
旨在创建应排版运算符名称(如sin
和 )的命令lim
。其中一些已经在基础 TeX 或 LaTeX 中定义,因此可以这样写2\sin\theta
代替2sin\theta
给出正确的间距和字体。如果您需要这种类型的未预定义的运算符,则可以使用创建它\DeclareMathOperator
,例如,向量空间的自同态空间写为\End V
但你需要先做出定义\DeclareMathOperator{\End}{End}
:一个最小的工作示例是
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\End}{End}
\begin{document}
\( \End V \)
\end{document}
\newcommand
更为通用,可用于定义直接快捷方式或更复杂的宏。例如,如果您发现自己\left.\frac d{dt}\right|_{t=0}
在文档中多次书写,则可以将其打包为单个命令,\dtzero
然后每次\newcommand{\dtzero}{\left.\frac d{dt}\right|_{t=0}}
只需键入即可。\dtzero
我通常建议保留\DeclareMathOperator
用于上述用途,并在大多数其他情况下使用。要在一次性情况下或在 中\newcommand
获得 的效果,您可以使用;因此您可以为上述示例编写。\DeclareMathOperator
\newcommand
\operatorname
\operatorname{End}V
最后,应该注意的是,有一个带星号的版本\DeclareMathOperator*
。这用于定义限制排版在下方而不是右侧的运算符(至少在显示时)。例如
同样,还有带星号的版本\operatorname*
。
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\End}{End}
\DeclareMathOperator*{\Max}{Max}
\begin{document}
\begin{displaymath}
\Max_{x\in A} f(x) \qquad \End_R V
\end{displaymath}
\end{document}
评论。 上述代码示例加载了amsmath
包。严格来说,您所需要的只是amsopn
包,它amsmath
会自动读取。或者,您可以加载一个mathtools
基于此构建的现代包amsmath
。
答案2
我通常使用
\newcommand{\Ker}{\operatorname{Ker}}
代替
\DeclareMathOperator{\Ker}{Ker}
然而,第二种更实用。
答案3
另一个区别是\DeclareMathOperator
只能在前导码中使用,而\newcommand
没有这样的限制。
答案4
我发现使用\newcommand
而不是 的另一个优点\DeclareMathOperator
是,通过添加\ensuremath{}
到\newcommand
,我们可以在文本之间轻松地使用它。
例如\newcommand{\w}{\ensuremath{\mathbf{w}}\xspace}
。您可以\w
在文本模式下直接使用,无需$
在两侧添加,即可获得粗体数学符号 w。\xspace
根据需要,在使用该命令后添加空格。