它們中的 fsSelection value 和 macStyle value 分別用作指定這個字體的樣式鏈接和標記這個字體的樣式。如果不用 AFDKO 中的 ttx 或 otfcc,一般的字體編輯程序中只要你在改打勾的地方打勾,該選擇的地方選擇正確,都是不需要操心這兩個表的。
SF 的問題
首先它沒有 Preferred Family 和 Preferred Subfamily,而將其直接寫在 Family 和 Subfamily 中,Win32 程序字體選擇會出錯。
其次它的 fsSelection value 和 macStyle value 都沒有怎麼填寫,字體調用會出錯。
然而 SF 本來就是 Apple 的私有字體,只用保證在 macOS 上的兼容性就好了啊。
—— 2017/4/22 ————
補
Windows 和 macOS 的字體調用方式本來就不一致。
簡單來說,Windows 嚴格依照字體內部信息調用,Win32 程序的 UI 通常只需要兩種字重、正體和斜體,並依靠 name 表中 Family 相同的多個字體的 macStyle value 識別、fsSelection value 鏈接。於是你就可以輕輕鬆鬆地使用加粗 (B)和傾斜按鈕 (I) 輕鬆切換樣式了。Windows 根本還是考慮實用性的,Regular, Italic, Bold 和 Bold Italic 這四個樣式能滿足用戶最基本的要求,表示強調、引用等,一般情況下,何必像 macOS 那樣(例如 Pages),一個字族,下面那麼多字重,一般用戶怎麼選擇的過來,需要用到這麼多字重的還會用 Pages 嗎?
Windows 適用字體的 macStyle value 和 fsSelection value 都好好地填寫,反觀某家公司,清一色的
&
&
是誰不按標準呢?
思源黑體也曾有過類似的問題,但之後在思源宋體中更正過來了,這也是一種態度的表現吧。
在忽略版權的情況下修改 SF 字體
這裡用四個字體來舉例子:SF Compact Text Regular, Italic, Bold, Light Italic,提取自 macOS。
name 表的修改
這是四個字體的 name 表節選:
SF Compact Text Regular
Family: .SF Compact Text
Subfamily: Regular
Full Name: .SF Compact Text Regular
SF Compact Text Italic
Family: .SF Compact Text
Subfamily: Italic
Full Name: .SF Compact Text Italic
SF Compact Text Bold
Family: .SF Compact Text
Subfamily: Bold
Full Name: .SF Compact Text Bold
SF Compact Text Light Italic
Family: .SF Compact Text
Subfamily: Light Italic
Full Name: .SF Compact Text Italic
我們需要將其修改為(可以使用 ttx, otfcc 和 ttfname 以及各類字體編輯程序)
SF Compact Text Regular
Family: SF Compact Text
Subfamily: Regular
Full Name: SF Compact Text Regular
// 或添加:
Preferred Family: SF Compact Text
Preferred Subfamily: Regular
SF Compact Text Italic
Family: SF Compact Text
Subfamily: Italic
Full Name: SF Compact Text Italic
// 或添加:
Preferred Family: SF Compact Text
Preferred Subfamily: Italic
SF Compact Text Bold
Family: SF Compact Text
Subfamily: Bold
Full Name: SF Compact Text Bold
// 或添加:
Preferred Family: SF Compact Text
Preferred Subfamily: Bold
SF Compact Text Light Italic
Family: SF Compact Text Light
Subfamily: Italic // 或 Light Italic
Full Name: SF Compact Text Light Italic
Preferred Family: SF Compact Text
Preferred Subfamily: Light Italic
Regular 的 Full Name 末尾可以選擇添加 Regular,不影響。
請注意,非常規或粗體的字重,一定要在 Family 後添加字重名,否則會導致許多程序多字重的隱藏,例如 Word,發現字體列表中該字體只有一種字重;Subfamily 只要 Family 和常規或粗體的字重的 Family 不一樣可以再次添加字重信息;必須添加 Preferred Family 和 Preferred Subfamily。
OS/2 和 head 表
1. 如果你使用的是 FontCreator、FontLab Studio 和 FontForge 等,只需要在涉及粗體、斜體的複選框上正確地打勾即可。
牽涉到 head.macStyle、OS/2.fsSelection 以及 name table,這幾個數據差一點就無法安裝或者正確識別。
(有更新)
我插句嘴,其實從這個問題上就能看出來兩家公司是如何思考問題的。Subfamily 從今天來看雖然是歷史遺留問題,但它作為一個發布了幾十年並且已經貫徹到幾乎所有第三方軟體里的標準,就算設計理念過時(只有那 4 個值能用),也不是隨便能改的。微軟在這個問題上就是一種負責任的做法:只要成了標準,再爛也得兼容它。Win 10 也一樣,保留以前所有的 public API,這是一種負責任的表現。Java 的 PriorityQueue 的風格和其他數據結構格格不入,被碼農罵成了狗,但 Oracle 敢改嗎?不敢。標準一旦成為標準就很難改了。反觀蘋果,對標準二字看不到一丁點尊重。自家充電插頭年年改,改得消費者苦不堪言就不提了,這屬於內政。但在軟體上呢?Swift 每過一段時間所有 public API 甚至語法就要大改一通,改完之後以前的程序統統過不了編譯,你這讓哪家公司敢把自己的大型項目寄托在 Swift 上?還號稱強大到「能寫操作系統」,真是笑話。在字體問題上,這家公司放著 Preferred Subfamily 不用,對 Subfamily 亂寫一氣,肆意踐踏標準,真把工業標準當充電插頭啦?反倒是自家內部的 private API,譬如 iTunes 的 Coverflow,這麼多年一字未改,非常耐人尋味。
其他答案引用了兩家公司最新的字體 Spec 來反駁我。蘋果發布的標準朝令夕改,暫且不談;而且蘋果那玩意不叫 OT Spec,叫它 Apple Spec 還差不多,照這個 Spec 做出來的字體除了蘋果其他平台一概不兼容。微軟的 OT Spec 這次改動很大,估計是在去年引入 Variable Font 的時候改的。現在裡面有關 Subfamily 和 Preferred Subfamily(現在叫 Typographic Subfamily)的描述變了,以前的描述是類似「由於歷史原因,Subfamily 只能填寫固定的值,與 style linking 對應」的話。但微軟在 Subfamily 這個問題上的立場沒有變化。我們先來看現在微軟對 Family 欄位的描述:
Font Family name. Up to four fonts can share the Font Family name, forming a font style linking group (regular, italic, bold, bold italic — as defined by OS/2.fsSelection bit settings).
這是什麼意思?這表明該欄位是專門用於那四個值的。要知道 Family 欄位和 Subfamily 是綁在一起的,Family 有這個限制,Subfamily 就沒有這個限制了?我們跳過微軟對 Subfamily 看似自相矛盾的描述(This is assumed to address style (italic, oblique) and weight (light, bold, black, etc.).),接著往後看:
A font with no particular differences in weight or style (e.g. medium weight, not italic and fsSelection bit 6 set) should have the string 「Regular」 stored in this position.
Font Subfamily name. The Font Subfamily name distiguishes the font in a group with the same Font Family name (name ID 1). This is assumed to address style (italic, oblique) and weight (light, bold, black, etc.).
倒是蘋果自家標準里明確說了Preferred Subfamily僅僅是Windows的地方標準:
Font Names Table
Preferred Family. In Windows, the Family name is displayed in the font menu, and the Subfamily name is presented as the Style name.