Как условно определить макрос в зависимости от того, используется ли он в текстовом или математическом режиме?

Как условно определить макрос в зависимости от того, используется ли он в текстовом или математическом режиме?

Я хотел бы иметь возможность создать макрос, \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
}

Хотя я должен сказать, что делать это (или использовать похожую \ensuremathкоманду) — плохая идея, поскольку TeX имеет встроенное различие между текстом и математикой, и автору на самом деле нужно всегда знать, находится ли документ в текстовом или математическом режиме, и использовать подходящие команды в каждом случае.

Рассмотрим команды акцента; \hatони могли быть определены, как указано выше, для работы в текстовом или математическом режиме, но вместо этого простые TeX (и LaTeX) определяют \hatдля математического режима и \^для текстового режима. Реализация и семантика двух команд сильно различаются, и поверхностное использование одного и того же синтаксиса для текста и математики не было бы полезным.

Связанный контент