\SetMathAlphabet 与 \rm 混淆

\SetMathAlphabet 与 \rm 混淆

请考虑以下最小示例:

\documentclass{article}
\SetMathAlphabet{\mathrm}{normal}{\encodingdefault}{\rmdefault}{m}{n}%

\begin{document}
\parindent0pt
X$\rm -1$\\
X$\rm -1$\\
X$\rm -1$

\end{document}

产生以下 dvi 输出(Texlive2019):

编译后的 MWE 的屏幕截图

为什么第一行中的减号像二元运算符一样间隔开,而所有后续行中的减号却像一元运算符一样间隔开?

(我知道我不应该使用纯文本字体开关;此代码已简化以显示核心问题,并且是可追溯到 2008 年的更大的样式表的一部分,并且必须向后兼容,所以我不能省略\rm。此外,X示例中的 s 仅用于显示间距,它不属于$-1$

答案1

您可以尝试添加修复程序https://github.com/latex3/latex2e/commit/06692e解决了www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/3357

\documentclass{article}
\usepackage{etoolbox}

\makeatletter
\patchcmd\document@select@group{#1{#4}}{\expandafter#1\ifx\math@bgroup\bgroup{#4}\else#4\fi}{}{\fail}
\makeatother

\SetMathAlphabet{\mathrm}{normal}{\encodingdefault}{\rmdefault}{m}{n}%
\begin{document}
\parindent0pt
X$\rm -1$\\
X$\rm -1$\\
X$\rm -1$


\end{document}

相关内容