¿Cómo definir una macro condicionalmente en función de si se utiliza en modo texto o modo matemático?

¿Cómo definir una macro condicionalmente en función de si se utiliza en modo texto o modo matemático?

Me gustaría poder hacer una macro \foocuya definición se vería así

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

de modo que

\foo $\foo$

produce

ingrese la descripción de la imagen aquí

Esta pregunta de TeX.SEParece algo relacionado, pero no entendí bien la respuesta y no resuelve directamente mi problema. Lamento no tener nada más que ofrecer en términos de hacer algún progreso yo mismo.

Respuesta1

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

Debo decir que generalmente es una mala idea hacer esto (o usar algo similar)\ensuremath comando similar), ya que TeX tiene una distinción incorporada entre texto y matemáticas y realmente el autor necesita saber en todo momento si el documento está en modo texto o matemático. y utilizar comandos adecuados en cada caso.

Considere los comandos de acento; \hatpodría haberse definido como arriba para funcionar en modo texto o matemático, pero en lugar de eso, TeX simple (y LaTeX) se define \hatpara el modo matemático y \^para el modo texto. La implementación y la semántica de los dos comandos son muy diferentes y, superficialmente, usar la misma sintaxis para texto y matemáticas no habría sido útil.

información relacionada