私はよく、数式モードで下付き文字環境を適用して、たとえば材料を材料特性に割り当てたり、$\eta_{oil}$
など$\lambda_{air}$
します。あまり数学的ではありませんが、私はエンジニアですから ;-)
amsmath パッケージを適用しているので、下付き文字は他のほとんどの文字と同様に斜体になります。これは望ましくありません。もちろん、これをローカルで変更する方法は多数あります ($\eta_{\mathrm{oil}}$
最も適切と思われる方法) が、これは面倒です。
では、これに対処するための、優れた、洗練された TeXy の方法はありますか? おそらく、次のようなものを適用するのでしょうか\DeclareMathSomething{}{}{}{}
?
の使用の 99% は変数に関連していないため、これをグローバルに実行したいと思います$_{}$
。また、添え字が変数であるごくわずかな状況でも、引き続き使用できます$_{\mathnormal{}}$
...
すべてのご提案に感謝します。
答え1
これには別の文字を使用します。ここでは、!
直立下付き文字に を使用します (数式モードで\exclam
必要な場合はそれ自体として定義します)。!
\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}
文字に\mathcode
32768 ("8000
は 16 進数で、奇妙な動作をしない\string
ようにするための予防措置ですbabel
) が指定されると、奇妙な動作をします。テキスト モードでは正常に動作しますが、数式モードではマクロのように、より正確にはアクティブ文字のように動作します。
アクティブな文字としての定義が!
存在する必要があります。トリック
\begingroup\lccode`~=`!
\lowercase{\endgroup\def~}#1{_{\mathrm{#1}}}
と同じです
{\catcode`!=\active \gdef!#1{_{\mathrm{#1}}}
しかし、私は\gdef
可能な限りそれを避けることを好みます。したがって、TeX は!
数式モードで を見つけると、引数を探してそれを に変換します_{\mathrm{<argument>}}
。これはまさにあなたが求めているものです。
最後に、再定義しなかった場合に数式モードで生成されるものと同じものを生成するように\mathchardef\exclam=\mathcode`!
定義します。\exclam
!
下付き文字に ASCII 文字のみを使用する予定がない場合は、\mathrm
を に変更して\textnormal
、アクセント付き文字も使用できるようにします (スペースは考慮されます)。
答え2
私は通常、次のようなものを使います。
\newcommand{\mstr}[1] {\ensuremath{\mathit{#1}}}
\newcommand{\subs}[2] {#1\mstr{_#2}}
もちろん、例えば\mathit
に変更することもできます\mathrm
。そして、次のように使用します。
\subs{x}{y}