我想使用 声明一些新运算符\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