cht電腦資訊文書排版TeX
adm Find login register

沒有中文系統,又要排版中文

本人已不在此站活動
1 沒有中文系統,又要排版中文
Promote 0 Bookmark 02009-02-16quote  

之前有人問到,他的 paper 需要寫一些中文,但邀稿單位只接受原始稿,而且邀稿單位並沒有安裝中文字型,因此編譯原始稿時無法順利生成含中文的 pdf 檔。附上所有字型,檔案又太大,這該如何是好呢?

其實 TeX 系統可以直接從字型取字,而一個含 255 個字的 Type 1 字型檔也只不過是一、二百 Kbytes,因此很容易就可以附在原始稿中,這樣邀稿單位收到原始稿時就可以自行編譯了。

以下的例子以文稿中需要「這是中文測試。」這幾個中文字。我們可以使用 fontforge 製作一個 cfont Type 1 字型,從原有的中文 pfb 字型檔中 copy 需要的 glyph 過去就行了。當然,為了可以 copy&paste,你最好把每個中文字的 Unicode 碼給編上去。然後產生 Type 1 字型(含 afm, tfm, enc ),這些字型檔只要是放在原始文稿的工作目錄,編譯時就會找得到。

http://edt1023.sayya.org/tex/cfont-fig1.png

那麼要怎麼知道哪個字在哪個字型上呢?請下載 charucs

edt1023@zenwalk:~$ charucs 這 是
UCS2/4 : 0x9019 (36889)
UTF-8  : 0xE98099
Big-5  : 0xB36F
gb2312 : NA
UCS2/4 : 0x662F (26159)
UTF-8  : 0xE698AF
Big-5  : 0xAC4F
gb2312 : 0xCAC7

所以「這」在 cwmu90.pfb,「是」在 cwmu66.pfb(這裡以 cwm 字型為例)。這樣你就可以開始載入這些字型,把所需要的字 copy 過去,並把 Unicode 碼編上去。當然,如果你熟悉 fontforge script,你可以寫個 script 來執行,讓他自動去 copy 所需要的字到新字型,並產生所需要 Type 1 字型檔,這樣就不用使用 GUI click 來 click 去了。

那麼文稿該怎麼寫呢?以下是一個例子:

\documentclass{article}
% for pdflatex
%\pdfmapline{+cfont < cfont.enc < cfont.pfb}
\font\cF=cfont scaled 1000 \relax
\begin{document}
{\cF\char1}%
{\cF\char2}%
{\cF\char3}%
{\cF\char4}%
{\cF\char5}%
{\cF\char6}%
{\cF\char7}
\end{document}

編譯就依一般英文稿編譯就對了。

latex cfont-test.tex
dvipdfm[x] cfont-test.dvi

或使用 xelatex 一次就完成:

xelatex  cfont-test.tex

如果你要使用 pdflatex,那麼文稿中要加入必要的設定,請參考例子裡頭註解起來的部份。

例子原始文稿的 tarball 可以在這裡下載:

http://edt1023.sayya.org/tex/cfont.tar.gz

edited: 3
guest
2 沒有中文系統,又要排版中文
Promote 0 Bookmark 02009-02-16quote  
真是個神奇又有效的方法。請教李老師。這個作法適用於不同 latex 發行版本以及作業系統平台的嗎?
本人已不在此站活動
3
Promote 0 Bookmark 02009-02-16quote  

應該都適用。當然如果嫌麻煩的話(因為還要熟悉一下 fontforge 的操作),弄個圖檔就可以了,但這樣的排版彈性就差很多了。

edited: 1
本人已不在此站活動
4
Promote 0 Bookmark 02009-02-17quote  

我在 Vista + MiKTeX 2.7 測試,tarball 的例子是可以順利編譯。

比較麻煩的是 fontforge 在 Windows 安裝的話需要 cygwin 之類的東西。像我是直接裝 VirtualBox。在上頭裝個 GNU/Linux 來用 fontfoge。

edited: 1

cht電腦資訊文書排版TeX
adm Find login register
views:13559