我希望能够创建一个宏\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
数学模式和\^
文本模式。这两个命令的实现和语义非常不同,表面上对文本和数学使用相同的语法不会有帮助。