检测数学模式(包括 align*)的可靠方法是什么?

检测数学模式(包括 align*)的可靠方法是什么?

我以为\ifmmode检测到了数学模式,但显然没有:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
    \ifmmode math \else not math \fi
\]
$\ifmmode math \else not math \fi$
\begin{align*}
  \ifmmode math \else not math \fi
\end{align*}
\end{document}

在此处输入图片描述

我如何可靠地检测数学模式,包括在内align*

答案1

正如您在评论中指出的那样,添加\relax基本上就是解决方案。如果您查看 LaTeX 源代码,您会发现大多数 的用法\ifmmode前面都有\relax,原因正是如此:

\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi %[...]

在表格单元格的开头(大致align使用)TeX 正在扩展宏来寻找\omit\noalign,此时它是不是在数学模式下,并扩展,\ifmmode然后为假。

添加\relax(或任何不可扩展的标记)将停止扫描,并插入列模板,从而有效地启动数学模式。

相关内容