使用昭源字形輸入省略號(…)或破折號(—)時,某些軟件輸出的字形可能會跟使用者預期有所出入。這裏解釋一下本字體對這兩個字符的處理方法。
背景
電腦從最初的純文字介面發展至現在的圖形介面,由只支援英文到現在作業系統支援多國語言,經歷幾番變遷。
初期,囿於處理器運算速度等技術因素,純文字作業系統介面的文數字,每個字元所佔用的字寬是相同的,這種特性稱為「等寬」(fixed
width,又稱 monospaced
)。但我們知道,除非是應用在着重於數位對齊之類場合(例如表格中的數字),否則印在書刊上的內文字體通常不會每個字都是同等寬度,例如
“l” 和 “m” 的寬度就不會相同。這種字元因着不同形狀而有不同寬度的特性就稱為「調和字寬」(proportional width,或稱「比例字寬」)。
中文字是方塊字,其特性固然仍然屬於等寬,但與英數文字在寬度上的需求並不一樣。中文系統長久以來的習慣是以正方框安置中文字,英數字則寬度減半。例如若中文字佔用
16×16 點,英文字就佔 8×16 點。兩個英數文字等如一個中文字的寬度,於是又產生以中文字的寬度為準、將佔半寬 (half width)
的字稱為「半形」、將佔全寬 (full width)
的字稱為「全形」的概念。雖然出現「調和字寬」英數字之後「半形」的稱呼未必十分貼切,但習慣上仍然繼續使用。而在這些系統,除了「半形英數字」,系統也會另外提供一套屬「全形」的英文、數字和標點符號。畢竟以逗號為例,英文的「,」和繁體中文的「,」不僅在字寬上要求不同,連符號的擺位也不相同——英文貼在基線,中文則須置中,所以不能共用同一個碼位。
一個字到底其字距是「等寬」還是「調和字寬」屬於字型之別,不是碼位之別。一篇英文文章,只須利用軟件由等寬字型切換至調和字距字型,即可得到想要的效果。
但在大多數情況下,英數和標點文字的「半形/調和字寬」和「全形」則是碼位之別,因為英文版本使用、一般屬於「調和字寬(或等寬)」的標點符號跟中文所使用的全形標點符號的碼位是分開的。也就是説,使用者將一篇英文文章的字型改為中文字型,當中的逗號、問號等標點也不會變成全字寬並居中的版本,情況就跟 Ab1 一般不會因為切換字體就變成 Ab1 一樣。否則,可以想像中英混排時的麻煩就會大大增加。
英文版本 | 英文版本碼位 | 中文版本 | 中文版本碼位 |
---|
, | U+002C | , | U+FF0C |
( | U+0028 | ( | U+FF08 |
) | U+0029 | ) | U+FF09 |
: | U+003A | : | U+FF1A |
; | U+003B | ; | U+FF1B |
既然兩組符號碼位不同,但鍵盤上的符號只得一種,到底輸入時會出現哪一款符號,就取決於作業系統的處理方法。通常是使用者切換到中文輸入法並開啟「全形」模式,所輸入的標點和英數才會是佔用全字寬的碼位。
問題
省略號(…)和破折號(—)的問題就在於此:跟逗號、引號、冒號等字符不同,Unicode
並沒有為這兩個符號和一些中英文位置不同的符號分別編配符合西文使用習慣(調和或定距字寬、與英文字對齊者,下稱「英文版本」)和符合中文使用習慣(全字寬、對齊中文字中線者,下稱「中文版本」)的碼位:
英文版本 | 英文版本碼位 | 中文版本 | 中文版本碼位 |
---|
… | U+2026 | … | 與英文版本相同 |
— | U+2014 | — | 與英文版本相同 |
‘ | U+2018 | ‘ | 與英文版本相同 |
’ | U+2019 | ’ | 與英文版本相同 |
“ | U+201C | “ | 與英文版本相同 |
” | U+201D | ” | 與英文版本相同 |
可見省略號(…)的 Unicode 編碼就是 U+2026,破折號(—)就是 U+2014,無所謂中英之分。
而正如上表,其實同樣問題也出現在西式引號「“」「”」,無論是調和還是全形版本,其字碼都是 U+201C 和 U+201D。只是因為繁體中文的引號習慣使用與西文不同的
「」『』 款式,故問題不大。反之,簡體中文的省略號標準上是貼齊底線,即使屬全形字寬,與英文混排看起來的效果也未必如繁體中文版本般礙眼。
既然碼位相同,中文字體設計者究竟要為這一碼位提供一個符合中文排版使用的「…」抑或符合英文排版使用的「…
」,就成為一個難題。多數商業中文字體都採取「捨英取中」的做法,缺點就是這些字體中有關字樣變得不適宜用於英文排版。在省略號的情況,折衷做法就是改用三個點號 (U+002E) 代替,又或者在中英混排時英文部份時改用英文字體。
思源/昭源字體的做法
與一般商業字體不同,思源字體嘗試利用 OpenType 的字體功能去更好地解決這個歷史遺留下來的問題,而昭源字體也繼承了這些特性。了解這些特性,使用本字體調用相關字符就可以更加得心應手。
省略號「…」的處理方法
對於省略號「…」(U+2026),思源/昭源字體的設定是:預設會輸出中文版本的「…」號,當將語言設為拉丁語系則會輸出英文版本字圖。另外,字符還具備
“pwid” (Proportional Widths) 和 “fwid” (Full Widths) 替代字元功能。因此,假如想調用其「英文版本」,使用者可以通過軟件將段落語言設為英文,或者開啟
OpenType 的 “pwid” 功能。
上面表格中可以在同一碼位按中文、英文版本需要輸出不同字樣,就是利用了 pwid 和 fwid 功能達成。
當然,假如軟件不支援,在英文語境也唯有退回到用三個點 (.) 代替。雖然不盡完美,但思源字體的做法已經讓支援相關 Opentype
功能的軟件有多一個選擇方案,比起只能輸出「中文版本」字圖的字型已屬進步。
破折號「—」的處理方法
至於破折號「—」(U+2014),思源/昭源字體的設定為:預設輸出英文版本的「—」號,將語言設為中文,則會輸出中文版本字圖。跟省略號「…」一樣,本字符亦提供
“pwid” (Proportional Widths) 和 “fwid” (Full Widths) 替代字元功能。
另外,本字元也配有 ccmp
特性,兩個或三個 U+2014 會自動轉換成相連版本,即「——」(等同 U+2E3A)和「———」(等同 U+2E3B)。有了這個設計,使用者即使設定了較寬字距,兩個或三個破折號仍然會連在一起,不會因為字距過寬而出現斷開的情況。
假如軟件不支援語言標籤或 OpenType 的 pwid、fwid 功能,要輸出中文版本的破折號也可以採用以下辦法:
- 使用 U+2015 (―)。其字圖和
ccmp
特性跟中文版本的 U+2014 完全相同。
- 直接使用 U+2E3A(⸺,佔兩字寬)或 U+2E3B(⸺,佔三字寬)。跟思源字體不同,昭源字體特別將這兩個字碼改為預設輸出中文版本字圖。
以前還有一個辦法,就是用兩個 U+2500(─)來得出肯定會是中線對齊和相連的字圖,因為這個字元原本是用作表格繪畫用途。不過,這個字元未必會隨着文字的橫直排而改變方向,所以並不建議當成破折號使用。
可以看到,思源字體對「…」(U+2026) 和「—」(U+2014)的預設取態剛好相反。由於昭源字體希望優先照顧繁體中文使用環境,本來也曾經嘗試將
U+2014 改為預設輸出中文版本。可是實際測試時卻發現有其他問題出現,而最大的問題是:假如連 U+2014 也變成預設輸出中文版本(即是跟
U+2015 一樣),在不支援 OpenType 功能(或相關功能支援不佳)的軟件就再也無法調用英文版本的 U+2014。經考慮之後,決定保留留原有思源字體的做法。至於
U+2E3A 和 U+2E3B,一來在英文相對沒那麼常見,二來這兩個碼位的英文字樣仍可通過疊加 U+2014 來取得,因而決定改為預設輸出中文版本。
軟件使用時注意事項
前面所講的是理論性質,以下用一些軟件作為示範,解釋實際輸入這些標點符號時的情況和須注意的地方:
Microsoft Word 2019 (Windows 版本)
Microsoft Word 2019 支援若干 OpenType
功能,使用者可以通過指定段落的語言,調用所選字體的 locl
功能,在本字體而言即是包括將省略號和破折號在中英版本之間切換。見下方示範影片:
上面所做的語言變更,背後實際就是調用了字體的 locl
功能。本來 locl
跟其他 OpenType 功能互不相屬,理應可以獨立開關或者預設開啟。不過,Microsoft Word 2019 及以前版本卻有一個
bug,就是 locl
功能必須在啟用了至少一個與之無關的 OpenType 功能才會自動打開。在直排場合,由於 Word
會自動開啟直排必須使用的 vert
功能(處理某些符號如括號、引號、破折號直排時的字符轉換),於是 locl
便順帶開啟,可正常運作。但在橫排場合,由於預設不會打開任何 OpenType 功能,locl
功能便同時失效。
要繞過這個 bug,使用者須在選取的段落手動開啟任何一個 OpenType 功能,方法是在﹝字型﹞→﹝進階﹞對話盒,隨便選用一個 OpenType
功能,例如將「連字」設為「僅標準」。
有關這個 bug 的相關參考可見:[1]
,[2]。
Adobe Photoshop CS6
Adobe Photoshop CS6 似乎不支援 OpenType 的 locl
功能,而且預設開啟 pwid
卻無法關閉或改成 fwid
。輸出結果如下:
- 破折號「—」必然是英文版本,無法改成中文版本。
- 省略號「…」理應輸出中文版本,卻因為預設開啟了
pwid
,結果變成輸出英文版本。
折衷辦法:
- 在 “Characters” 字元面板將語系設為某些語言(例如阿拉伯文 Arabic 或希伯來文 Hebrew)後,省略號「…」應可置中。
- 破折號「—」改為使用 U+2015(―)或直接使用雙字寬的 U+2E3A(⸺)。
以上所寫是借用他人電腦測試之結果,如有異議歡迎回報。又據知 Photoshop 自
Version 23 (MAX 2021) 起改用與 Google Chrome 等軟件相同的 Harfbuzz 引擎
,而且支援 CJK 語系,照理上述問題應已解決。
Adobe Illustrator CS6
同上。
LibreOffice Writer
測試版本:7.3.2.2
軟件對 OpenType 功能的支援良好。
Affinity Photo 及 Affinity Designer
版本:1.10.5.1342
軟件對 OpenType 功能的支援良好,只須在 “Typography Language” 中選用支援的語言即可調出正確的字符。
瀏覽器
本節專指昭源字體網頁字型版的使用方式,適合網頁開發者參考。
省略號
先看以下 HTML 代碼示範:
<p lang="en">1. I… I really don't know.</p>
<p lang="en">2. 我…我真的不知道。</p>
<p lang="en" style="font-feature-settings: 'pwid' on">3. I… I really don't know.</p>
<p lang="en" style="font-feature-settings: 'pwid' on">4. 我…我真的不知道。</p>
結果:
1. I… I really don’t know.
2. 我…我真的不知道。
3. I… I really don’t know.
4. 我…我真的不知道。
<p lang="zh">5. I… I really don't know.</p>
<p lang="zh">6. 我…我真的不知道。</p>
<p lang="zh" style="font-feature-settings: 'pwid' on">7. I… I really don't know.</p>
<p lang="zh" style="font-feature-settings: 'pwid' on">8. 我…我真的不知道。</p>
結果:
5. I… I really don’t know.
6. 我…我真的不知道。
7. I… I really don’t know.
8. 我…我真的不知道。
測試所得,使用 Blink 引擎的 Google Chrome, Microsoft Edge, Vivaldi, Brave 和使用 Gecko 引擎的 Mozilla Firefox 結果相同:
pwid
(proportional width 調和字寬) 預設為關閉。假如設定為開啟,無論如何都會顯示英文版本的「…」號(3, 4, 7, 8)。
- 當將語系設為
zh
(中文)時,除非開啟 pwid
,否則無論如何都會顯示中文版本的「…」號 (5, 6, 7, 8)。
- 當將語系設為
en
(英文)時,除非開啟 pwid
,否則瀏覽器會按照段落的前文後理,決定顯示中文還是英文版本的「…」號 (1, 2, 3,
4)。
破折號
破折號的處理比較簡單,只須靠一 lang
屬性即可切換,亦不受前文後理影響:
<p lang="en">I only eat two kinds of sashimi —— Salmon and Tuna.</p>
結果:
I only eat two kinds of sashimi —— Salmon and Tuna.
<p lang="zh">我只吃兩種刺身——三文魚和吞拿魚。</p>
結果:
我只吃兩種刺身——三文魚和吞拿魚。
順帶一提,兩個 U+2014 所組成的雙字寬破折號的連字功能可利用 ccmp
關上(當然這不會影響本來就佔兩個字寬的 U+2E3B)。
<p lang="zh" style="font-feature-settings: 'ccmp' off">我只吃兩種刺身——三文魚和吞拿魚。</p>
我只吃兩種刺身——三文魚和吞拿魚。