8. CJK 中如何編輯、編譯大型文件?

使用 CJK 的朋友,在編輯大型的文件時,常常會抱怨無法分開來寫,使得維護上會變得很困難,其實是可以的,以下的例子包括和 LaTeX2HTML的配合。實際的文稿內容就不寫出來了,只寫出架構。

cjk.tex (主檔)
cjk1.tex (第一章)
cjk2.tex (第二章)
cjk3.tex (第三章)
cjk.tex 內容:
--- begin cjk.tex ---
\documentclass[12pt,a4paper]{report}
\usepackage{CJK}
\usepackage{html}        % 和 latex2html 配合

% 這個環境只會在執行 latex2html 時有作用
\usepackage{taiwan}      % 執行 latex(bg5latex) 時會忽略
\begin{document}
\begin{CJK}{Bg5}{aming}  % 開始進入 CJK 環境

%

% latex2html 會直接找 cjk1.tex...
\input{cjk1}
\input{cjk2}
\input{cjk3}
\end{CJK}
\end{document}
--- end cjk.tex ---
其中 *.cjk 的部份,可以事先由 bg5conv 轉出來,或由 Makefile/script 中控制。
bg5conv < cjk1.tex > cjk1.cjk
bg5conv < cjk2.tex > cjk2.cjk
bg5conv < cjk3.tex > cjk3.cjk
這樣就可以了,然後開始編譯:
bg5latex cjk.tex
dvips -Pcmz -o cjk.ps cjk.tex
latex2html [options] cjk.tex
這樣就會產生 cjk.ps 及在 cjk 子目錄下產生 HTML 格式的檔案。這樣,各個章節就可以分開維護了,不必編輯一整個大檔案。

其中的原理就是執行 bg5latex cjk.tex 時,\input 進尚未處理的 cjk1.tex 則會來不及前置處理,最後變成是亂碼。\input{cjk1} 不加延伸檔名,預設的延伸檔名就是 *.tex,因此要寫成 \input{cjk1.cjk}

至於 \include 指令,則由於他一定會認 tex 延伸檔名,因此沒有辦法這樣處理。

當然,這裡為了方便說明,使用數目字去代表他的順序,實際運用可以命名一個代表性檔名會比較好維護,以免有時要加減幾個章節時,所有的檔名都要改變。

CJK package 裡頭亦有提供 \CJKinput\CJKinclude 可以運用。

Compiled by Edward G.J. Lee (2004-05-18)