\DeclareMathOperator 在其第二个参数(名称文本)中包含的句点后添加空格

\DeclareMathOperator 在其第二个参数(名称文本)中包含的句点后添加空格

以下 MCE 指出\DeclareMathOperator,如果其第二个参数(名称文本)包含句点,则在这些句点后添加空格:

\documentclass{article}
\usepackage{amsmath}
%
\DeclareMathOperator{\limone}{l.i.m.}
\newcommand\limtwo{\mathop{\mathrm{l.i.m.}}}
%
\begin{document}
\begin{align*}
  A_t & =\limone A_{n,t} \\
  A_t & =\limtwo A_{n,t} \\
  A_t & =\text{l.i.m.} A_{n,t}
\end{align*}
\end{document}

在此处输入图片描述

您知道为何以及如何摆脱这些空间吗?

答案1

与之比较

$l\mathpunct{.}i\mathpunct{.}m$

事实上,你的\limone给予\qopname \newmcodes@ o{l.i.m.}\newmcodes分配\mathpunct类别到点(这将被采取字母字体,不是运算符...). 另一个奇怪之处\newmcodes@

\newmcodes@ ->\mathcode `\'39\mathcode `\*42\mathcode `\."613A\ifnum \mathcode 
`\-=45 \else \mathchardef \std@minus \mathcode `\-\relax \fi \mathcode `\-45\ma
thcode `\/47\mathcode `\:"603A\relax 

您将\mathpunct与 拥有相同的间距:在此处输入图片描述

该怎么办?您可以随时定义自己的定义\newmcodes@来替换上述定义。

答案2

\DeclareMathOperator{\limone}{l{.}i{.}m{.}}将修复第 1 行的多余空间,使其与第 2 行相似。请注意,虽然仍将l.i.m.与您的情况一致\text,但在最后一个后面会有一个间隙.,因为(以或 的l.i.m.形式)现在是一个运算符,而是一个数学原子。\limone\limtwo\text{l.i.m.}

\documentclass{article}
\usepackage{amsmath}
%
\DeclareMathOperator{\limone}{l{.}i{.}m{.}}
\newcommand\limtwo{\mathop{\mathrm{l.i.m.}}}
%
\begin{document}
\begin{align*}
  A_t & =\limone A_{n,t} \\
  A_t & =\limtwo A_{n,t} \\
  A_t & =\text{l.i.m.} A_{n,t}
\end{align*}
\end{document}

在此处输入图片描述

相关内容