\substack 中的文本模式问题

\substack 中的文本模式问题

我已经以这种方式定义了差分命令

\let\underdot\d
\renewcommand{\d}{\ifmmode\mathop{}\!\mathrm{d}\else\expandafter\underdot\fi}

这样我就不会丢失文本重音(我不知道它是如何expandafter工作的,我只是在反复试验后才把它放在那里)。但我有一个问题,如果我\d在子堆栈中使用它作为第一个命令,它会给我文本 \d.以下是示例代码:

\documentclass{scrartcl}
\usepackage{mathtools}

\let\underdot\d
\renewcommand{\d}{\ifmmode\mathop{}\!\mathrm{d}\else\expandafter\underdot\fi}

\begin{document}
\[
    \substack{\d x = \sigma \d y}
\]
\end{document}

\substack我不知道为什么会发生这种情况,可能是我的命令定义错误,也可能是( )中存在错误subarray。我可以用 解决它{}\!\d x = …,但我想全局修复它。

\d我该如何解决这个问题? 解决这个问题的最佳方法是什么(可能是以另一种方式重新定义命令)?

答案1

您需要在定义的开头使用\DeclareRobustCommand或放置,否则在任何对齐单元格开头的测试都将为假,因为它会展开\relax\ifmmode单元格启动(并进入数学模式),而 TeX 正在寻找\omit\multicolumn

相关内容