¿Por qué \overline altera el espaciado?

¿Por qué \overline altera el espaciado?

Considere $a \triangleright b$y $a \overline{\triangleright} b$. Se comportan completamente diferentes en términos de espaciado:

ingrese la descripción de la imagen aquí

¿Por qué? ¿Cómo arreglo eso?

Respuesta1

El comando \trianglerightes el llamado operador binario. LaTeX trata estos operadores binarios de manera que se establece un pequeño espacio horizontal antes y después de ellos. Lo que sucedió aquí es que envolvió este comando en algún otro comando que oculta esta característica. Puedes ver el mismo efecto si lo intentas $a+b{+}c$.

Por lo tanto, tendrás que volver a convertir tu construcción en un operador binario envolviéndola en el comando \mathbin:

 % arara: pdflatex

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

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

ingrese la descripción de la imagen aquí


¿Qué significa este símbolo? Si tiene alguna referencia, puede recomendarla a Unicode.

Respuesta2

Cada objeto en la composición tipográfica matemática tiene una de las clases: 0=Ord, 1=Op, 2=Bin, 3=Rel, 4=Open, 5=Close, 6=Punct. Esta clase influye en los espacios horizontales (insertados automáticamente entre objetos). Los objetos elementales en la composición tipográfica matemática suelen declararse mediante \mathchardefprimitivos (para secuencias de control) o \mathcode(para códigos nativos). Los \mathodede ay bse declaran como clase Ord y el triángulo derecho se declara como

\mathchardef\triangleright="212E

lo que significa clase=2=Bin, familia=1, código de fuente=2E. La más importante (por ahora) es la clase Bin. La secuencia a\triangleright bes "Ord Bin Ord" y esto influye en los espacios horizontales derechos. Las cosas son más complicadas, pero aquí se muestra el principio básico.

Ahora, lo más importante es el hecho de que las llaves (como {\triangleright}) u otras construcciones (como \overline{\triangleright}) crean el objeto compuesto en la clase Ord. Entonces, en nuestro ejemplo tenemos Ord Ord Ordy esto no inserta espacios entre ellos. Pero hay primitivas de reescritura de clases \mathord, \mathop, \mathbin, \mathrel, \mathopeny que generan el objeto de una clase determinada. Entonces\mathclose\mathpunct

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

da la secuencia "Ord Bin Ord" y esto influye en el espaciado correcto.

Respuesta3

Puede obtener el espaciado correcto utilizando una versión modificada \overlineque utiliza la misma infraestructura 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}

La instrucción \binrel@determina si el argumento es una operación binaria o un símbolo de relación y lo establece \binrel@@en significar \mathbino \mathrelen consecuencia; si no se puede determinar el tipo, se establece en \mathord.

ingrese la descripción de la imagen aquí

información relacionada