如何根据宏是在文本模式还是数学模式下使用来有条件地定义宏?

如何根据宏是在文本模式还是数学模式下使用来有条件地定义宏?

我希望能够创建一个宏\foo,其定义看起来像

\newcommand{\foo}{
  \ifintextmode{abc}
  \ifinmathmode{x\cdot y\otimes z}
}

以便

\foo $\foo$

生产

在此处输入图片描述

这个 TeX.SE 问题似乎有点相关,但我不太明白答案,而且它没有直接解决我的问题。很抱歉,就我自己取得的任何进展而言,我没有更多可以提供的帮助。

答案1

\DeclareRobustCommand{\foo}{%
  \ifmmode
   x\cdot y\otimes z%
  \else
  abc%
   \fi
}

我应该说,虽然这样做(或使用类似的命令)通常不是一个好主意,\ensuremath因为 TeX 内置了文本和数学之间的区别,并且作者实际上需要随时知道文档是处于文本模式还是数学模式,并在每种情况下使用合适的命令。

考虑重音命令;\hat可以按上述方式定义以在文本或数学模式下工作,但纯 TeX(和 LaTeX)则定义\hat数学模式和\^文本模式。这两个命令的实现和语义非常不同,表面上对文本和数学使用相同的语法不会有帮助。

相关内容