
Considere $a \triangleright b$
e $a \overline{\triangleright} b$
. Eles se comportam de maneira completamente diferente em termos de espaçamento:
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}
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 \mathchardef
primitivos (para sequências de controle) ou \mathcode
(para códigos nativos). O \mathode
de a
e b
sã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 Ord
em 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
, \mathclose
e \mathpunct
que 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 \overline
que 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 \mathbin
ou \mathrel
correspondentemente; se o tipo não puder ser determinado, ele será definido como \mathord
.