注意
新版本 (4.8.x) 的 LaTeX CJK 已經包含了 xCJK 這個可和 XeLaTeX 配合的套件,不需要以下的複雜步驟即可直接使用系統上的中文字型。在你讀下去之前,先試試 xCJK 吧!
安裝給 LaTeX 使用的字型不怎麼簡單,這邊主要介紹使用 CJK 時,中文向量字型的安裝方法。目前最常用的向量字格式分為 TrueType 與 Type1 兩種,各有其優缺點:
- 在各種 GUI 環境中,CJK 字型多半都使用 TrueType 格式,因此選 TrueType 可以直接取用系統字型。然而 pdfTex/pdfLaTeX 遇到某些 TrueType 字型時處理速度極慢,這種情況下必需改用 Type1 字型。
- 使用 Type1 字型會發生的問題較少,但 Type1 是設計給英語系文字使用的字型格式,一個檔案只能放 256 個字,因此 TrueType 字型必需多經一套手續轉成多個 Type1 subfont。
安裝前
準備好你的 TrueType 字型檔,以下的步驟說明中,我會假設這個字型檔的名稱叫 FONT.ttf,而 NAME 則是要讓 LaTeX 使用的字型名稱,也就是安裝完成後,你可以用 \CJKfamily{NAME} 這個指令使用該字型,實際安裝時請代換成你喜歡的字型名稱。
另外,視你的需求及系統權限,你可以選擇把字型裝在系統上給所有使用者使用,或是裝在個人目錄中僅供自用,因此你要選擇一個適當的 texmf 目錄來安裝這些檔案。如果你要把字型裝在系統上,對應的 texmf 目錄如下:
Windows | C:\Program Files\texlive\texmf-local |
Debian GNU/Linux 或 FreeBSD | /usr/local/share/texmf |
若是想裝在個人目錄下,對應的 texmf 目錄通常是 %HOMEPATH%\texmf (Windows) 或 $HOME/texmf (Un*x)。注意系統管理者可能會修改這個設定,如果不確定的話,請查一下 texmf.cnf 這個設定檔的內容,或是直接去問管理者。
以下我會用 TEXMF 來當作你想安裝字型的目錄。
使用 TrueType 字型
1. 產生 .tfm 與 .enc
$ ttf2tfm FONT.ttf -q -w NAME@Unicode@
執行過後會產生 NAME00.tfm, NAME01.tfm, …, NAMEff.tfm 以及對應的 .enc 檔。前者是給 LaTeX 使用,後者則是 pdfTeX/pdfLaTeX 所需要的檔案。
完成後把 .ttf, .tfm, .enc 放到 texmf 目錄下:
- *.tfm 放到 TEXMF/fonts/tfm/NAME/
- *.enc 放到 TEXMF/fonts/enc/NAME/
- FONT.ttf 放到 TEXMF/fonts/truetype/
在 Windows 上請把斜線換成反斜線。放好以後請執行 texhash。
2. 設定 DVIPDFMx
修改 DVIPDFMx 的設定檔 cid-x.map,這個檔案的位置在 TEXMF/fonts/map/dvipdfm/dvipdfmx/cid-x.map,若這個路徑不存在 (通常是在你把字型安裝在個人目錄的情況下),就依照個這名稱新增目錄及檔案。另外如果你使用 Debian GNU/Linux,而想修改的是系統的設定檔,請編輯 /etc/texmf/dvipdfm/cid-x.map。
在 cid-x.map 中增加一行如下:
NAME@Unicode@ unicode FONT
3. 設定 pdfTeX/pdfLaTeX
產生一段文字檔,內容如下:
NAME00 <NAME00.enc <FONT.ttf
NAME01 <NAME01.enc <FONT.ttf
NAME02 <NAME02.enc <FONT.ttf
...
NAMEff <NAMEff.enc <FONT.ttf
把這個檔案命名為 NAME.map,並且放到 TEXMF 的 map 目錄下。接著執行如下的指令 (各平台皆相同):
updmap-sys --enable Map=NAME.map
如果你不是系統管理者,請把 updmap-sys 改成 updmap。
4. 產生 CJK 的字型描述檔
最後是給 CJK 用的字型描述檔,內容大概長這樣:
\ProvidesFile{c70NAME.fd}
\DeclareFontFamily{C70}{NAME}{\hyphenchar \font\m@ne}
\DeclareFontShape{C70}{NAME}{m}{n}{<-> CJK * NAME}{}
\endinput
把這個檔案存為 c70NAME.fd,並且放在 TEXMF/tex/latex/CJK/ 這個目錄內。這麼一來,你在 LaTeX 文件中使用 \CJKfamily{NAME} 時,就會去使用這個新字型了。
使用 Type1 字型
一般而言我們會用 FontForge 這個工具把 TrueType 字型轉成 Type1 格式。你還需要 subfonts.pe 以及 Unicode.sfd 這兩個檔案來轉檔。
- FontForge:這是一套向量字型編輯軟體,可以在 SourceForge 上免費下載使用,Windows 版本需要先安裝 cygwin 以及 X server 才能執行。
- subfonts.pe:這是包含在 CJK package 中的一支 script,可以讓你在命令列模式下執行 FontForge 進行轉檔的工作。
- Unifont.sfd:因為一套中文 TrueType 字型會被轉成多個 Type1 子字型 (subfont),這個檔案會定義其中的對應關係。Google 一下就可以找到這個檔案的下載位置。
1. 產生 Type1 字型及 .tfm
準備好上述的工具後,執行如下的指令:
fontforge -srcipt subfonts.pe FONT.ttf NAME Unicode.sfd
就會產生 .pfb (Type1 字型檔)、.tfm、.afm、.enc 等檔案。其中只有 .pfb 和 .tfm 是我們需要用到的。
- *.tfm 安裝到 TEXMF/fonts/tfm/NAME
- *.pfb 安裝到 TEXMF/fonts/type1/NAME
因為 fontforge 可以幫我們產生 TFM 檔,因此就不需要去執行 ttf2tfm 了。
2. 設定 DVIPDFMx
DVIPDFMx 會自行取用 Type1 字型,因此不需任何設定即可使用。
3. 設定 pdfTeX/pdfLaTeX
同樣的,我們也需要一份 MAP 檔來供 pdfTeX 使用,格式如下:
NAME00 NAME00 <NAME00.pfb
NAME01 NAME01 <NAME01.pfb
NAME02 NAME02 <NAME02.pfb
...
NAMEff NAMEff <NAMEff.pfb
把這個檔案命名為 NAME.map,並且放到 TEXMF 的 map 目錄下。接著執行如下的指令 (各平台皆相同):
updmap-sys --enable Map=NAME.map
如果你不是系統管理者,請把 updmap-sys 改成 updmap。
4. 產生 CJK 的字型描述檔
這部份的作法和 TrueType 完全相同,產生一份同樣的 c70NAME.fd 並且放到對應的目錄中即可。
相關連結
- 替 LaTeX CJK 新增字型:作者 EdwardLee 是國內用 LaTeX 的人都認得的資深使用者,基本上本文大部份的內容都來自這一頁。
Post preview:
Close preview