2013年9月24日 星期二

中文目錄與 CJK 的問題

最近在寫一個文件,撰寫的時候都沒有問題。等到全部寫完之後,加上「目錄」,一編譯...失敗!

拿掉「目錄」,再編譯,成功!PDF 又完整呈現出來!

真的是太詭異了!

為了解決這個詭異的問題,我研究了一下到底是哪裡出問題?以及該如何解決?終於, 稍微發現問題所在,以及解決方法。

如果使用中文的章節名稱,在製作目錄的時候,會有問題。解決辦法是,在文章的最末,加上一行 Clear Page 的命令。

下圖是編譯失敗的畫面:
編譯失敗的文件檔

編譯失敗的訊息

文件結束前,加上 Clear Page (從 Insert > Formatting 選擇), 就可以編譯成功了。

不過我發現,有時候就算在文章最末加上 Clear Page 也沒用。這時候可能跟文章內容, 或版面大小設定有關了。

由於一般的 .tex 如果需要製作目錄,一般的流程是使用 latex 程式對 .tex 檔案編譯 2 次。

編譯2次的目的,就是因為第一次編譯的時候,程式會建立一個 .toc 的目錄檔案,檔案內存放各個 Section, subsection 等要放在目錄裡面的內容。

通常 LyX 文件如果沒有加入目錄的時候,可以編譯成功,而加入目錄之後,編譯失敗。這樣應該就是 LaTeX 沒有正確生成 .toc 檔案的緣故了。

實際上,只從 LyX 實在很難看出 TeX 建立目錄的時候,到底哪個章節名稱發生錯誤了?

因此,我採用迂迴戰術,先將 LyX 文件匯出成一般的 LaTeX (plain) 檔案, 如下圖:


假設文件名稱為 filename.tex, 先確定同目錄下,沒有 filename.toc , 再於 .tex 檔案同目錄下,輸入:
 $ latex filename.tex
這時候編譯程式會「正常」的跑完,不會有什麼錯誤訊息。但是再輸入一次上述命令編譯文件後,就會發生錯誤了。

其實,開啟 filename.toc 就可以看到問題所在了. 如下圖,沒有加上 \clearpage 命令,編譯出的 filename.toc 文件。可以看到裡面夾雜了一大堆亂七八糟的訊息。

錯誤的 .toc 文件
如果是編譯有加上 \clearpage 命令的 .tex 文件, 打開生成的 .toc 檔案就可以看到正確的 .toc 檔案應該是像下圖這樣。

正確的 .toc 文件
因此,如果中文章節名稱非常多,在文件末端加上 Clear Page 還是無法生成目錄的話,這時候可以檢查看看 .toc 文件是在哪個部份出錯了?在該處加上 Clear Page 命令,或許就能夠解決無法生成目錄的問題。

最後,再提醒一下,如果希望 LaTeX 要重新生成 .toc 檔案的話,記得要將原來的 .toc 檔案刪掉。要不然就算原始程式再怎麼改,都還是會用舊的 .toc 檔案進行編譯的。


參考網站:
http://tex.stackexchange.com/questions/34108/error-compiling-cjk-with-tableofcontents-and-makeindex

測試用檔案: test_toc.zip

沒有留言:

張貼留言