Wie kann man mit amsmath im Mathematikmodus global tiefgestellte Ziffern in aufrechter Schriftart einfügen?

Wie kann man mit amsmath im Mathematikmodus global tiefgestellte Ziffern in aufrechter Schriftart einfügen?

Ich verwende die Indexumgebung häufig im Mathematikmodus, um beispielsweise Materialien Materialeigenschaften usw. zuzuweisen. $\eta_{oil}$Nicht $\lambda_{air}$sehr mathematisch, aber hey, ich bin Ingenieur ;-)

Ich wende das amsmath-Paket an, daher wird der Index wie die meisten anderen Buchstaben kursiv gesetzt. Das möchte ich nicht. Natürlich gibt es zahlreiche Möglichkeiten, dies lokal zu ändern ( $\eta_{\mathrm{oil}}$scheint am geeignetsten zu sein), aber das ist umständlich.

Gibt es also eine nette, elegante TeXy-Methode, um dieses Problem zu lösen? Vielleicht durch die Anwendung von etwas wie \DeclareMathSomething{}{}{}{}?

Ich möchte das global tun, da 99 % meiner Verwendung von $_{}$nicht mit Variablen zusammenhängt. Und in den sehr wenigen Situationen, in denen der Index eine Variable ist, könnte ich immer noch verwenden $_{\mathnormal{}}$...

Ich bin für alle Anregungen dankbar.

Antwort1

Ich würde hierfür ein anderes Zeichen verwenden. Hier verwende ich !für aufrechte Indizes (und definiere, \exclamfalls nötig, !im Mathemodus selbst).

\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}

Bildbeschreibung hier eingeben

Wenn einem Zeichen die Zahl 32768 zugewiesen wird \mathcode( "8000das ist die Hexadezimalzahl dafür und \stringdient als Vorsichtsmaßnahme gegen babelseltsame Dinge), verhält es sich eigenartig. Im Textmodus verhält es sich normal, aber im Mathematikmodus wird es zu einem Makro, genauer gesagt zu einem aktiven Zeichen.

Eine Definition des !aktiven Charakters muss vorhanden sein; der Trick

\begingroup\lccode`~=`!
\lowercase{\endgroup\def~}#1{_{\mathrm{#1}}}

ist das gleiche wie

{\catcode`!=\active \gdef!#1{_{\mathrm{#1}}}

aber ich vermeide es lieber, \gdefwann immer es möglich ist. Wenn TeX also !im Mathematikmodus sucht, sucht es nach einem Argument und wandelt es in um _{\mathrm{<argument>}}, was genau das ist, wonach Sie suchen.

Schließlich \mathchardef\exclam=\mathcode`!wird definiert , \exclamdass dasselbe Ergebnis erzeugt wird, das !im Mathematikmodus erzeugt würde, wenn wir es nicht neu definiert hätten.


Wenn Sie nicht vorhaben, in Ihren Indizes nur ASCII-Buchstaben zu verwenden, sollten Sie \mathrmin ändern \textnormal, damit auch Buchstaben mit Akzent zulässig sind (und Leerzeichen respektiert werden).

Antwort2

Normalerweise verwende ich etwa Folgendes:

\newcommand{\mstr}[1]   {\ensuremath{\mathit{#1}}}
\newcommand{\subs}[2]   {#1\mstr{_#2}}

Natürlich könntest du es z.B. \mathitin ändern \mathrm. Dann verwende es wie

\subs{x}{y}

verwandte Informationen