使用 \mathchoice 更新 \mod 时参数出现错误

使用 \mathchoice 更新 \mod 时参数出现错误

目前我正在使用\mod附带的命令amsmath,虽然我总体上对它感到满意,但我不喜欢它处理文本样式中的间距的方式。

我尝试\mod按如下方式更新命令:

\usepackage{amsmath}
\makeatletter
\renewcommand{\mod}[1]{\mathchoice
  {\allowbreak \if@display \mkern 18mu\else \mkern 5mu\fi
    {\operator@font mod} \mkern 6mu #1}
  {\allowbreak \if@display \mkern 18mu\else \mkern 5mu\fi
    {\operator@font mod} \mkern 6mu #1}
  {\mkern4mu {\operator@font mod} \mkern 6mu #1}
  {\mkern4mu {\operator@font mod} \mkern 6mu #1}
}
\makeatother

现在,如果我输入 ,就会出现各种错误\mod \mathfrak p,为了避免这些错误,我必须输入\mod {\mathfrak p}。但是,在我更新命令之前,输入是没问题的,\mod \mathfrak p而且不会产生任何错误。有什么办法可以解决这个问题,还是我应该坚持输入\mod {\mathfrak p}

答案1

要模仿amsmath定义,您应该将参数移到 之外\mathchoice。您也可以移动6mu单词的间距和键入方式(mod在所有情况下都一样)。正如@egreg 指出的那样,应该\allowbreak将 移出\mathchoice; 里面没有任何效果。

示例输出

\documentclass{article}

\usepackage{amsmath,amssymb}
\makeatletter
\renewcommand{\mod}[1]{\allowbreak
  \mathchoice
  {\if@display \mkern 18mu\else \mkern 5mu\fi}
  {\if@display \mkern 18mu\else \mkern 5mu\fi}
  {\mkern4mu}
  {\mkern4mu} {\operator@font mod} \mkern 6mu #1
}
\makeatother

\begin{document}

\(  5 \mod \mathfrak f \)

\begin{equation*}
  5 \mod \mathfrak f
\end{equation*}

\end{document}

在某种程度上,幸运的是,它在这里#1可以正常工作\mathfrak;添加\tracingmacros=1以查看此内容。命令操作参数的方式根本不必要,您只需定义即可。

\makeatletter
\renewcommand{\mod}{\allowbreak
  \mathchoice
  {\if@display \mkern 18mu\else \mkern 5mu\fi}
  {\if@display \mkern 18mu\else \mkern 5mu\fi}
  {\mkern4mu}
  {\mkern4mu} {\operator@font mod} \mkern 6mu
}
\makeatother

答案2

这里不需要,只需要一些算术;不过,我要强调的是,和\mathchoice的正确语法是\mod\mathfrak

a\equiv b \mod{\mathfrak{p}}

标准定义确实似乎\mod \mathfrak p可行,但仅此而已:它似乎上班。

TeX 提供\nonscript指定未在下标或上标中添加的数学胶水或字距:

\documentclass{article}
\usepackage{amsmath,amssymb}

\textwidth=.5\textwidth % just not to waste space

\begin{document}

\section*{Standard}

$a\equiv b\mod{\mathfrak{p}} + X_{a\equiv b\mod{\mathfrak{p}}}$
\[
a\equiv b\mod{\mathfrak{p}} + X_{a\equiv b\mod{\mathfrak{p}}}
\]

\section*{Modified}

\makeatletter
\renewcommand{\mod}[1]{%
  \allowbreak
  \nonscript\if@display \mkern 14mu \else \mkern 1mu \fi
  \mkern 4mu
  {\operator@font mod}
  \mkern 6mu
  #1
}
\makeatother

$a\equiv b\mod{\mathfrak{p}} + X_{a\equiv b\mod{\mathfrak{p}}}$
\[
a\equiv b\mod{\mathfrak{p}} + X_{a\equiv b\mod{\mathfrak{p}}}
\]

\end{document}

在此处输入图片描述

相关内容