名詞解釋與排印說明


CJK 排印相關術語與知識

本文件將詳細說明如何使用 Bambook 套件,提供高品質的垂直文字排版功能。

CJK 字體與造型差異

CJK 為電腦科學與資訊處理領域的術語,是中文(Chinese)、日文(Japanese)與韓文(Korean)三種語言的縮寫。在Unicode中將大部分相同的字型放置到同樣區塊中。在實務上Chinese還分為:正體中文,簡體中文。繁體中文還可根據地區習慣,簡單拆分成香港與台灣。

各地區與漢字存在「筆畫造型」各有差異。以下為思源黑體為例。在繁體中文版中,採用了台灣教育部⟪國字標準字體⟫,字體造型更偏向楷體;繁體中文版的分支,香港版則參考香港常用造型;簡體中文版則依造中國國家標準GB-18030《信息技術中文編碼字符集》;日文則參造JIS標準;韓文造型更貼近「刻本」傳承字形風格。

各地區漢字差異

既使皆為繁體中文黑體,造型上仍有所差異

既使皆為繁體中文黑體,造型上仍有所差異

本套件,僅針對CJK標點與排版習慣(如標點位置、通則……等)進行開發,不設計字型筆畫造型討論。

UTR #50

UTR #50 全稱是 Unicode Technical Report #50,一份Unicode文件,描述豎排(直排) 相關規範,以及拉丁相關規則,包括定義3種變化:U、R、Tu、Tr。

Bambook在規則上盡可能遵守UTR #50規範,以降低開發者門檻。

ISO 639-1

ISO 639-1 為國際標準化組織(ISO)所制定的一套Alpha-2語言代碼標準,用於標示世界上的主要語言。常搭配BCP 47組成語言標籤,例如:zh-TW

W3C

World Wide Web Consortium(全球資訊網協會),負責制定網頁技術標準之國際組織。包括HTML、CSS等標準。

Bambook在語法上多處也參考CSS中聲明方式。


CJK排印基本原則與Bambook使用技巧

本章僅針對常見垂直CJK文字排版原則說明,實際排版風格可能會依據地區、習慣,而有所差異,以下內容僅為參考,不具指導效力。請依據自身需求靈活調整。

文字換行方向

中、日、韓,在垂直排版情況下,換行絕大多數皆以,由上到下,由右至左。蒙古文則為由左至右。

各語系間,標點符號位置差異

垂直文字對齊

Bambook提供了4種對齊模式可選擇:

  1. 頂端對齊,請參閱下圖A區塊。此方法將以各縱行上方為基礎對齊。
  2. 置中對齊,請參閱下圖B區塊。此方法將以各縱行垂直中心點為基礎對齊。
  3. 底端對齊,請參閱下圖C區塊。此方法將以各縱行底端為基礎對齊。
  4. 頂底齊行,請參閱下圖D區塊。與「頂端對齊」相似,但下方會自動切齊,必要時會微調字間距。

文字對齊方式示意圖

垂直排版標點處理

一般而言,繁體中文標點符號於垂直排版中,會至於中央位置。而簡體與日文則會位於方格中右上方位置。另外韓國目前已經較少使用漢諺混排,且標點符號使用習慣與中日差異大,此處不進行說明。

為了正確排印效果,請您確保有正確設定BambookLanguage並且正確配置字體,如果您欲設計繁體中文介面,但卻使用簡體中文或日文字型,即便正確設置語系,仍可能會出現標點錯誤情況,反之。

各語系間,標點符號位置差異

部分版本Android系統經過測試後,使用預設字體,即使文字本身正確調用繁體中文字型,但標點仍會出現調用到簡體中文標點之情況,此時建議您開啟punctuationFixMode

Latin 於豎排版中處理方式

在一般情況下,我們可以簡單的將在CJK中的拉丁與數字排版看為兩種,第一種為垂直.mixed,請參考下圖A段;第二種為將一組拉丁詞組直接順時針90度.upright,請參考下圖B段,正好對應UTR #50中Property Values的U與R值。

另外BambookTextOrientation也提供了另一組方式tateChuYoko次模式下,會將所有拉丁與歐文直接以橫式顯示,請參閱下圖C段落。請注意:是「所有」不論字數,請注意使用!

在日式排版中,可能會出現2位數數字、拉丁,例如:US、25、OK等詞彙,希望可以保留橫排效果,為此Bambook提供了一種調用方式:tateChuYoko(bool, int)?,可以使用該方法,需要傳入true以開啟,並傳入處理原則之字符數(小於等於)。該方法會對符合條件之字元,執行忽略BambookTextOrientation設定。請參閱下圖D段落,該段落啟用設定orientation: BambookTextOrientation.mixed,tateChuYoko: (true, 2),故一般情況下拉丁詞組將以順時針90度顯示,只有符合小於等於2之詞組–「UI」會以縱中橫處理。

各語系間,標點符號位置差異

注意!目前tateChuYoko尚不支援進階GSUB等功能,可能無法提供最佳顯示效果,您需自行判斷是否使用。

tateChuYoko中字符數,傳參型別int,唯傳入負整數將使其失效。理論上Dart如果編譯為原生平台正整數可以傳入2的63次方減一(編譯成Web端請參閱ECMAScript規範),但不推薦這麼使用,如果有希望大量拉丁與詞組橫向排版,建議直接設定BambookTextOrientation.tateChuYoko

避頭尾

又稱禁則處理(日)是中、日排版的基本原則,旨在確保標點符號不隨意出現在行首或行尾,以維持整齊美感。通常逗號、句號、冒號等「點號」不能位於行首。在本套件中預設啟用,也可透過applyKinsoku: bool控制,該選項會自動運算布局,如果在非中、日文種情況下,或特殊情況也可關閉。

各語系間,標點符號位置差異

Bambook 0.0.4當前版本,避頭尾處理,僅使用「推出」運算邏輯,未來將加入更加活性之方法。

行高與字元間距

在Flutter預設text中可以透過heightletterSpacing設定,這涉及到Bambook的設計原理,該套件最終仍會調用Flutter中的textwidgetr輔助繪算。

Bambook模式下預設的height依舊可以產生效果,但Bambook提供了lineSpacingletterSpacing兩種方法可以調用,因此不建議您,再使用預設height方法


希望這份文件能幫助您更順利地使用 Bambook!如有任何問題,歡迎隨時提出。