在 LaTeX 安裝中文字型

注意
新版本 (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,並且放到 TEXMFmap 目錄下。接著執行如下的指令 (各平台皆相同):

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,並且放到 TEXMFmap 目錄下。接著執行如下的指令 (各平台皆相同):

updmap-sys --enable Map=NAME.map

如果你不是系統管理者,請把 updmap-sys 改成 updmap

4. 產生 CJK 的字型描述檔

這部份的作法和 TrueType 完全相同,產生一份同樣的 c70NAME.fd 並且放到對應的目錄中即可。


相關連結

  • 替 LaTeX CJK 新增字型:作者 EdwardLee 是國內用 LaTeX 的人都認得的資深使用者,基本上本文大部份的內容都來自這一頁。

rating: 0+x

Comments

Add a New Comment
or Sign in as Wikidot user
(will not be published)
- +
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License