2020年6月30日 星期二

漢字使用環境的建置 —— 全宋體更新

今年三月十日,Unicode  官方發布了最新的 13.0 版,等待多時的擴展 G 區近五千個漢字終於到來,於是我又重新開始投入了漢字的整理工作。由 BabelStone Fonts 取得了兩千多個 G 區字形,另外從 字形維基 補上了其餘兩千多個字形,最後從官方的 CJK Extension G PDF 中抽取了 353 個台灣提交的字形疊蓋上去,我以不到三天的時間製作出了完整的 G 區字型,也初步完成支援 G 區檢字的部件檢索(直接採用 IDS 拆分資料)。與此同時 suns99 兄也同步開工幫忙,對 G 區字逐一編上倉頡碼,一方面方便日後的倉頡輸入,另一方面也方便我進行重複字的比對工作。

遷碼對照表

完成了字型以及部件檢索,有了顯示及檢字的工具,我開始進行 G 區字與補充字的比對,看哪些補充字已經被收入 G 區之中。經過多日的比對,三月十七日完成了一份補充字對 G 區字的遷碼對照表,G 區的 4939 字之中,有 3194 字是已經收編在補充字裏,只有 1745 字算是新增。有了遷碼表,我就能以批量的方式,將我製作的三百餘部辭典,進行遷碼的工作。把用到這些補充字的相關文件,全部轉碼改用正式的 G 區字,然後這 3194 個補充字就可以功成身退了。其中,單單是漢語大字典就有 1931 個字頭由補充字轉入 G 區。

您若曾利用全宋體的補充漢字來製作文件,可借助這個遷碼對照表,將相關的文件快速遷碼至  G 區用字。更新字型之前請務必確認您所有的文件都已遷碼完成,以避免顯示錯亂的情形發生。

G 區優化

把所有我製作的辭典遷碼更新了一輪,忙上了好一陣子。又把與  G 區重複的補充字字形抽取出來,擇其優者取代掉質量較差的維基字形。之後我又對 G 區近五千個漢字,逐字檢查、優化拆分資料,以取得更精確的檢字效果。過程中發現某些字形與原始的 IDS 拆分資料不符,進一步追查才發覺是某些 BabelStone 造的字有問題,於是又對這些字形進行了修正,至此 G 區的字型與拆分資料才算是正式完成。

擴充字庫

自從兩年前發布了全宋體與部件檢索之後,其實我一直在做一個較大規模的整理,就是將全字庫收錄的兩萬多個外字,全部納入我的補充字庫之中。這樣做的目的,是想快速地利用現有的資源擴充字庫的規模,讓在製作辭典或數位化典籍時能減少缺字的困擾。

有朋友疑惑地問:為什麼不直接用全字庫的字型資料就好?一方面是我已有自己整理的八千多個補充字,這些字全字庫大部分沒能涵蓋;另一方面,全字庫的數據瑕疵很多,不經整理,難以有堪用的品質。

全字庫的數據是完全公開的,開始製作的當下,取得的是 2018-10-02 的版本,提供有宋體、楷體兩種字型,宋體的外字字型 TW-Sung-Plus-98_1.ttf 裏共有 23828 個外字字符,扣除一些空字及非漢字,實際有效的漢字字形為 21938 個。數據裏除了字型外,尚包含有 CNS 碼對 Unicode 的對照表、部首、筆畫、倉頡碼、注音、拼音、筆順、部件拆分等數據。乍看之下似乎很完整,但實際上問題很多。

首先 CNS 碼對 Unicode 的對照表並不完整,在外字之中實際上有很多字是 Unicode 的已編碼字,官方並未完整地整理出對應關係。其次是筆順、部件拆分的資料錯誤極多,很多與字形根本不符,也有一千五百多字完全沒有拆分資料。另一個問題是某些字形重複造字,或是筆畫差異極小的字重複收錄。

在 suns99 兄的協助下,花了近兩年的時間,我大致上已將全字庫的外字清理出來。去除 Unicode 已編碼字、合併重複字與差異過小的字,最後實得約一萬八千個外字,若再扣除與既有補充字的重複,實際增收約一萬六千個外字。我將製作過程所整理的數據,做成了一部《全字庫》字典,雖然沒有實際的釋義,用處也不大,但完整收錄了全字庫的數據,也記錄了比官方數據更為完整的 Unicode  對應關係。透過部件檢索檢字,查詢這部《全字庫》字典,可以查得該字的 CNS 編碼,並可直接點擊跳轉官方的對應頁面,這實際上要比官網的查詢功能還要來得方便而精確了。

至於拆分資料的部分,由於全字庫的拆分是拆到最細(最大拆分),而做為部件檢索用途,最小拆分才能達到最佳效果,因此我需要逐字加以調整、訂正。目前全字庫缺掉的一千五百多個拆分數據,我已逐字補上;調整、訂正的部分則完成了數千字,還有萬餘字等待檢覈。原本想等全部完成再對外發布,無奈父親一病讓我耽擱了大半年,再加上 G 區字既出,很多朋友等著有工具可以支援,因此只好先將這個尚未完全優化的版本推出,讓大家先有個工具可用,至於進一步臻至完善,只好徐徐後圖了。

字型更新

經過這些冗長繁複的整理,這次更新給大家的全宋體,除了基本字區(新增 13 字)、A 區(新增 10 字)、B 區(新增 7 字)、C 區、D 區、E 區、F 區、G 區(4939 字)的已編碼漢字共 93858 個外,再加上 24856 個 Unicode 尚未編碼的補充漢字,總計共有 118714 個漢字,逼近十二萬大關。除了涵蓋 Unicode 13.0 的所有漢字之外,更涵蓋了所有台灣 CNS 標準的編碼漢字,大幅提升了可用漢字的數量。

