왜 \overline이 간격을 엉망으로 만들까요?

왜 \overline이 간격을 엉망으로 만들까요?

$a \triangleright b$및 을 고려하십시오 $a \overline{\triangleright} b$. 간격 측면에서 완전히 다르게 동작합니다.

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

왜? 이 문제를 어떻게 해결하나요?

답변1

이 명령 \triangleright은 소위 이진 연산자입니다. LaTeX는 이 이진 연산자를 앞과 뒤에 작은 수평 공간이 설정되는 방식으로 처리합니다. 여기서 일어난 일은 이 기능을 숨기는 다른 명령에 이 명령을 래핑했다는 것입니다. 그냥 시도해봐도 같은 효과를 볼 수 있습니다 $a+b{+}c$.

따라서 다음 명령으로 구성을 래핑하여 구성을 다시 이진 연산자로 만들어야 합니다 \mathbin.

 % arara: pdflatex

\documentclass{article}
\newcommand*{\oltriangleright}{\mathbin{\overline\triangleright}}

\begin{document}
$a \triangleright b$ and $a \oltriangleright b$
\end{document}

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


이 기호는 무엇을 의미하나요? 참고할만한게 있으면 유니코드로 추천해드릴수도 있겠네요.

답변2

수학 조판의 각 개체에는 0=Ord, 1=Op, 2=Bin, 3=Rel, 4=Open, 5=Close, 6=Punct 클래스 중 하나가 있습니다. 이 클래스는 수평 공간(오브젝트 사이에 자동으로 삽입됨)에 영향을 줍니다. 수학 조판의 기본 개체는 일반적으로 \mathchardef기본(제어 시퀀스의 경우) 또는 \mathcode(네이티브 코드의 경우)로 선언됩니다. of \mathode및는 Ord 클래스로 선언되고 Triangleright는 다음과 같이 선언됩니다 a.b

\mathchardef\triangleright="212E

이는 클래스=2=Bin, 패밀리=1, 글꼴 코드=2E를 의미합니다. (현재로서는) 가장 중요한 것은 Bin 클래스입니다. 시퀀스 a\triangleright b는 "Ord Bin Ord"이며 이는 올바른 수평 공간에 영향을 줍니다. 상황은 더 복잡하지만 기본 원리는 여기에 나와 있습니다.

이제 가장 중요한 것은 중괄호(예: {\triangleright}) 또는 기타 구성(예: \overline{\triangleright})이 Ord 클래스에 구성된 객체를 생성한다는 사실입니다. Ord Ord Ord예를 들어 보면 사이에 공백이 삽입되지 않습니다 . 그러나 주어진 클래스의 객체를 생성하는 클래스 재입력 프리미티브 \mathord, \mathop, \mathbin, \mathrel, \mathopen및 가 있습니다 . 그래서\mathclose\mathpunct

a \mathbin{\overline{\triangleright}} b

"Ord Bin Ord" 시퀀스를 제공하며 이는 올바른 간격에 영향을 줍니다.

답변3

\overline다음과 동일한 인프라를 사용하는 수정된 버전을 사용하여 올바른 간격을 얻을 수 있습니다 \overset.

\documentclass{article}
\usepackage{amsmath,amssymb}

\makeatletter
\DeclareRobustCommand{\coverline}[1]{% clever overline
  \binrel@{#1}\binrel@@{\overline{#1}}%
}
\makeatother

\begin{document}

$a\coverline{<}b$

$a<b$

$a\coverline{\triangleright} b$

$a\triangleright b$

\end{document}

명령어는 \binrel@인수가 이진 연산인지 관계 기호인지 결정하고 그에 따라 \binrel@@의미를 설정합니다 . 유형을 결정할 수 없는 경우 로 설정됩니다 .\mathbin\mathrel\mathord

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

관련 정보