
\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 つのコマンドの実装とセマンティクスは非常に異なり、表面的にはテキストと数式に同じ構文を使用しても役に立たないでしょう。