Я часто применяю среду индексации в математическом режиме, чтобы, например, назначить свойства материалов, $\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
это его шестнадцатеричное представление и \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}