Warum bringt \overline die Abstände durcheinander?

Warum bringt \overline die Abstände durcheinander?

Betrachten Sie $a \triangleright b$und $a \overline{\triangleright} b$. Sie verhalten sich hinsichtlich des Abstands völlig unterschiedlich:

Bildbeschreibung hier eingeben

Warum? Wie behebe ich das?

Antwort1

Der Befehl \trianglerightist ein sogenannter binärer Operator. LaTeX behandelt diese binären Operatoren so, dass davor und danach ein kleiner horizontaler Abstand gesetzt wird. Was hier passiert ist, ist, dass Sie diesen Befehl in einen anderen Befehl eingebunden haben, der diese Funktion verbirgt. Sie können den gleichen Effekt sehen, wenn Sie einfach versuchen $a+b{+}c$.

Daher müssen Sie Ihre Konstruktion wieder in einen binären Operator umwandeln, indem Sie sie in den Befehl einschließen \mathbin:

 % arara: pdflatex

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

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

Bildbeschreibung hier eingeben


Was bedeutet dieses Symbol? Wenn Sie eine Referenz haben, können Sie es dem Unicode empfehlen.

Antwort2

Jedes Objekt im mathematischen Satz hat eine der Klassen: 0=Ord, 1=Op, 2=Bin, 3=Rel, 4=Open, 5=Close, 6=Punct. Diese Klasse beeinflusst die horizontalen Leerzeichen (die automatisch zwischen Objekten eingefügt werden). Die elementaren Objekte im mathematischen Satz werden normalerweise als \mathchardefprimitive (für Steuersequenzen) oder \mathcode(für native Codes) deklariert. Die \mathodevon aund bwerden als Klasse Ord deklariert und triangleright wird als deklariert

\mathchardef\triangleright="212E

was bedeutet, class=2=Bin, family=1, fontcode=2E. Das Wichtigste (im Moment) ist die Klasse Bin. Die Sequenz a\triangleright bist „Ord Bin Ord“ und dies beeinflusst die rechten horizontalen Abstände. Die Dinge sind komplizierter, aber das Grundprinzip wird hier gezeigt.

Das Wichtigste ist nun die Tatsache, dass Klammern (wie {\triangleright}) oder andere Konstruktionen (wie \overline{\triangleright}) das zusammengesetzte Objekt in der Klasse Ord erzeugen. Ord Ord OrdIn unserem Beispiel haben wir also und dies fügt keine Leerzeichen dazwischen ein. Aber es gibt Klassenneutypisierungsprimitive \mathord, \mathop, \mathbin, \mathrel, \mathopen, \mathcloseund \mathpunctdie das Objekt der gegebenen Klasse erzeugen. Also

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

ergibt die Reihenfolge „Ord Bin Ord“ und dies beeinflusst die richtigen Abstände.

Antwort3

Sie können den richtigen Abstand mit einer geänderten Version von erreichen, \overlinedie dieselbe Infrastruktur verwendet wie \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}

Die Anweisung \binrel@ermittelt, ob das Argument eine binäre Operation oder ein Relationssymbol ist und setzt entsprechend \binrel@@auf \mathbinoder \mathrel; wenn der Typ nicht ermittelt werden kann, wird es auf gesetzt \mathord.

Bildbeschreibung hier eingeben

verwandte Informationen