重新定义 DeclareMathOperator

重新定义 DeclareMathOperator

我正在寻找一种\DeclareMathOperator{\Operator}{Operator}类似于 的方法来替换它\MathOperator{Operator}。我尝试定义一个新命令\newcommand\MathOperator[1]{\DeclareMathOperator{\#1}{#1}},然后调用它\MathOperator{MyOperator},但这似乎不起作用,"Undefined control sequence."调用时出现以下错误: $\MyOperator$。知道我应该怎么做吗?

多谢。

答案1

我认为重新定义不是一个好主意,\DeclareMathOperator而是应该自己制作宏来创建操作符名称。一种方法是使用etoolbox并使用

\newcommand\myDeclareMathOperator[1]{\csdef{#1}{\operatorname{#1}}}

请注意,有些名称并不适合用作宏,例如,这个名称会让你自食恶果:\myDeclareMathOperator{span}

这个比较安全

\newcommand\myDeclareMathOperator[1]{
  \ifcsundef{#1}{
    \csdef{#1}{\operatorname{#1}}
  }{
   \PackageError{MyMacros}{#1 is already used as a macro name}{}
  }
}

如果我们另外使用,xparse我们可以支持以下*符号:

\NewDocumentCommand\myDeclareMathOperator{ s m }{
  \ifcsundef{#2}{
    \csdef{#2}{
      \IfBooleanTF{#1}{\operatorname*}{\operatorname}{#2}
    }
  }{
   \PackageError{MyMacros}{#2 is already used as a macro name}{}
  }
}

相关内容