2013年9月28日 星期六

在 LyX 中設定 xeCJK 使用正體中文字型

這篇可以算是前一篇「在 LyX 中使用本機的中文字型」的進階版。因為我發現前一篇用的實在太簡陋了,沒有善用 xeCJK 的功能,所以排列中英文都有的文件時,也不是非常方便。

因此,最近仔細研究了一下 xeCJK 的功能,發現真的是好用!尤其參考了炎龍老師的部落格,更是學到許多。

以下就是我邊研究 xeCJK, 一邊寫的筆記。

下載原始檔: xeCJK-Example.lyx

2013年9月25日 星期三

在文件中放入程式碼 --- minted 套件庫

之前寫過 在文件中放入程式碼(1)(2)(3)(4), 這篇也是要介紹在文件中放程式碼,但不像前四篇文章,全部都是使用 listings 套件庫,這裡要介紹的是使用 minted 套件庫。

使用 minted 套件庫,最大的優點就是可以排出顏色層次比 listings 套件庫還豐富的樣式。例如一段 C++ 語言的程式碼,下圖就可以明顯看出差異。

使用 minted 與 listings 套件庫編排同一程式碼
不過好看的背後,還是需要一點代價,也就是安裝步驟會稍微麻煩一點。

根據 minted 的套件說明文件,這個套件庫必須使用 Python 的一個程式, 稱作 Pygments。因此, 電腦內需要有至少 Python 2.6 版, 以及 Pygments 這個程式才能用 minted.

在 Ubuntu 下安裝很容易, 只要開啟終端機,輸入以下安裝指令:
 $ sudo apt-get install python-pygments 
這樣就裝完 Pygments 這個程式了。

至於 Windows 下該如何安裝,我就真的沒研究了,有興趣的人請直接看 minted 套件說明文件。(使用 Win 7 的人,也要注意文件中的 Known Issue)

安裝好之後,如果是撰寫 .tex 文件,編譯時的命令,需要多加個 -shell-escape 讓 latex 可以執行 Python 的程式,因此命令為:
$ latex -shell-escape filename.tex

但如果是 LyX 文件的話,這時候就需要修改一下編譯程式的設定值後,才能夠正確編譯。

開啟 LyX 之後,選 Tools > Preferences... 跳出一個如下圖的視窗。先在左側選到 File Handling, 接著在右側的 Converter Definitions 裡挑選到 LaTeX (pdflatex) -> PDF (pdflatex)。
再下方 Converter: 的文字框中,多加個 -shell-escape, 再按 Modify 確認修改。
接著就可以按 Apply,或是按 Save 永久存下。


至於 minted 套件庫的使用方法,可以直接參考說明文件,裡面都有很詳細的解說。自己試一下後,就會發現這個套件庫似乎比 listings 還容易使用了。

最後,當然還是要說一下目前發現到 minted 的缺點,就是程式碼中無法加入中文註解。就算設定了 texcl=true, 還是無法處理 CJK 的中文文件。文件中說,可以使用 XeLaTeX,不過我沒有測試, 所以下次真有需要再測試。

minted 套件測試檔案: minted_demo.zip


修正 pst-diffraction 套件庫問題

pst-diffraction 套件庫可以直接畫出繞射光的模擬圖。

我第一次看到之後,就躍躍欲試,但沒想到照著說明文件輸入程式,竟然無法輸出文件!

檢查之後才發現原來是生成 .dvi 文件的時候,發生了問題。再追查下去,發現竟然是 pst-diffraction.tex 檔案有問題!

先寫個簡單的測試檔:
\documentclass{article}
\usepackage{pst-diffraction}

\begin{document}
f=2.5, $\lambda=632\,\mbox{nm}$

\begin{pspicture}*(-3.5,-3.5)(3.5,3.5)
\psdiffractionRectangle[f=2.5, lambda=632]
\end{pspicture}

\begin{pspicture}*(-4.5,-2.5)(4.5,4.5)
\psdiffractionRectangle[IIID,f=2.5]
\end{pspicture}

