
Я хотел бы иметь возможность создать макрос, \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
для математического режима и \^
для текстового режима. Реализация и семантика двух команд сильно различаются, и поверхностное использование одного и того же синтаксиса для текста и математики не было бы полезным.