2011-04-03

做字體給 LaTeX 用

終於打起精神來做字體。雖然很久以前做過,但現在都到了 2.6 squeeze 的時代了,一直怕方法有所不同,很懶得弄。所幸陸續付過的關心還是有所助益,最後得以克盡全功,所以來寫個筆記。

工作背景為 Debian / Lenny / 2.6.32.36 / Big5。

1. 轉生檔案

就是拿 truetype 字型檔做出 tfm、afm、pfb、enc、fd、map 等檔案(它們各有用途,但一直沒去研究),這些使用 n 年前下載的李果正先生寫的 mkfont.sh 就可以生出來了。
mkfont.sh xxx.ttf xxx
不知在哪裡看到的,在 LaTeX 裡指定字型時,用的是 ttf 檔的主檔名,總之為了免生枝節,就都取一樣的名字。另一件事情是,名字裡有底線或減號可能容易造成麻煩,所以就讓字都連在一起。

2. 複製檔案

現在 tetex 沒在維護了,改成 texlive,所以新舊之間大家用到的目錄可能有所不同。不過 dpkg-listfiles latex-cjk-chinese-arphic-bsmi00lp 一下,可以大概知道可能要放哪裡。

我遵循過去的範例,在各相關目錄下,先另建一個叫做 CJK 的目錄,然後參考作業系統的架構,為這些檔案在各處的 CJK 目錄下建立自己的目錄。以下以 ntublack.ttf 為例。

先複製 truetype 字型檔及做連結。
cp -p ntublack.ttf /usr/share/fonts/truetype/CJK/
root@yyy:/usr/share/texmf-texlive/fonts/truetype/$ ln -s /usr/share/fonts/truetype/CJK/
然後是複製以 mkfont.sh 生出的檔案。
cp -p *.afm /usr/share/texmf-texlive/fonts/afm/CJK/ntublack/
cp -p *.tfm /usr/share/texmf-texlive/fonts/tfm/CJK/ntublack/
cp -p *.pfb /usr/share/texmf-texlive/fonts/type1/CJK/ntublack/
cp -p *.enc /usr/share/texmf-texlive/dvips/CJK/ntublack/
cp -p c00ntublack.fd /usr/share/texmf-texlive/tex/latex/CJK/Bg5/ntublack/
cp -p ntublack.map /usr/share/texmf-texlive/fonts/map/dvips/CJK/ntublack/
3. 加入組織

檢查一下,如果沒有下面這個檔案,就自己做。
vim /var/lib/tex-common/fontmap-cfg/10local.list
在裡面加上一行字
10local
再讓系統把字體加入工作行列。
texhash
updmap --enable Map ntublack.map
updmap-sys
這些 map 檔的登錄檔應該是 /etc/texmf/updmap.d/10local,cfg,上述自行編製的 list 檔是為了與這個檔案做連結。如果不是這個 cfg 檔,那麼就找出它叫什麼名字,然後編寫相應的 list 檔。

4. 其他

如果做很多字體,可以所有字體的 map 檔都 enable 了,再做 updmap-sys。

如果 enable map 檔時有問題或是其他弄錯的情形,總之如果做過登錄的事,就不要急著刪除相關檔案,要先讓它們離開系統的工作行列再刪除。
updmap --disable ntublack.map
texhash
updmap-sys
最後,以前蒐羅很多字體,現經測試,ntu_fsm 、wcl-02、wcl-08 以及 twmoe 系列無法使用,ntu 及 wcl 系列無法輸出日文字母,只有 cw 系列全部 ok 且皆可輸出日文字母。現在可由 debian 下載的 firefly 也可以輸出日文字母,不過在 LaTeX 方面也是要自己做出相關檔案。