4.4. XLFD 的格式與 xtt 字型模組

Last Update: 2003年 1月20日 周一 10時25分06秒 CST

X11 Core Font 以 XLFD 的格式來讓選擇字型,以下稍微介紹一下:

   -(1)kc-(2)fixed-(3)medium-(4)r-(5)normal-(6)*-(7)16-(8)160-(9)72-(10)72-(11)c-(12)160-(13)big5-0
(1)
廠商名稱(Foundry):字型提供廠商,如 Arphic(文鼎)、kc(國喬)。
(2)
種類(Family):所屬的類型。
(3)
粗細度(Weight):粗細程度,如 medium(適中)、bold(粗體)。
(4)
傾斜度(Slant):傾斜程度,如 r(不傾斜)、o(傾斜)、 i(傾斜並且具有較奇特變化)。
(5)
寬度(Setwidth):如 normal(正常)、condensed(最窄)、 semicondensed(稍窄)。
(6)
附加型式(Add Style):額外的格式,如 sans(無)、medium(適中)。 目前大部分字體均已不用此欄位。
(7)
像素大小(Pixels):用像素來表示字體大小。
(8)
點數大小(Points):用點數來表示字體大小。10 個點數等於 1 個像素。
(9)
水平解析度(Resolution X):每英吋的點數,如 72、75、100。
(10)
垂直解析度(Resolution Y):每英吋的點數,如 72、75、100。
(11)
字距(Spacing):間隔,取其字首,如 Proportional(依比例大小)、 Monospace(等寬字)、Charcell(等寬等高字)。
(12)
平均寬度(Average Width):以點數為單位。
(13)
字型集(Character Registry and Charset Encoding):如 big5-0(繁體中文)、big5.hkscs-0(香港繁體中文)、gb2312.1980-0(簡體中文)、 gbk-0(簡體中文)、gb18030-0(簡體中文)、iso8859-1(英文)、 iso10646-0(Uincode)。

但是 X11 Core Font 在反鋸齒上的支援不佳、 使用 CJK TrueType 的效率不好, 特別是目前常用的 Unicode 字型在效率和記憶體的使用都會是很大的問題, 因此需要較現代化的系統 fontconfig/xft。

X11 Core Font 透過 xtt 字型模組來顯示字型。 xtt 字型模組對於 CJK TrueType 字型加強過的字型顯示模組。 xtt 字型模組目前由 After X-TT Project 維護中。 要使用 xtt Module 必須修改 XF86Config, 幫他加上新的 FontPath,因為 ports collection 會將中文 TrueType 字型安裝到 /usr/X11R6/lib/X11/fonts/TrueType/, 而且把中文PCF 安裝到 /usr/X11R6/lib/X11/fonts/local/

Section "Files"
        :
        :
        FontPath     "/usr/X11R6/lib/X11/fonts/TrueType/"
        FontPath     "/usr/X11R6/lib/X11/fonts/local/"
EndSection

以及讓 X 去使用 xtt 模組, 如果在模組區發現已經有設定 Load "freetype", 請將該行刪除,因為這兩個模組是互斥的:

Section "Module"
        :
        :
        Load  "xtt"
EndSection

Note: X11R6.8.1 之後,XTT 字型模組和 FreeType1 已經取消了, 因為 FreeType2 整合了他們的功能。

最後再透過 ttfm 來安裝新字體就可以了。

是不是一定要 xtt 模組才能使用中文 TrueType?答案不是。 freetype 模組也可以用來處理中文,但是兩者只能選一個, 而 xtt 是專為 CJKV 字型而設計產生的 TrueType 處理模組, 其中 TTCap 選項所提供的粗體、斜體、粗斜體, 以及其他功能是中文 TrueType 所不能或缺的。

對 TTCap 而言,他的語法是擴充 fonts.dir 來提供更多的選項,例如:

ds=y:ai=0.3:bsmi00lp.ttf -Arphic-AR PL Mingti2L Big5-bold-i-normal--0-0-0-0-c-0-iso10646-1

最前面的 ds=y:ai=0.3: 就是 X-TT 擴充的部份。 在這個例子中,文鼎明體的名稱是 bsmi00lp.ttf, ds=y(Double Strike) 使用粗體, ai=0.3(Automatic Italic) 使用斜體, 所以相對應的產生 -bold-i- 的文鼎明體粗斜體字型。 另外,最後面的 iso10646-1 就是 Unicode 字型, 目前文鼎字型在這個部分的支持並不是很好。

常用的還有 fn=INTEGER 來指定 TrueType Collection(.ttc) 檔案的 face 號碼, 像是目前處理 mingliu 就是跳過固定寬的細明體, 而改採用直接指定變動寬的新細明體 fn=1

Note: 如果使用 freetype 模組,載入字型和顯示的的速度會比較快, 可以透過 x11-fonts/ttmkfdir 來產生的 fonts.scale 和用 mkfontdir -e 來產生 encodings.dirfonts.dir

# cd /usr/X11R6/lib/X11/fonts/TrueType
# ttmkfdir -o fonts.scale
# mkfontdir -e /usr/X11R6/lib/X11/fonts/encodings

但是這對細明體會造成莫大的災難,在字距的部份為 -m- (等寬字), 這會造成英文的字體和中文同為方塊字寬度,因為這會產生如下的 fonts.dir

5
mingliu.ttc -DynaLab-MingLiU-medium-r-normal--0-0-0-0-m-0-ascii-0
mingliu.ttc -DynaLab-MingLiU-medium-r-normal--0-0-0-0-m-0-fcd8859-15
mingliu.ttc -DynaLab-MingLiU-medium-r-normal--0-0-0-0-m-0-iso10646-1
mingliu.ttc -DynaLab-MingLiU-medium-r-normal--0-0-0-0-m-0-iso8859-1
mingliu.ttc -DynaLab-MingLiU-medium-r-normal--0-0-0-0-m-0-iso8859-15