为什么 amsmath 包定义 \std@minus 和 \std@equal?

为什么 amsmath 包定义 \std@minus 和 \std@equal?

amsmath包保存了\mathcode减号和等号的原始值,随后在提供可扩展箭头的宏中使用保存的值(例如, \leftarrowfill@)。事实上,在第 893-900 行amsmath.sty我们读到

\mathchardef\std@minus\mathcode`\-\relax
\mathchardef\std@equal\mathcode`\=\relax
\AtBeginDocument{%
  \mathchardef\std@minus\mathcode`\-\relax
  \mathchardef\std@equal\mathcode`\=\relax
}
\ams@def\relbar{\mathrel{\mathpalette\mathsm@sh\std@minus}}
\ams@def\Relbar{\mathrel\std@equal}

为什么会这样?软件包作者在这里试图避免什么问题?

答案1

diffs-m.txt 包含注释

---将 \relbar 改为使用 \std@minus---否则 \underleftrightarrow 在 \DeclareMathOperator 定义中运行不佳。

尝试一下就会发现问题:

\documentclass[12pt]{article}%

\usepackage{amsmath}


\DeclareMathOperator{\test}{\underleftrightarrow{test}}

\begin{document}


\[\test\]

\makeatletter
\def\relbar{\mathrel{\mathpalette\mathsm@sh-}}

\[\test\]

\end{document}

在此处输入图片描述

答案2

文件中的评论amsmath.dtx如下:

构造这些箭头填充时使用的减号被破坏,以便箭头上方的上标不会太高。这主要影响\xleftarrow\xrightarrow箭头。

由于此文件已被处理成pdf文件并包含在tex live中,您可以通过请求来查看详细信息texdoc amsmath.pdf

这种设置隐含的意思是,计算机现代中的减号与加号具有相同的高度,除非进行调整,否则这肯定会影响上标的定位。

虽然没有明确注释,但等号被用作双杆箭的延长器。

相关内容