下載連結:全宋體.zip

安裝字型的方式請參閱 漢字使用環境的建置 ㈠ —— 顯示篇 的說明,而更新字型之前請務必確認您所有的文件都已遷碼完成,以避免顯示錯亂的情形發生。


感謝這些原字型製作單位的無私奉獻,現將此成果無條件分享出來,樂見學術研究、教育工作、個人閱讀這方面的運用,但請勿用做任何形式的商業營利行為



12 則留言:

  1. 您好:
    感謝您的分享與整理!
    借用這篇文章的回覆,有個字型的問題想向您請教,還望原諒。
    我自己也在整理文本與字型,其中有些字型在直排時會變成豆腐。翻查網路文章,見到您的一篇舊文提到:
    「原來在字型的 OpenType Layout Feature 裡藏著一個 VerticalWriting 屬性定義,它正是被設計用來負責處理直排的字形修正。」
    猜想我遇到的字型問題似乎和這個屬性有關,不知道您如何處理這個問題?
    百忙中打擾您,祈請海涵!

    回覆刪除
    回覆
    1. 您好!據您的描述「直排時會變成豆腐」,想必橫排時是正常的,我推測跟這個屬性很可能有關。有可能是該字型的 VerticalWriting 指定了直排時要換用哪一個字符來顯示,而這個字符被誤刪而不存在,因此成了豆腐。建議您檢查一下它的 VerticalWriting 屬性內容,看是否如此。

      刪除
  2. 您好:
    感謝回覆!也很抱歉我的問題不太清楚,因為我也是這陣子才開始學習,還在摸索。
    在win系統上看,橫排時是正常的,直排時字仍是橫的或是變成豆腐;在iOS系統上看,能支援字型的APP橫排正常,直排變成豆腐。
    我試著用FontForge打開字型,但找不到在哪修改VerticalWriting;如果用transform將字型全部旋轉,似乎也不是修正排版屬性。
    不知道要如何檢查、修正VerticalWriting這個屬性?若能簡單提示,我再自行尋找教學即可,謝謝!

    回覆刪除
    回覆
    1. 於字型我也是個半吊子。建議您用 FontCreator 試試,在它的 Font 功能表下有一 OpenType Designer...,然後在 Features 下就有 VerticalWriting 這個屬性可編輯。

      刪除
  3. 无法显示:[⿰册司]、⾓

    回覆刪除
    回覆
    1. 感謝反饋。請問[⿰册司]字的出處為何?您提的 "⾓" 為康熙部首專用符號,並非標準漢字,但全宋體也可顯示呀,您所謂 "无法显示" 是何指?

      刪除
    2. 我是在编辑《汉字源流字典》(谷衍奎 北京-语文出版社,2008.1)的时候遇到的:

      1、关于“角(简体中文)、⾓(繁体中文)”(详见P473的截图 https://sm.ms/image/64g1QtS2nqzlFxO),我想同时显示,但好像用全宋体无法做到。
      2、关于[⿰册司](详见P1592的截图 https://sm.ms/image/iSwelTO7Ev32Irc)

      刪除
    3. 1. 「角」字,在 Unicode 的標準下,兩岸的字形不同,佔用同一碼位。這一類問題也是我處理字庫時最大的困擾,順了這邊就逆了那邊。不得已,只能定下一個原則:原則上字形優先依台灣標準,少數台灣標準字形並不恰當的,才採大陸或其他地區標準。這字則古籍二形互見,因此我於補充字添了一個「󾉟」,讓兩形需要並陳的地方得以運用。請勾選「包容異體」以「角」直接檢索,便能同時找到二形。

      2. 關於[⿰册司]這字,目前字庫確實未收,我再補進字庫,下版更新。

      刪除
    4. 原来如此,感谢详细答疑!期待更新。

      刪除
  4. 您好,感谢您的工作,但您采用的几个字体拼接源的license似乎并不兼容。尤其是 Unicode 标准的PDF自身的嵌入字体更是声明如下:
    Unicode uses most fonts under restricted license from the original font owner. You may not extract, copy, modify, or
    distribute fonts or font data from any Unicode Products, including this publication, without license from the font owner
    也就是不得用于提取和复制。所以如果您用这些字体拼凑,得到的字体恐怕不能合法分发。

    回覆刪除
    回覆
    1. 感謝您的提醒,這個問題我也曾透過精通外文的朋友向 Unicode 官方聯繫,遺憾的是僅得到「不是事權單位」的回應,並未得到進一步協助。

      事實上這些字型應該都是各地區的官方單位所提交的,例如 T 源字形的所屬單位就是台灣的 TCA,也就是「全字庫」的管理單位,其他地區應該都類似。官方單位用納稅人的錢完成的成果有義務向全民公開,所以「全字庫」的字型是完全公開供大眾使用的,「全宋體」有很大比例的字形便是基於這個字庫。我的製作方式是先以 Unicode 字形為底稿進行整理,然後用已收錄的補充字形替換覆蓋,後續也會陸續修整字形,所以字形也並非全部來自 Unicode。

      當然「全宋體」裏仍然有部分字形是來自 Unicode 而尚未經重造替代,我的目的非為營利,只希望為大家製作一個便利的可用工具,尤其是學術研究單位的專業領域,期望能對漢字文化的保存、整理有一點點小小幫助。若是這些字型的所屬單位認為我的製作侵害到他們的權益,只要留言告知,我會立刻停止分享、進行處理。

      刪除