テキスト モードで呼び出されたときに数式モードに入り、数式モードで呼び出されたときには壊れないマクロを作成するにはどうすればよいでしょうか。

テキスト モードで呼び出されたときに数式モードに入り、数式モードで呼び出されたときには壊れないマクロを作成するにはどうすればよいでしょうか。

私は物理学のノートにこのパッケージを使用していますbraket。これにより処理速度が大幅に向上しますが、常に または\ket{\psi}と記述しており\bra{\psi}、この特定のブラとケットのペアが頻繁に出現するため、繰り返しになり、これを高速化するマクロが必要です。ただし、このbraketパッケージは数式モードでのみ機能するため、テキスト モードで記述しているときは私の試みは\newcommand{\ketp}{$\ket{\psi}}$機能しますが、数式モードで記述すると (当然のことながら) 機能しなくなります。

それぞれに 1 つずつ、2 つの異なるマクロを定義しなくても、このコマンドを数式モードとテキストモードの両方で動作させる方法はありますか?

ご協力いただければ幸いです。

PS これは非常に簡単な質問だとは思いますが、この機能についての説明はほとんど見つかりませんでした。

答え1

使用できます

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

ただし、これを行うのが常に良いアイデアであるかどうかは明らかではありません。TeX マークアップは、テキスト コマンドと数式コマンドを明確に区別する設計に基づいており、作成者は常にどのモードが使用されているかを知っていることが前提となっています。また、通常、テキストと数式で使用される類似のコマンドには、比較やなど、異なる名前が付けられてい\^ます\hat

そうは言っても、これ\ensuremathはまさにあなたが求めていることを実行するために LaTeX に追加されたものなので、それを使用したい場合はそこにあります...

答え2

まさにこの目的のためのコマンドがあります: \ensuremath{…}。数式モードで使用すると、引数は変更されずに返されます。テキスト モードで使用すると、引数は返されますが、数式モードになります。

それで、\newcommand{\ketp}{\ensuremath{\ket{\psi}}}あなたが要求したことを実行します。

使用方法に関する良いガイダンス:正しい使い方ensuremath;いつない使用するensuremath

関連情報