A menudo aplico el entorno de subíndice en modo matemático para asignar, por ejemplo, materiales a propiedades de materiales, $\eta_{oil}$
etc. $\lambda_{air}$
No es muy matemático, pero bueno, soy ingeniero ;-)
Estoy aplicando el paquete amsmath, por lo que pone el subíndice en cursiva como la mayoría de las otras letras. No quiero eso. Por supuesto, existen numerosas formas de cambiar esto localmente ( $\eta_{\mathrm{oil}}$
se considera más apropiado), pero esto es engorroso.
Entonces, ¿existe una forma TeXy agradable y hábil de abordar esto? ¿Posiblemente aplicando algo como \DeclareMathSomething{}{}{}{}
?
Me gustaría hacerlo globalmente ya que el 99% de mi uso $_{}$
no está relacionado con variables. Y en las muy pocas situaciones en las que el subíndice es una variable, todavía podría usar $_{\mathnormal{}}$
...
Estoy agradecido por todas las sugerencias.
Respuesta1
Usaría un personaje diferente para esto. Aquí lo uso !
para subíndices verticales (y defino \exclam
si es necesario !
en modo matemático como sí mismo).
\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}
Cuando a un carácter se le da \mathcode
32768 ( "8000
es el hexadecimal y \string
es una precaución para no babel
hacer cosas extrañas) tiene un comportamiento peculiar. Funciona normalmente en modo texto, pero cuando se encuentra en modo matemático se vuelve como una macro, más precisamente como un carácter activo.
Debe estar presente una definición de !
carácter activo; el truco
\begingroup\lccode`~=`!
\lowercase{\endgroup\def~}#1{_{\mathrm{#1}}}
es lo mismo que
{\catcode`!=\active \gdef!#1{_{\mathrm{#1}}}
pero prefiero evitarlo \gdef
siempre que sea posible. Entonces, cuando TeX encuentra !
en modo matemático, busca un argumento y lo transforma en _{\mathrm{<argument>}}
, que es precisamente lo que busca.
Finalmente, \mathchardef\exclam=\mathcode`!
define \exclam
para producir lo mismo que se produciría !
en modo matemático si no lo hubiésemos redefinido.
Si no planea usar solo letras ASCII en sus subíndices, entonces debe cambiar \mathrm
a \textnormal
, de modo que también se permitan letras acentuadas (y se respeten los espacios).
Respuesta2
Normalmente uso algo como lo siguiente:
\newcommand{\mstr}[1] {\ensuremath{\mathit{#1}}}
\newcommand{\subs}[2] {#1\mstr{_#2}}
Por supuesto, podrías, por ejemplo, cambiar \mathit
a \mathrm
. Entonces úsalo como
\subs{x}{y}