수학이 \mathit처럼 동작하도록 만들기

수학이 \mathit처럼 동작하도록 만들기

나는 술어, 용어, 기능에 대해 설명적인 이름을 자주 사용합니다. 그러나 커닝이 부족하여 보기에 좋지 않습니다.

예를 들어

$offer = surface \times force(now)$

다음과 같이 렌더링

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

따라서 이를 피하려면 \mathit.

$\mathit{offer = surface \times force(now)}$

이는 다음과 같이 렌더링됩니다.

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

틀림없이 보기에도 좋고 읽기도 더 쉽습니다.

m을 입력하는 것을 피하기 위해 \mathit다음을 정의했습니다.

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}

그리고

\DeclareMathSymbol{a}{\mathalpha}{italics}{`a}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`z}
\DeclareMathSymbol{A}{\mathalpha}{italics}{`A}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`Z}

질문)

이것이 "올바른" 방법입니까?

이 접근 방식의 단점/단점은 무엇입니까? (표준 동작으로 돌아가는 데 사용할 수 있으며 \mathnormal, 예를 들어 제품의 경우 f합자 를 방지하기 위해 i사용해야 한다는 것을 알고 있습니다.)f{}i

답변1

이는 여러 가지 요인에 따라 달라집니다. 수학 공식이 다음과 같다면모두그렇게 하면 문자의 수학 코드를 변경하는 것이 타당할 수 있습니다. 하지만 그렇게 하지 않는 것이 좋습니다.

의미론적 마크업을 선호합니다. 여러 글자로 된 식별자는 변수나 함수를 나타냅니다. 두 개의 명령을 정의 \var하고 다음 \func과 같이 수식을 입력하세요.

\[
\var{offer}=\var{surface}\cdot\func{force}(\var{now})
\]

(사용하지 마십시오 \times. 제발!) 이제 필요한 변수와 함수에 대한 표현을 자유롭게 선택할 수 있습니다.

\newcommand{\var}[1]{\mathit{#1}}
\newcommand{\func}[1]{\mathit{#1}}

당신의 감독자나 저널 편집자가 "좋습니다. 하지만 기능은 수직 문자로 조판해야 합니다"라고 말하면 당신은 "잠깐만요"라고 대답하고 두 번째 줄을 다음으로 변경합니다.

\newcommand{\func}[1]{\mathrm{#1}}

그리고 다시 컴파일하세요. 수학코드를 바꿔도 마찬가지일까요?

타자가 더 어렵나요? 나는 그렇게 생각하지 않습니다. 특히 당신이 몇 가지 속기를 정의할 수 있는 Emacs 전문가라면 더욱 그렇습니다.


코드가 반복되기 때문에 모든 문자의 수학 코드를 변경하는 것은 매우 쉽습니다. 수학 가족을 낭비하지 않으려면 \mathitwith를 다시 선언하는 것을 잊지 마십시오 .\DeclareSymbolFontAlphabet

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}

\makeatletter
\count@=`a \advance\count@\m@ne
\@whilenum{\count@<`z}\do{%
  \advance\count@\@ne
  \begingroup\lccode`A=\count@
  \lowercase{\endgroup
    \DeclareMathSymbol{A}{\mathalpha}{italics}{`A}%
  }%
}
\count@=`A \advance\count@\m@ne
\@whilenum{\count@<`Z}\do{%
  \advance\count@\@ne
  \begingroup\lccode`A=\count@
  \lowercase{\endgroup
    \DeclareMathSymbol{A}{\mathalpha}{italics}{`A}%
  }%
}
\makeatother

루프는 다음을 사용하여 단순화할 수 있습니다 expl3.

\usepackage{expl3}

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}

\ExplSyntaxOn
\int_step_inline:nnnn { `A } { 1 } { `Z }
 {
  \group_begin:
  \char_set_lccode:nn { `A } { #1 }
  \char_set_lccode:nn { `B } { #1 + 32 }
  \tl_to_lowercase:n
   {
    \group_end:
    \DeclareMathSymbol{A}{\mathalpha}{italics}{`A}
    \DeclareMathSymbol{B}{\mathalpha}{italics}{`B}
   }
 }
\ExplSyntaxOff

이 트릭을 사용해야 하는 주요 문제 \lowercase는 이것이 문자 코드를 알고 있는 문자 토큰을 생성하는 유일한 방법이라는 것입니다.

의 최신 버전 expl3(2015-09-09 이후 출시) \lowercase에서는 \char_generate:nn.

\documentclass{article}
\usepackage{expl3}

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}

\ExplSyntaxOn
\int_step_inline:nnnn { `A } { 1 } { `Z }
 {
  \exp_args:Nf \DeclareMathSymbol{\char_generate:nn{#1}{11}}{\mathalpha}{italics}{#1}
 }
\int_step_inline:nnnn { `a } { 1 } { `z }
 {
  \exp_args:Nf \DeclareMathSymbol{\char_generate:nn{#1}{11}}{\mathalpha}{italics}{#1}
 }
\ExplSyntaxOff

\begin{document}

\[
offer=surface\cdot force(now)
\]

\end{document}

답변2

수학 모드에서 문자를 전역적으로 재할당하는 것이 좋지 않은 이유는 다른 답변과 의견에서 언급되었습니다. 하지만 이것이 정말로 필요하다면 다음과 같이 할 수 있습니다.

\everymath{\it}\everydisplay{\it}

문서의 시작 부분에. 숫자를 로마 스타일로 유지해야 하는 경우 다음을 설정할 수 있습니다.

\def\mathcodes#1{\mathcode`#1=\numexpr\mathcode`#1-"7000\relax 
   \ifx#10\else\expandafter\mathcodes\fi}
\mathcodes1234567890

이는 예를 들어 다음을 의미합니다.

\documentclass[12pt]{article}
\everymath{\it}\everydisplay{\it}
\def\mathcodes#1{\mathcode`#1=\numexpr\mathcode`#1-"7000\relax 
   \ifx#10\else\expandafter\mathcodes\fi}
\mathcodes1234567890
\begin{document}

$offer = surface \times force(now) + 1$

\end{document}

일반 TeX를 사용하는 경우 또는 \itvariables뒤에 제공되는 명령을 사용할 수 있습니다 . 이 명령은 모든 문자의 수학 코드를 텍스트 기울임꼴 수학 계열(기본값)로 설정합니다. 예를 들어:\input ams-math\input opmac

\input ams-math \itvariables

$offer = surface \times force(now) + 2$

\bye

답변3

나는 마크업을 여기의 의미와 일치시키고 각 식별자를 별도로 마크업하는 것이 훨씬 낫다는 egreg의 의견에 동의합니다. TeX의 수학 마크업과 기본 글꼴은 인접한 문자가 일반적으로 묵시적인 곱셈 또는 연결 연산자를 사용하여 별도의 변수라는 아이디어를 바탕으로 설계되었습니다.

그러나 확신이 없고 기본적으로 텍스트 기울임꼴 글꼴을 사용하려는 경우 이를 위해 새 수학 글꼴을 할당할 필요가 없으며 이미 사용하도록 설정되어 있으므로 \mathit암시된 그룹화를 벗어나도록 하면 됩니다 \mathit .

\documentclass{article}


\let\v\mathit
\begin{document}


$\mathit{offer = surface \times force(now)}$



$\v{offer} = \v{surface} \times \v{force}(\v{now})$%%%USE THIS

\everymath{\mathit{\xdef\tmp{\fam\the\fam\relax}}\tmp}


$offer = surface \times force(now)$

\end{document}

관련 정보