如何編寫一個在文字模式下呼叫時進入數學模式但在數學模式下呼叫時不會中斷的巨集?

如何編寫一個在文字模式下呼叫時進入數學模式但在數學模式下呼叫時不會中斷的巨集?

我正在使用這個包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

相關內容