\end{document}
編譯後,會發現可以生成檔案,但無法開啟。 這個問題很容易修正,先找到安裝的 pst-diffraction.tex 檔案位置。
我使用 Ubuntu 12.04, 檔案位置是:
/usr/local/texlive/2013/texmf-dist/tex/generic/pst-diffraction/pst-diffraction.tex

編輯這個檔案,找到其中三行:
\psk@ThreeDplot@zMax dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax dup \tx@ScreenCoor pop /zScale ED

在 dup 的前方,加入 \space 命令

\psk@ThreeDplot@zMax\space dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax\space dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax\space dup \tx@ScreenCoor pop /zScale ED

OK! 修改好之後,再測試剛才的檔案,編譯成功,而且也可以順利開啟檔案了。

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

2013年9月12日 星期四

LyX 中的文繞圖功能

之前寫過一篇「LyX 中文文章 文繞圖的設定方法」 , 但最近又遇到了非常詭異的問題,使我下定決定要來好好研究一下 LyX 文件中文繞圖的設定。

文繞圖(或文繞表格) 這個功能是由 wrapfig 套件所提供的,因此詳細的解說都寫在 wrapfig 說明文件中。這裡紀錄的只是解說文件中的一小部份,更詳細的說明請參考套件說明文件。


2013年9月11日 星期三

增加 TeXworks 排版編譯選項

在 Windows 或 Mac 電腦裡面, 安裝完 MikTeX 或是 MacTeX 之後,預設應該都會安裝一套 TeXworks 的編輯軟體。這套軟體對於編寫 TeX 的文件很方便,但其預設使用的編譯器是 pdfLaTeX,對於文章內有使用 PSTricks 套件繪圖的檔案,使用 pdfLaTeX 編譯會失敗。需要使用傳統的 latex + dvips + ps2pdf 至少三步驟來完成編譯程序。

但是 TeXworks 的編譯選項中並沒有這個項目,因此必須手動新增這樣一個項目。

參考了這個網站,就可以按照其中的步驟增添編譯項目了。

可以先寫個簡單的文件做測試。
%% 測試 latex + dvips + ps2pdf 編譯方式是否成功
%% Date: 2013/9/11

\documentclass{article}
\usepackage{pst-optic}

\begin{document}
There is a triangel $\triangle$ABC:  A(0,0), B(1,1), C(2,0).

\begin{pspicture}[showgrid=true](-5,-3)(5,3)
\psdots(0,0)(1,1)(2,0)    %畫點
\psline(0,0)(1,1)(2,0)(0,0)  %畫線
\uput[-135](0,0){A}  %放標籤
\uput[90](1,1){B}   %放標籤
\uput[-45](2,0){C}  %放標籤 
\end{pspicture}

\end{document}


先試著用預設的 pdfLaTeX 編譯,會得到錯誤訊息, 而且也無法生成 PDF 文件。

接下來我們就為 TeXworks 增添編譯選項讓這個文件通過編譯並生成 PDF 文件。

2013年9月9日 星期一

發現 PSTricks 好物

自從發現我電腦裡面有好用的 TeX 套件「圖書館」之後,我偶而就稍微看看裡面有什麼東西。當我在找尋畫甘特圖的套件庫時,無意間發現了 PSTricks 提供了好多繪圖套件呀!

當時,我並不清楚 PSTricks 是什麼東西,後來稍微研究一下,才發現 PSTricks 真是個好物呀!簡單來說,PSTricks 是一個繪圖套件,它提供一些命令巨集(例如: 畫點、畫線、塗色...等等),當你使用這些命令後,編譯文件的時候,PSTricks 會幫你把它轉換成 PostScript 的繪圖語言,這樣文件中就會出現圖案啦!

路人:這算什麼好物?都什麼年代了,哪裡還需要用輸入命令來畫圖?(不屑中...)

ㄜ, 我一開始的確是這麼想的啦! 只不過當我看到官方網站 PSTricks 的 Package List 的時候,突然....眼睛一亮...


咦?怎麼會跟光學系統有關?還跟示波器有關?這是什麼東西?點進去一看,嚇了我一大跳。原來這三個套件,可以讓我只用幾行程式碼,就畫出光學系統的架構圖、光學成像系統、甚至是畫出模擬示波器螢幕看到的波型。