Como definir uma macro condicionalmente com base no fato de ela estar sendo usada em modo texto ou modo matemático?

Como definir uma macro condicionalmente com base no fato de ela estar sendo usada em modo texto ou modo matemático?

Eu gostaria de poder fazer uma macro \foocuja definição seria algo como

\newcommand{\foo}{
  \ifintextmode{abc}
  \ifinmathmode{x\cdot y\otimes z}
}

para que

\foo $\foo$

produz

insira a descrição da imagem aqui

Esta questão do TeX.SEparece um pouco relacionado, mas não entendi muito bem a resposta e isso não resolve diretamente o meu problema. Lamento não ter mais nada a oferecer em termos de fazer algum progresso sozinho.

Responder1

\DeclareRobustCommand{\foo}{%
  \ifmmode
   x\cdot y\otimes z%
  \else
  abc%
   \fi
}

Devo dizer que geralmente é uma má ideia fazer isso (ou usar um \ensuremathcomando semelhante), pois o TeX possui uma distinção integrada entre texto e matemática e, na verdade, o autor precisa saber o tempo todo se o documento está no modo texto ou matemático, e use comandos adequados em cada caso.

Considere os comandos de acento; \hatpoderia ter sido definido como acima para funcionar no modo texto ou matemático, mas em vez disso, o TeX simples (e o LaTeX) definem \hato modo matemático e \^o modo texto. A implementação e a semântica dos dois comandos são muito diferentes e usar superficialmente a mesma sintaxe para texto e matemática não teria sido útil.

informação relacionada