如何编写一个宏,使其在文本模式下调用时进入数学模式,但在数学模式下调用时不会中断?

如何编写一个宏,使其在文本模式下调用时进入数学模式,但在数学模式下调用时不会中断?

我使用该软件包braket记录物理笔记,这大大加快了速度,但我经常写\ket{\psi}\bra{\psi},而且由于这件特定的胸罩和裤子出现的频率很高,所以这变得重复,我希望有一个宏来加快速度。但是由于该braket软件包仅在数学模式下工作,因此\newcommand{\ketp}{$\ket{\psi}}$当我在文本模式下写作时,我的尝试有效,但在数学模式下写作时,它会中断(这并不奇怪)。

有什么方法可以使这个命令在数学模式和文本模式下工作,而不必为每个命令定义两个不同的宏?

在此先感谢您的帮助。

PS:我确信这是一个非常简单的问题,但我几乎找不到关于此功能的任何解释。

答案1

您可以使用

\newcommand{\ketp}{\ensuremath{\ket{\psi}}}

然而,目前尚不清楚这样做是否总是一个好主意。TeX 标记基于一种在文本和数学命令之间有明确区分的设计,假设作者始终知道正在使用哪种模式,并且通常在文本和数学中使用的类似命令具有不同的名称,例如比较\^和。\hat

也就是说,它\ensuremath被添加到 LaTeX 中来执行您要求的操作,因此如果您想使用它,它就在那里......

答案2

有一个命令专门用于此目的:\ensuremath{…}。如果在数学模式下使用,它会给出其参数不变;如果在文本模式下使用,它会给出其参数,但进入数学模式。

所以\newcommand{\ketp}{\ensuremath{\ket{\psi}}}我会按照你的要求去做。

关于其使用的一些良好指导:正确使用方法ensuremath什么时候不是使用ensuremath

相关内容