Costumo aplicar o ambiente subscrito no modo matemático para atribuir, por exemplo, materiais às propriedades dos materiais, $\eta_{oil}$
, $\lambda_{air}$
, etc. Não é muito matemático, mas ei, sou engenheiro ;-)
Estou aplicando o pacote amsmath, então isso coloca o subscrito em itálico como a maioria das outras letras. Eu não quero isso. É claro que existem inúmeras maneiras de alterar isso localmente ( $\eta_{\mathrm{oil}}$
parece mais apropriado), mas isso é complicado.
Então, existe uma maneira TeXy legal e inteligente de resolver isso? Possivelmente aplicando algo parecido \DeclareMathSomething{}{}{}{}
?
Eu gostaria de fazer isso globalmente, já que 99% do meu uso $_{}$
não está relacionado a variáveis. E nas poucas situações em que o subscrito é uma variável, eu ainda poderia usar $_{\mathnormal{}}$
...
Agradeço todas as sugestões.
Responder1
Eu usaria um personagem diferente para isso. Aqui eu uso !
para subscritos verticais (e defino \exclam
se você precisa !
no modo matemático como ele mesmo.
\documentclass{article}
\usepackage{amsmath}
\begingroup\lccode`~=`!
\lowercase{\endgroup\def~}#1{_{\mathrm{#1}}}
\mathchardef\exclam=\mathcode`!
\AtBeginDocument{\mathcode`!=\string"8000 }
\begin{document}
$a_{x}+b!{eff}=n\exclam$
\end{document}
Quando um caractere recebe \mathcode
32768 ( "8000
é o hexadecimal e \string
é uma precaução contra babel
fazer coisas estranhas), ele tem um comportamento peculiar. Ele funciona normalmente no modo texto, mas quando encontrado no modo matemático torna-se como uma macro, mais precisamente como um caractere ativo.
Uma definição de !
caráter ativo deve estar presente; o truque
\begingroup\lccode`~=`!
\lowercase{\endgroup\def~}#1{_{\mathrm{#1}}}
é o mesmo que
{\catcode`!=\active \gdef!#1{_{\mathrm{#1}}}
mas prefiro evitar \gdef
sempre que possível. Então, quando o TeX encontra !
no modo matemático, ele procura um argumento e o transforma em _{\mathrm{<argument>}}
, que é exatamente o que você procura.
Finalmente, \mathchardef\exclam=\mathcode`!
define \exclam
para produzir o mesmo que seria produzido !
no modo matemático se não o tivéssemos redefinido.
Se você não planeja usar apenas letras ASCII em seus subscritos, então você deve mudar \mathrm
para \textnormal
, para que letras acentuadas também sejam permitidas (e os espaços sejam respeitados).
Responder2
Eu costumo usar algo como o seguinte:
\newcommand{\mstr}[1] {\ensuremath{\mathit{#1}}}
\newcommand{\subs}[2] {#1\mstr{_#2}}
Claro, você poderia, por exemplo, mudar \mathit
para \mathrm
. Então use como
\subs{x}{y}