6. CJK 和 LaTeX2HTML 的配合

HTML 格式目前還是網頁的主流,LaTeX2HTML 就是為此而寫的一組 macro 及 perl script 程式碼,功能很強大,也代表他的處理程序很複雜,值得一提的是,他支援 CJK pacakge。但由於兩種格式的差異性,在使用上不免有削足適履的感覺,一些複雜的 LaTeX macro 還是無法處理(每個 macro/pacakge 都需要相對應的 perl 程式碼來處理),但一般使用應該是相當好用了,有必要的話,可以去修改 CSS 檔,來變更網頁的外觀,而且可以使用條件式的方式來寫 LaTeX 文稿,達到一稿兩用,甚至多用的目的。

LaTeX2HTML 轉數學式為圖檔的能力很不錯,一般情形下,數學式子的表現要在目前的網頁運作下充分表現會比較困難,縱使做到了,大部分的瀏覽器也是會無法閱覽,因此做成圖檔或許是目前比較通用又不會失真太嚴重的方法。

當然,這裡只是很簡單的介紹,實際深入的運用要詳讀 LaTeX2HTML 的使用手冊。


6.1 LaTeX2HTML 語法簡介

如果是自行編譯 LaTeX2HTML,一定要記得 docs 子目錄下把 manual 編譯出來參考。雖然資料並不是很新,但主要的架構說明都在裡頭。另外,他的程式碼,有時也要參考一下,才能達到微調的功能。


6.1.1 引入 LaTeX2HTML

使用 LaTeX2HTML 的第一步,當然就是在 preamble 區引入6.1

...
\usepackage{html}
...

請盡量引在最後面,就是在其他的 package 引入之後再來引入 html。

如果,有些 package,LaTeX2HTML 並不支援6.2,那得使用條件式的引入方法,以 fancyhdr package 為例,LaTeX2HTML 目前並沒有支援,在 preamble 區可以這樣設:

...
﹪begin{latexonly}
\usepackage{fancyhdr}
﹪end{latexonly}
...
這樣,LaTeX2HTML 就會忽略被 latexonly 包起來的部份。一些無法被 LaTeX2HTML 接受的自行定義的部份也是可以包在這個環境內,因為 LaTeX2HTML 目前並不完全支援自行定義指令,有些可以,有些則不行。請注意,起頭的是百分號 %,而不是一般的倒斜線6.3,這在 LaTeX 會被認為是注解,但在 LaTeX2HTML 則會忽略被這個環境包起來的 LaTeX 指令或環境。

6.1.2 簡單的條件式指令與環境

除了上一節所說的 latexonly 還有一些常用的條件式指令與環境。

至於更複雜的條件式判斷,可使用 ifthen package,詳細請參考該 package 所附文件。


6.2 LaTeX2HTMLLaTeX 配合需注意的地方

6.2.1 設定檔

LaTeX2HTML 的一些設定,可以設在 $HOME/.latex2html-init 這個設定檔內。例如,我個人的設定檔:

$ADDRESS = "<I>Compiled by Edward G.J. Lee ($address_data[1])</I>";
$charset = "big5";
$NO_NAVIGATION = 0;
$BOTTOM_NAVIGATION = 1;
$LOCAL_ICONS = 1;
$WHITE_BACKGROUND = 1;
$TRANSPARENT_FIGURES = 1;
1;

更複雜的設定方式,可參考 LaTeX2HTML 的 manual 或 latex2html --helpperldoc latex2html 來得知。

6.2.2 數學模式

TeX/LaTeX 的數學模式,LaTeX2HTML 預設就是會把其中內容轉成圖檔,這對數學式子很方便,但對一些特殊符號可能就不是自己想要的了,例如 $<$,$>$,$\backslash$...等等,這時可以使用 LaTeX\textless,\textgreater,\textbackslash 來取代,或進入 \verb 環境內,這樣 LaTeX2HTML 就不會去轉成圖檔。

6.2.3 圖檔的處理

我們一般在 LaTeX 使用 \includegraphics 所引用的圖檔都可以順利的由 LaTeX2HTML 來處理,但他是經由外部程式在轉換處理的,有時候會處理失誤,這時就只好做另外的處理了。

