如何使用 \DeclareMathOperator 重新定义命令

如何使用 \DeclareMathOperator 重新定义命令

我想使用 声明一些新运算符\DeclareMathOperator,并且其中一些名称已被其他命令占用(我不想使用)。是否有与 等效的命令\renewcommand\DeclareMathOperator使用 覆盖命令的其他方法\DeclareMathOperator

答案1

没有提供此接口,我认为这是一个错误。一个简单的解决方法是在重新声明命令之前删除命令的定义:

\let\ln\relax
\DeclareMathOperator{\ln}{log} % this is how the logarithm should be denoted

命令\RedeclareMathOperator可以定义如下

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand\RedeclareMathOperator{%
  \@ifstar{\def\rmo@s{m}\rmo@redeclare}{\def\rmo@s{o}\rmo@redeclare}%
}
% this is taken from \renew@command
\newcommand\rmo@redeclare[2]{%
  \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup
  \expandafter\@ifundefined\@gtempa
     {\@latex@error{\noexpand#1undefined}\@ehc}%
     \relax
  \expandafter\rmo@declmathop\rmo@s{#1}{#2}}
% This is just \@declmathop without \@ifdefinable
\newcommand\rmo@declmathop[3]{%
  \DeclareRobustCommand{#2}{\qopname\newmcodes@#1{#3}}%
}
\@onlypreamble\RedeclareMathOperator
\makeatother

\DeclareMathOperator{\ln}{log} % gives error
\RedeclareMathOperator{\ln}{log} % is accepted
\RedeclareMathOperator{\foo}{foo} % gives error
\RedeclareMathOperator*{\deg}{deg} % now \deg typesets limits below and above

相关内容