Por que \overline atrapalha o espaçamento?

Por que \overline atrapalha o espaçamento?

Considere $a \triangleright b$e $a \overline{\triangleright} b$. Eles se comportam de maneira completamente diferente em termos de espaçamento:

insira a descrição da imagem aqui

Por que? Como faço para corrigir isso?

Responder1

O comando \trianglerighté o chamado operador binário. O LaTeX trata esses operadores binários de uma forma que um pequeno espaço horizontal é definido antes e depois dele. O que aconteceu aqui é que você envolveu este comando em algum outro comando que oculta esse recurso. Você pode ver o mesmo efeito se apenas tentar $a+b{+}c$.

Portanto, você terá que transformar sua construção em um operador binário novamente, envolvendo-o no comando \mathbin:

 % arara: pdflatex

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

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

insira a descrição da imagem aqui


O que significa este símbolo? Se você tiver alguma referência, poderá recomendá-la ao unicode.

Responder2

Cada objeto na composição matemática possui uma das classes: 0=Ord, 1=Op, 2=Bin, 3=Rel, 4=Open, 5=Close, 6=Punct. Esta classe influencia os espaços horizontais (inseridos automaticamente entre os objetos). Os objetos elementares na composição matemática são normalmente declarados por \mathchardefprimitivos (para sequências de controle) ou \mathcode(para códigos nativos). O \mathodede ae bsão declarados como classe Ord e o triângulo direito é declarado como

\mathchardef\triangleright="212E

o que significa classe = 2 = Bin, família = 1, código de fonte = 2E. O mais importante (por enquanto) é a classe Bin. A sequência a\triangleright bé "Ord Bin Ord" e isso influencia os espaços horizontais corretos. As coisas são mais complicadas, mas o princípio básico é mostrado aqui.

Agora, o mais importante é o fato de colchetes (como {\triangleright}) ou outras construções (como \overline{\triangleright}) criarem o objeto composto na classe Ord. Então, temos Ord Ord Ordem nosso exemplo e isso não insere nenhum espaço entre eles. Mas existem primitivas de redigitação de classe \mathord, \mathop, \mathbin, \mathrel, \mathopen, \mathclosee \mathpunctque geram o objeto de determinada classe. Então

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

dá a sequência "Ord Bin Ord" e isso influencia o espaçamento correto.

Responder3

Você pode obter o espaçamento correto usando uma versão modificada \overlineque usa a mesma infraestrutura que \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}

A instrução \binrel@determina se o argumento é uma operação binária ou um símbolo de relação e define \binrel@@como média \mathbinou \mathrelcorrespondentemente; se o tipo não puder ser determinado, ele será definido como \mathord.

insira a descrição da imagem aqui

informação relacionada