如果我們引用的是向量圖檔,包括 MetaPost 製作出來的 mps/eps 圖檔,LaTeX2HTML 可以轉換成 png(預設)或 gif(要另行指定)點陣圖,但有時圖檔的彩色較複雜時,如果想轉成透明圖,偶爾可能會失敗,這時只好手動使用 ImageMagickconvert 工具來事先轉好,而 LaTeX 文稿中引用圖檔時不使用延伸檔名,這樣一來 LaTeX 會去取用 eps 向量圖檔,而 LaTeX2HTML 則會取用點陣圖檔(png 優先),這樣就可以各取所需了。

如果講求精確性,那麼可以使用 \htmladdimg 這個指令來插入預先製作好的點陣圖檔,這時可以加入 HTML 引入圖檔時的一些控制選項參數,這樣就可以很精確的控制圖檔在 HTML 時的顯示方式。我們來看一下實際的例子:

...
﹪begin{latexonly}
\includegraphics{yourimg}  % 這是給 latex 使用的
﹪end{latexonly}
\htmladdimg[WIDTH="297" HEIGHT="297" ALIGN="LEFT" VSPACE="10" HSPACE="30"
ALT="Image yourimg"]{yourimg.png}
...

在使用 latex 指令編譯文稿時,latex 會忽略 \htmladdimg 這個指令的所有敘述,這些敘述只會在 HTML 格式出現。當然,這些可能需要手動測試調整一下才會就緒。


6.3 LaTeX2HTML 和中文的配合

6.3.1 中文式網頁

如果想使用中文式的網頁說明,請下載以下的 style 檔:

http://info.sayya.org/edt1023/tex/taiwan.perl

然後,置於 $YOURPATH/latex2html/lib/style 目錄下即可。並在同一個目錄下製作一個 taiwan.sty 的空檔案,請注意不要把這個空檔案刪除,否則轉換格式時會出錯。由於這個 package 是專為 LaTeX2HTML 而設的,所以引入時要由 htmlonly 環境包住。

\usepackage{taiwan}

這樣,網頁上所呈現的一些文字按鈕說明會是中文的,但圖形按鈕則仍然是英文。這個 taiwan.perl 只完成一半,偶爾有可能會影響圖檔的產生。

由於網頁的中文斷行會發生和 TeX 文稿一樣的情形,所以要注意按 Enter 鍵斷行所造成的英文單字間空白。

6.3.2 把中文字轉成圖檔來顯示

要讓中文字成圖檔,例如在 \mbox{}\fbox{} 的時機,由於 CJK 的編碼方式,LaTeX2HTML 會找不到原字型的實際對應位置,這時可以利用 TeX 的指令去指定字型對應,讓 LaTeX2HTML 找得到對應,就可以經由 dvips/gs 來取字轉成圖檔了。例如,本文造字的部份,由於並不在 Big-5 及 CJK 字碼裡頭,所以必需另行定義,LaTeX2HTML 當然會無法顯示,只能轉成圖檔來顯示。以下是定義的方法:

\font\newf=newfont01 scaled 1200
\def\uchr{\newf\char}
\def\Fwu{{\uchr149}}
\def\Shiuan{{\uchr150}}
\def\Kuen{{\uchr151}}

這樣一來,\Kuen 就會取 newfont01 這個字型的第 151 位置的字,不管是 LaTeXLaTeX2HTML 都可以找得到字,只不過,網頁的部份是轉成圖檔而已。請注意,這裡 scale1200 是配合文稿使用 12pt 的字,至於造字及其相關的議題,請參考第 9 章的說明。

但目前 LaTeX2HTML 對於字型轉成圖檔,由於面對的字型很多,很難取得統一的判斷方式,有時候會把字的上下多留了些空白,這樣在網頁上的顯示會和同一行的文字不協調,這可能還要更深入的去 hack,取得更通用的方式才行。但如果都是英文文件的話,就較不會發生這種情況。

當然,這個方法有點笨拙,像 cwTeX 的字碼轉換,就直接轉成取字的定義碼,這樣可以完全不必另行定義,LaTeX2HTML 也是取得到字轉成圖檔了。是不是有更理想的方式?應該是有吧!大家一起來努力。:-)

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