為什麼 \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}

在此輸入影像描述


這個符號是什麼意思?如果你有一些參考,你可能會推薦給unicode。

答案2

數學排版中的每個物件都有以下類別之一:0=Ord、1=Op、2=Bin、3=Rel、4=Open、5=Close、6=Punct。此類影響水平空間(自動插入到物件之間)。數學排版中的基本物件通常由原始\mathchardef語言(對於控制序列)或\mathcode(對於本機程式碼)聲明。 of\mathode和被宣告為 Ord 類abtriangleright 被宣告為

\mathchardef\triangleright="212E

這表示class=2=Bin,family=1,fontcode=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@@為mean\mathbin\mathrel;如果無法確定類型,則將其設為\mathord

在此輸入影像描述

相關內容