
Eu gostaria de poder fazer uma macro \foo
cuja definição seria algo como
\newcommand{\foo}{
\ifintextmode{abc}
\ifinmathmode{x\cdot y\otimes z}
}
para que
\foo $\foo$
produz
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 \ensuremath
comando 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; \hat
poderia ter sido definido como acima para funcionar no modo texto ou matemático, mas em vez disso, o TeX simples (e o LaTeX) definem \hat
o 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.