中文字處理

Wednesday, March 15, 2006

標準字體

從起源上講,宋體與明朝體是一個字體,起源于宋代,在明代傳到日本。所以日本叫明朝體。但由於臺灣的電腦字型技術是來自日本,所以臺灣的電腦字型叫做細明(朝)體。
而教育部制定國字標準字體宋體,我想是沿用傳統的叫法。

如果我們把康熙字體為“康熙體”
臺灣教育部標準宋体屬於臺灣宋體,win98細明體是屬於康熙體
大陸現在所用字體為新字形宋体,舊字形宋体則也是屬於康熙體
日本現用明朝體屬新字體,舊字體屬於康熙體。
韓國明朝體與康熙字體比較符合。
winXP細明體是從了Unicode寫法的,自從Unicode出臺以後,臺灣大多字體商已改從Unicode寫法,放棄傳統康熙字體。

所以宋體與明體只是一個字體。
但是大陸新字形宋體、臺灣教育部標準宋體、香港標準宋體、日本明朝體新字體,WinXP細明體,屬於新漢字標準。
大陸舊字形宋體、win98細明體(香港臺灣宋體)、日本明朝體舊字體、韓國明朝體則是屬於康熙體。

只不過大陸宋體、臺灣教育部宋體、香港標準宋體命名都是中派“宋體”。
而98細明體、XP細明體、日本明朝體、韓國明朝體,命名是日派“明朝體”。

所以讓人誤以後宋體與明朝體是兩种風格的字體。
只能說是同一种字體的兩种叫法。但有傳統體與新標準的區別。

明體

這裡只想提醒大家一件事,日韓是沒有「明朝」這個朝代的,請冷靜思考一下就知道他們所謂的明朝體是源自哪裡了。

我們的標準字體是宋體,因為書寫體本來就會近似實際書寫的筆畫。但這不代表其他的字體是「廢除」了,明體是康熙字典所用的字體,這當然也是我們的文化遺產之一。

我想大家不會願意把自己的文化遺產拱手讓人吧?我們要做的只是訂正字體書寫的筆畫是否正確。

拉丁語系的國家也是會有這種書寫體、印刷體的區分,而且也和所處的時代習慣有關。請參考:
http://blog.bs2.to/post/EdwardLee/816

Xf2、Freetype2、Fontconfig 的區別

細明體和 Freetype2 有什麼關係呀?
(新)細明體、標楷體使用 bytecode 組字法,與一般的 TrueType 格式不一樣,一般的 TrueType 是存放「筆劃」,所以字型引擎只要依照筆劃指引,就可以繪出字形,而 bytecode 則是一些虛擬指令(類似 java 的虛擬指令),這時候,字型引擎就必須化身為一個解譯器,來解釋並執行這些虛擬指令,就像 JVM 一樣,bytecode 的好處是減少字型檔案的大小。

bytecode 有三個部份為 Apple 專利,正是因為這個緣故,freetype2 預設並未打開這個 bytecode 解譯功能,所以當遇到了 bytecode 組字的字型時,就會不正常(破碎),幸好此類字型不常見,有個好消息是:freetype unstable 版已經避開了 Apple 專利部份,而且預設也是開啟 bytecode 解譯功能,可見專利問題已解決了(猜測),所以才會預設開啟。

Fontconfig 部份
1、除了中文字型名稱(嚴格來說,應是非英文字型名稱)的修改外,還有容許 CJK 漏字 1%,以及增加 CJK CharMaps,以支援較早期沒有 Unicode 的字型。
2、對系統的 fonts.conf 做了少需修改。
如果您對中文字型名稱沒有需求,小弟還是建議還是更新了吧,避免一些麻煩。

Xft2 部份
1、增加控制內嵌 bitmap 選項。
2、模擬粗體。
3、等寬字英文變寬問題。
4、AA 與非 AA 混雜造成字形糊掉問題,就是您所謂的"沙沙文字"。

Freetype 部份
1、autohint 採用日本 Akito 的 Patch。
2、啟用 gamma table,並修改了 gamma 值,讓 AA 狀態的字型更清楚,但 hinting 必須開啟,若要讓字型更細,則必須開啟 autohint,這都在 fonts.conf 中加以描述,所以小弟才建議 Fontconfig 也要更新,不單只是字型名稱需求而已。
3、啟用 bytecode 解譯功能。

Xf2 和 Freetype2 到底有什麼關係呢?
Freetype2 是字型引擎,被動地等待應用程式呼叫,而 Xft2 只是應用程式的一種,也就是說,只要您了解 Freetype2 提供的 API 函數、資料結構、模組,您事實上也可以得到 Freetype 回覆的字型資料,進而繪製在螢幕甚至是報表,Xft2 就是做類似的事情,只不過 Xft2 不是獨立的應用程式,它是一種介於應用程式與 Freetype2 之間的橋樑,它提供更高階 API 介面給應用程式開發者,讓程式開發人員不必了解複雜的 Freetype2,Xft2 可以節省程式設計很多時間。

mozilla 1.3 選單字型

只要修改 /usr/lib/mozilla-1.3/defaults/pref/xft.js
中的 pref("font.uifont.pointheight", 10);
改為 pref("font.uifont.pointheight", 12);
就行了 ^^

如下例 :

// pref to override the default UI font because we're using xft
pref("font.uifont.name", "sans");
pref("font.uifont.pointheight", 12);