我正在尝试编写一个宏,该宏在从文本模式、数学模式、显示数学和数学表调用时具有不同的行为。前三个用和很容易实现\ifmmode
。\mathchoice
但最后一个有点复杂,因为我必须测试各种 LaTeX 和 AMS 环境:、、array
等。但是,由于所有这些环境都是作为的变体实现的,最干净的方法是检查宏是否从内部调用。array*
gather
align
\halign
\halign
因此我的问题是:有没有办法测试是否调用了宏\halign
?
(这是一个用户级宏,很可能永远不会从内部调用\noalign
,因此不需要对这种情况进行额外的测试)。
编辑:我找到了一个准答案,我的意思是它在上述所有 AMS 环境中都有效,但在普通的 中无效\halign
。也就是说,在普通数学中,\math@cr@@@
是一个扩展为 的宏\cr
,但在对齐的环境中会发生变化。所以我只需要做类似的事情
\def\plain@cr{\cr} \ifx\math@cr@@@\plain@cr ... \else ... \fi