5.3. ttfm - TrueType 字型管理工具

目前有許多程式都會要求使用 TTF 字型,所以我們最好還是幫 X 加 上中文的 TTF 字型支援。目前安裝字型所需的 fonts.dir 已經不需要 使用暴力的方法產生,使用 ttfm 就可以很順利的管理所有的中文字 型了。而現在在 ports 中的 TrueType 字型有三套, arphicttfmoettfwangttf

ttfm 的安裝:

    # cd /usr/ports/chinese/ttfm
    # make install

安裝後包含了:

ttfinfo:一個可以用來讀取 ttf 字型格式資訊的小程式,範例如下:

    # ttfinfo /usr/share/fonts/ttf/bkai00mu.ttf
    TTFINFO_FONT_FILE="/usr/share/fonts/ttf/bkai00mu.ttf"
    TTFINFO_FONT_NAME="ZenKai_Medium"
    TTFINFO_FOUNDRY_NAME="Arphic"
    TTFINFO_WEIGHT_NAME="medium"
    TTFINFO_WIDTH="normal"
    TTFINFO_NUMCMAP="2"
    TTFINFO_CMAP0="1,0"
    TTFINFO_CMAPNAME0="Apple,Roman"
    TTFINFO_CMAP1="3,1"
    TTFINFO_CMAPNAME1="Windows,Unicode"
    TTFINFO_MAPNUM="1"
    TTFINFO_FONTMAP1="-Arphic-ZenKai_Medium-medium-r-normal--0-0-0-0-c-0-big5-0"
    # ttfinfo /usr/share/fonts/ttf/mingliu.ttc
    TTFINFO_FONT_FILE="/mnt/windows/fonts/mingliu.ttc"
    TTFINFO_FONT_NAME="MingLiU"
    TTFINFO_FOUNDRY_NAME="DynaLab"
    TTFINFO_WEIGHT_NAME="medium"
    TTFINFO_WIDTH="normal"
    TTFINFO_NUMCMAP="2"
    TTFINFO_CMAP0="1,0"
    TTFINFO_CMAPNAME0="Apple,Roman"
    TTFINFO_CMAP1="3,1"
    TTFINFO_CMAPNAME1="Windows,Unicode"
    TTFINFO_MAPNUM="2"
    TTFINFO_FONTMAP1="-DynaLab-MingLiU-medium-r-normal--0-0-0-0-c-0-big5-0"
    TTFINFO_FONTMAP2="-DynaLab-MingLiU-medium-r-normal--0-0-0-0-m-0-iso8859-1"

ttfinst.tk:圖形介面的 tk script, 可以用來安裝字型,不建議使用。

ttfm.sh:shell script,預備作為 ttf 字型總管。

    # ttfm.sh --help
    True-Type Font Manager 0.9.3
    
    Usage: /usr/local/bin/ttfm.sh [option]
    
           --add [module] <file>...    install ttf font
           --remove [module] <file>... remove ttf font from the system
           --list <module>... list all ttf fonts on the system
           --modules          list all ttf manager modules on the system
           --setdefault <module> <file>
                              set default ming font of module to file
           --setdefault_kai <<odule> <file>
                              set default kai font of module to file
           --initm <module>.. initialize modules
           --help             show this info

這個程式會去利用位於 /usr/share/fonts/install/ 底下以 ".ttfm" 結尾的可執行檔來安裝、設定字型, 這些 .ttfm 檔案我稱 為 ttfm module,由需要使用到 ttf 字型的程式提供,這些模組必 須符合以下要求:

ttfm 採用模組化的設計。 每一個需要使用到 ttf 字型的 程式都可以提供 ttfm 的模組, 然後便可透過 ttfm.sh 來做到 字型的安裝,移除,列表,設定預設字型等管理的動作。 目前已有的 ttfm 模組有:

    abiword        給 AbiWord 0.7.12 或是以上的版本使用。
    chitex      安裝 ChiTeX 字型  (by cwhuang)
    ghostscript6    給 Aladdin Ghostscript 6.50 使用。可以管理 TrueType 字型
            和 CID 字型,Ghostscript 必須修補可以使用 TrueType 字型。
    ttf2pk      供 freetype-contrib 的 ttf2tfm, ttf2pk 使用  (by cwhuang)
    xfreetype   給 XFree86's freetype backend,在 3.x 是 Xfsft,
            在 4.x 是 freetype 模組。
    xttfm-tcl   給 XFree86 3.3.x X-TrueType server。
    xttfm       安裝給 X window 用的 font.dir, font.alias  (by 小虫)

一些使用範例:

1. 加入字型:

    # ttfm.sh --add <path>/bsmi00lp.ttf

(xttfm 會令 xfs 重新載入字型名稱。如果您不是使用 xfs, 您要自己下 xset fp rehash 令新的字型名稱生效,或者重新啟動 X Window )

2. 列出字型:

    # ttfm.sh --list xttfm

會列出 xttfm 模組所有安裝的字型。 您現在可以用 xlsfonts 看到這些字型名稱。 並可用 xfd -fn <字型名稱> 試試能否看到字型。

3. 移除字型:

    # ttfm.sh --remove bsmi00lp.ttf

這不需多做解釋吧?

4. 設定預設字型:

    # ttfm.sh --setdefault xttfm bkai00mp.ttf

將 xttfm 模組的預設字型更改為 bkai00mp.ttf 這或許是 ttfm 最 powerful 的功能之一了。 您可發現 X Window 預設的中文字型通通變成楷體的。

注意預設字型是跟 encoding 有關的。您可以對不同的 encoding 分別給定預設字型。ttfm 會自動根據所給定 ttf 自動判斷應設定那種 encoding 的預設字型。 例如 ttfm.sh --setdefault xttfm gkai00mp.ttf 會設定 GB 的預設字型為楷體。

5. 模組的初始化:

    # ttfm.sh --initm <module name>...

這個功能是用來在安裝一模組時,將系統已有的 ttf 字型通通安裝到該模組中。 如果下:

    # ttfm.sh --initm all

會令所有已安裝的模組都做初始化的動作。 (也就是將所有字型安裝到所有的模組中)

如果您撰寫了一個 ttfm 的模組,請記得在安裝時 執行 ttfm.sh --initm <您的模組名稱>

Note: TrueType 字型的設定

還有,在啟動您的 X 之前,記得檢查 /etc/XFree86 下面有沒有

    FontPath   "/usr/X11R6/lib/X11/fonts/TrueType"
         

或是在 ~/.xinitrc 中加上這一行

    xset +fp /usr/X11R6/lib/X11/fonts/TrueType/