amsmath를 사용하여 수직 글꼴로 수학 모드에서 아래 첨자를 전체적으로 넣는 방법은 무엇입니까?

amsmath를 사용하여 수직 글꼴로 수학 모드에서 아래 첨자를 전체적으로 넣는 방법은 무엇입니까?

저는 종종 수학 모드에서 아래 첨자 환경을 적용하여 예를 들어 재료를 재료 속성 등에 할당합니다. $\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}

여기에 이미지 설명을 입력하세요

문자에 \mathcode32768( "800016진수이며 이상한 일을 하는 것에 \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}

관련 정보