為什麼 Mac 下漢字詞句輸入西文 Helvetica 字體會整行下沉? | 知乎問答精選

 

A-A+

為什麼 Mac 下漢字詞句輸入西文 Helvetica 字體會整行下沉?

2018年11月30日 知乎問答精選 暫無評論 閱讀 7 ℃ 次

【梁海的回答(53票)】:

  • 這不是 Helvetica 的問題。

    這是 Helvetica 與華文黑體混排時出現的問題——一個巴掌拍不響。

  • 各種西文字體和各種中文字體搭配經常都會遭遇這個問題。你的觀察不全面。和輸入法也確實無關,只和字體與排版環境有關。

  • 首先,你不懂一個基本概念:字體回退(font fallback)。

    你選定的字體是 Helvetica,但因為 Helvetica 不支持漢字,所以排版環境遇到漢字字符時會將字體回退到支持漢字的字體。你截圖裡的漢字展現的就是 OS X 的默認簡體中文字體,黑體-簡(以下稱作「華文黑體」[1])。所以,在你的同一行文本裡,西文是用 Helvetica 顯示的,而中文是用華文黑體顯示的。

  • 至於為什麼會有行高跳動的問題,粗略地說:

    因為 Pages 之類文字處理工具的「X倍行距」(以及 OS X / iOS 中的許多軟件介面文本)的行距都不是直接相對於字號指定的,它是基於字體內部存儲的「默認行高」(這個措辭是我自己攢的,不知有沒有更確切的名字)等信息來指定的(比如「單倍行距」就是單倍的默認行高)。而 Helvetica 的默認行高比華文黑體大。於是,Helvetica 會把一行「撐起來」——當一行文本中只有華文黑體時,行高較小,當出現 Helvetica 時,行高會被 Helvetica 撐大——於是你那第二行漢字就下沉了。

  • 解決方法,以 Pages 為例:

    指定「精確」行高,不要用「X倍行距」這種基於字體默認行高的手法。

  • 如果略為詳細地解釋這個問題,那麼(普通用戶可忽略以下較為專業的內容):

    • OS X 的排版環境查詢字體的默認行高時,會從 TrueType/OpenType 字體的 hhea 表查詢 ascent, descent 以及 lineGap 這三個數值。很明顯,這三個數值分別指的是字體上端相對於基線的高度、字體下端相對於基線的高度、以及行間距。
    • 三個數值加起來再除以字體的 UPM(head.unitsPerEm)就是默認行高的比例。
    • 比如一個比較正常的現代中文字體可能會是

      head.unitsPerEm = 1000hhea.ascent = 880hhea.descent = -120hhea.lineGap = 500

      於是這個字體的默認行高就是 1.5 倍字號。

    • Helvetica 的默認行高是 1.2 倍,而華文黑體的是莫名其妙的 1.03 倍。於是 Helvetica 在排版環境沒有明確指定行高的時候就比華文黑體多佔用約 1/5 的縱向空間。
    • 另外,從 hhea.ascent, hhea.descent 二者與 head.unitsPerEm 的關係以及其他一些信息還可計算出基線的高度。而 Helvetica 和華文黑體的基線高度也不一樣,這也影響了用這兩種字體顯示的文本之間的對齊關係。其實即使兩種字體的默認行高一致,因為基線高度的差異依舊會有一方把行高頂起來。

[1] 黑體-簡與華文黑體的關係詳見:OS X 提供了哪些中文黑體?

標籤:-輸入法 -Mac -OSX應用 -OSX -中文輸入法


相關資源:





給我留言