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, \exclam
falls 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}
Wenn einem Zeichen die Zahl 32768 zugewiesen wird \mathcode
( "8000
das ist die Hexadezimalzahl dafür und \string
dient als Vorsichtsmaßnahme gegen babel
seltsame 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, \gdef
wann 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 , \exclam
dass 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 \mathrm
in ä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. \mathit
in ändern \mathrm
. Dann verwende es wie
\subs{x}{y}