テキスト モードまたは数式モードで使用されているかどうかに基づいて、マクロを条件付きで定義するにはどうすればよいですか?

テキスト モードまたは数式モードで使用されているかどうかに基づいて、マクロを条件付きで定義するにはどうすればよいですか?

\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
}

ただし、TeX にはテキストと数式の区別が組み込まれており、作成者は常にドキュメントがテキスト モードか数式モードかを把握し、それぞれの場合に適切なコマンドを使用する必要があるため、これを行う\ensuremath(または同様のコマンドを使用する) のは一般的に悪い考えだと言わなければなりません。

アクセント コマンドについて考えてみましょう。\hat上記のようにテキスト モードまたは数式モードで動作するように定義できますが、プレーン TeX (および LaTeX) では\hat数式モード用に を、\^テキスト モード用に を定義します。2 つのコマンドの実装とセマンティクスは非常に異なり、表面的にはテキストと数式に同じ構文を使用しても役に立たないでしょう。

関連情報