2013年12月13日 星期五

LyX 模組功能

LyX 雖然功能還滿多的,但是也只能涵蓋整個 LaTeX 的一小部份。像前一篇在練習 csvsimple 的時候,我會用到 tcolorbox 套件,需要將內容放在一個 tcolorbox 的時候,我就必須插入 TeX Code 環境,自己輸入
\begin{tcolorbox}
  ...內容...
\end{tcolorbox} 
當需要放很多這種環境時,一直複製、貼上,也是很煩人的。
研究了一下,終於大概知道該如何簡化這種煩人的動作,關鍵就在於 LyX 的模組功能(Module)。

LyX 的「模組」,就類似於 LaTeX 的 styles/packages。一份文件只能指定一種 document class, 但卻可以添加許多的樣式或套件以美化文件。在 LaTeX 中需要自己手動引用這些樣式或套件;在 LyX 中,可以自己在 LaTeX Preamble 撰寫引用命令,然後在 LyX 中插入 TeX Code 完成所需功能。

但如果在 LyX 中一直插入 TeX Code,這樣也不需要 LyX 了。因此 LyX 設計了「模組」功能,讓一些功能,能夠透過增加模組,就自動增加了某些 LaTeX 的功能,而且可以透過 LyX 的圖形介面使用 LaTeX 。加入模組後,模組會自動在 Preamble 區輸入相關設定,因此有的時候就算不知道想要使用的套件名稱,看到模組裡面有,直接增加模組,馬上就可以用了。
而且,使用者可以自己添加模組設定,加入自己常用的功能。以後如果需要某個功能時,直接加入模組,不用每次都在 LaTeX Preamble 自己手動輸入程式碼。

2013年12月6日 星期五

LaTeX 的「合併列印」--- csvsimple 套件

幾個禮拜前,我需要列印一份 Excel 的資料(這只是泛稱,不代表真的 Microsoft Office 的 Excel 檔案),但是希望格式可以工整一點,因此我想到利用 Word 的合併列印功能。但因為現在都用 LibreOffice, 所以我自然希望用 LibreOffice 裡面的「合併列印」功能,完成這個表單。試了一陣子,發現 LibreOffice 的合併列印功能實在太陽春了,似乎只能印標籤、信件等等,實在不是很好用。

後來我突然想到,不知道能否用 LaTeX 來做?搜尋一下,果然發現有好幾個套件都支援從 CSV (逗點分隔值格式) 抓取資料,稍微瀏覽一下各個套件的範例檔,我覺得 csvsimple 似乎比較好用一點,我就決定來試試看這個套件。

當然一邊看說明文件,一邊照著練習,看完說明文件也剛好做完一個小紀錄文件。

在看說明文件的時候,突然發現 csvsimple 套件的說明文件做的好精緻呀!後來查看說明文件的原始碼,才知道它另外用了 tcolorbox 的套件,所以我也如法炮製試試看。也順便發現了另外一個好用的套件 tcolorbox 。

csvsimple 套件在 LyX 中使用的時候,需要輸入很多 TeX Code,雖然我一開始很排斥看到一大堆 TeX Code 出現在文件中,但習慣之後就覺得,csvsimple 這麼多種功能變化,要做成圖形介面也是很不容易的,所以稍微辛苦,查看一下說明文件再輸入 code,也是可以接受的。

另外說明一下,LyX 原始檔使用 xeCJK 排中文(會用到 5 種 cwTeX TTF 字型),電腦內如果沒有這 5 套字體,會無法排版。可以參考前幾篇介紹 xeCJK 的部份安裝字體。改用 xeCJK, 是因為我原先用 CJK 排的時候,程式碼內只要有中文字的時候,都會出錯,讓我很沮喪。後來轉用 xeCJK 時,輕輕鬆鬆就處理完,也讓我慢慢愛上用 xeCJK 排中文文件了。

下載原始檔 test_csvsimple.zip

2013年12月4日 星期三

使用 CJK 放入含有中文字的程式碼的詭異問題

最近又需要寫個有放入程式碼的文件,程式碼中含有中文。依照之前的經驗,我只需要在 Document > Settings... > Listings 的空白處設定 extendedchars=false, 輸入的程式檔案內有中文都可以正常顯示出來。

但是最近發現,如果我放入一個 .csv 格式的檔案,中文字就會亂跑了。
嘗試著使用 listingsutf8, inputenc 等套件,加入 inputencoding=utf8  命令,都沒用。

百試不得其解下,最後只好改用 xeCJK 套件試試看。一排版...完全正常!
這真的是個詭異的問題! 研究了半天,也找不到原因所在。
我也只能暫下一個結論:「如果用 CJK 排版含有中文的程式碼有問題時,可以改用 xeCJK 試試看。」

使用 xeCJK 套件處理中文,CSV 檔案正常顯示內容。

使用 CJK 套件處理中文,CSV 檔案內容出錯。

文件檔下載

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 的時候,突然....眼睛一亮...


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

2013年8月24日 星期六

用 LaTeX 畫(非正規)甘特圖

有位朋友的公司主管,想要做計畫稽核,因此開始導入甘特圖 (Gantt chart),希望底下的部屬能將平日負責的案件進度,畫在甘特圖上,主管也好追蹤進度。

由於主管與部屬分屬不同兩地,因此該主管便希望能利用 Google Doc 裡面的功能,建立甘特圖。因此該主管開始嘗試著使用 Gantter for Google Driver 這個 web 界面的應用程式,並且推廣給部屬們使用。

原本這是美事一樁,善用現成的資源,提高生產力。但後來,事情開始轉變了。

不知道是該主管的主管看不懂,還是其他管理單位的人員看不懂甘特圖,他們後來決定放棄現成的甘特圖不用,要自己發明一套「新甘特圖」。而且因為 Google Doc 上沒有其他現成軟體可以支援這種「新甘特圖」,因此主管便要求部屬們「腦力激盪」,用 Google Doc 裡面的試算表畫出「新甘特圖」。

什麼叫做「新甘特圖」呢?

2013年8月22日 星期四

semaphore(旗語) 字型

還記得國中童軍課的時候,學過一套旗語,可以比出 0~9 的數字。再搭配一本中文電報碼的小冊子,找出對應的 4 位數字的中文字,就可以透過旗語傳送中文字訊息了。

當然這個是在沒有手機的年代,在大聲喊叫對方聽不到的狀況下,而且還需要雙方都有一本中文字電報碼的小冊子,這樣用旗語來傳遞訊息才行得通。

當時我年紀小,只知道「數字」的旗語。今天無意間在瀏覽 TeX 的說明文件的時候,意外發現還有專門給「旗語」用的字體。而且旗語不只是數字,還有英文字母。

這個字體稱為 semaphore。要使用的話,要先確定有安裝這個字體。

先在 LyX 文件的 preamble 區定義新字體的名稱, 一個稱為 smfr,另外一個稱為 smfpr。
\font\smfr=smfr10
\font\smfpr=smfpr10   %Person Style

接著在內文區中,使用 \smfr 或 \smfpr 的 TeX Code 來轉換字母或數字了, 旗語的字母沒有分大小寫, 所以 A 或 a 對應的旗語是一樣的。

例如英文字母旗語,使用 \smfpr 的字型:


由於這個套件庫實在太特殊,應該非常非常少人會用到(包括我也是),所以就留個範例檔以後有需要玩遊戲製作密碼的時候,再來參考了。

下載範例文件 semaphore.zip

clock 套件庫

我無意間發現一個小巧可愛的套件庫 --- clock,這個套件庫可以「畫出時鐘」,表示時間。

使用方式:
在 LyX 的 Preamble 區輸入
\usepackage{clock}
接著可以設定要不要畫出時鐘的外框:
\ClockFrametrue  % 畫出時鐘外框
\ClockFramefalse % 不畫出時鐘外框(預設值)
還可以設定刻度樣式, 當然這個設定值也是可以放在內文區做個別指定。
\ClockStyle=n %設定鐘面刻度的樣式,n=0~3 數值

內文區中如果要放入時間,必須使用輸入 TeX Code 的方式。按 Ctrl-L, 接著輸入:
\clock{時}{分}
12小時制或 24小時制的時間都可以。 如果要顯示編譯文件時的時間,要畫出時鐘則用:
\clocktime
要顯示數字的時間則用:
\texttime

下表說明了各個不同設定值以及排版出來的樣式結果。
clock 是一個簡單小巧的套件庫,我覺得很有趣且有用。

下載範例文件檔 TestClockPackage.zip

Linux 中的說明文件總覽

在 Linux 作業系統中安裝完 TeX Live 時,一般都會連著說明文件一起安裝。以前需要查詢 TeX Live 的套件說明時,我都是直接 google 類似的套件,很少從自己的電腦搜尋。

前幾天,在一個沒辦法使用網路的環境下,需要查閱一個套件資料的說明,我只好找看看自己電腦裡面有沒有該套件的說明。搜尋之後,發現自己電腦藏有一個非常好用的「圖書館」我都不自知呀  =_=!(汗...)


在 Ubuntu 的環境下,說明文件的可能路徑為:

/usr/share/texlive/doc.html    (使用 apt-get install 的方式安裝 texlive 的文件路徑)
/usr/local/texlive/<版本號>/doc.html    (自行從網站下載 texlive 安裝的文件路徑)

<版本號> 代表安裝的 texlive 版本,例如我安裝的是 Tex Live 2013, 因此文件路徑為
/usr/local/texlive/2013/doc.html

用瀏覽器開啟上述的 doc.html 檔案後,就可以看到說明文件總覽。如下圖。



點選上圖中紅色框框住的套件庫名稱,會開啟說明文件的「資料夾」,裡面可能會有範例的 .tex 文件等。如果不想這麼麻煩,可以直接點右側詳細說明中的 .pdf 連結。

如果點了連結跳出找不到文件的錯誤訊息,代表電腦裡面沒有這個套件,要再安裝後才有了。

這個 doc.html 檔案,可以說是電腦裡的 TeX Live 文件圖書館。我就把這個網頁做個書籤,下次要查套件庫的說明文件時,一樣開啟瀏覽器,只不過先查查自己電腦裡面的文件庫,這樣就算沒網路可用也不用害怕了。:D

補充:
如果已經知道文件名稱了,或是想要搜尋看看說明文件中是否有類似的關鍵字, 可以在命令列使用 texdoc 的命令,直接顯示出說明文件。
例如: 想搜尋畫甘特圖(Gantt)的套件說明文件,可以輸入:
  texdoc gantt
就會直接開啟搜尋結果第1順位的文件。
但我發現這樣可能會漏掉一些真正想找得文件,因此可以輸入:
  texdoc -s gantt
顯示所有搜尋結果的方式,列出有 "gantt" 字眼的文件,再自行選擇要開啟的文件,這樣字比較方便了。

2013年7月15日 星期一

處理單位的套件 siunitx 簡介

最近將 TexLive 更新到 2013 版的時候,發現有個滿有趣的套件 --- siunitx, 這個套件專門處理符號單位的。試用了一下,發現對於科學文件或技術文件還滿適合的,我就把試用過程中的一些心得紀錄起來。以後遇到要輸入單位的時候,如果忘記,還可以回來翻翻這個紀錄。

試用 siunitx 套件的時候,我突然有種心得,連「單位」這種「小事情」,都會有專門的套件來處理,難怪一些工業先進國的技術水準,是台灣難以追趕的。因為連技術文件是否清晰易懂,都會有人努力研究改進。當前人傳承清晰易懂的文件給後人,後人站在前人的基礎上再往前邁進,一代一代的進步,才有現在的成就。
我們這種工業後進國,只能努力學習人家的精神,期許一代比一代更好了。

廢話太多了,以下是 PDF 紀錄檔.  LyX 的原始文件可點此下載

2013年6月24日 星期一

好用的 Branch(分支) 功能

有很多時候,我們都需要寫內容類似但層次不同的文件。例如一份物理學講義,寫給一般大眾看的,跟寫給研究生看的,內容雖然都是物理學,但內容的難易度肯定會不一樣。

針對這種情況,LyX 有個容易使用而且方便的「Branch」(分支) 功能,可以應用,讓作者可以僅使用一份相同的 LyX 文件,就產出內容不同的 PDF 文件(甚至檔名都自動幫你處理好了)。

假設有位教授要編寫物理學講義,他必須針對三種對象授課,教材內容需要針對聽眾的程度而分級。利用 LyX 的分支功能,他就能只編寫一份 LyX 文件,在文件中設定好哪些內容是要給誰的,最後輸出文件,就可以快速的產出三份針對不同對象的講義。

另外一個常用到的時機,就是教師出考卷的時候了。有些老師習慣在考試之後,公佈答案給學生看。如果老師需要編寫2份不同的文件,這樣就太累了。用 LyX 就可以避免掉這樣的困擾,出題目的時候,題目、答案一起寫完,接著把答案的部份設定分支,輸出測驗卷時只有出現題目。等考試過後,直接輸出一份題目+答案的文件。

以下我就以出考卷為例子,說明如何使用分支的功能。

2013年6月22日 星期六

LyX 簡易入門 (2)

這篇補充 LyX 簡易入門 沒提到但是在文章或書籍中常常需要用到的四個部份:目錄參考書目附錄索引
本範例接續「LyX 簡易入門」所製作的文件進行示範,使用的 LyX 為 2.0.6 版。

A. 目錄
在 LyX 中放入目錄非常簡單,只要動動滑鼠就完成了。
先將游標移到你想放目錄的地方,接著從選單中選擇「Insert」→「List/TOC」 (TOC 是 Table of Content 的簡寫),如下圖,完成!夠簡單吧! :D
其他插入圖目錄 (List of Figures)、表目錄 (List of Tables) 都一樣,其餘的就自行試試看了。
圖1. 選單「Insert」的選項

2013年1月3日 星期四

在文件中放入程式碼 -- (4)

補充說明, 如果程式碼中有註解, 而且是「中文」的註解, 這時後只能使用「在文件中放入程式碼 -- (2) (3)」兩份文件提到的方式,用插入檔案的方式,並且在 Program Listing 的 setting 中額外輸入一個選項:
extendedchars=false
才能順利 compile 文件及顯示中文
listings 套件可以處理程式碼內,包含 ASCII Code 128~255 的字元 (extended ASCII),但是需要你「明白」的告訴 listings 「你要把這些字元正確的印出來」, 因此有這個 extendedchars 選項。
如果設定 true, 代表程式碼中有 ASCII 128~255 的字元要顯示。但中文字都是復合編碼, 因此需要明白設定 false 才能避免 listings 套件去處理這些字元。

如果註解的中文,想要變換顏色,這時候要設定 texcl=true, 啟動「讓註解跳脫(escape) 到 LaTeX 去處理」。
開啟這個設定後,當 listings 套件遇到註解符號後,註解字符會印出來,接著會將後面(到行尾)的所有內容交由 LaTeX 去處理,LaTeX 就可以用顏色套件,套用你所設定的樣式後印出。
這時候要特別注意,如果註解中有出現反斜線的字眼,這會被視為 LaTeX 的命令!如果是無意放進去的,可能會導致排版異常。
一般來說, 開啟 texcl 功能設定後,extendedchars 使用預設值即可。
但如果是如 C++ 這種語言,可以接受 // 為註解,也可以接受 /*  */ 為註解的語言,這時候就要設定 extendedchars=false 才行了。
只是 C++ 程式碼中如果有「/* ... */」這種註解,中間的中文不會變色,目前無解中,所以建議採用「//」 這種註解方式。

假設我希望程式中中文註解字的顏色要換成紅色,這時可以這麼設定:
commentstyle={\color{red}}
texcl=true

目前我自己試驗過覺得一個還不錯的設定值, 紀錄於此。
backgroundcolor={\color{yellow!30}}  %設定背景顏色為 30% 黃色
basicstyle={\scriptsize}    %設定文字的樣式
breaklines=true             %設定長文字行的時候要自動換行
columns=flexible            %設定字符寬度為可變的
commentstyle={\color{red}}  %設定註解顏色為紅色
extendedchars=false         %不處理 extended ASCII 字元
frame=single                %加外框
keywordstyle={\color{blue}} %程式碼的關鍵字以藍色字體顯示
language={PSTricks}         %程式碼的語言
numbers=left                %行號標注在左方
numberstyle={\scriptsize\color[rgb]{0.5,0.5,1.0}\oldstylenums} %行號字體
tabsize=4                   %程式碼中 Tab 鍵的空格數
texcl=true                  %開啟 LaTeX comment line 功能


排版結果如下圖:


「在文件中放入程式碼 -- (1)」中所使用的方法,無法用這裡的設定放入中文註解。後來我發現,原來是 LyX 的「先天限制」。

因為,當在 LyX 插入一個 Programming List 的時候,LyX 會自動加入 \inputencoding{latin1} ,這會讓程式碼內有任何 UTF8 編碼的文字,都無法處理。
我不知道新版 LyX 會不會改進,但到 2.0.6 版都有這個問題。

多了這行 \inputencoding{latin1} 使得程式碼內不能放中文註解
目前我的解決辦法就是,自己插入 TeX Code, 輸入程式碼,就可以使用中文註解了。
\begin{lstlisting}
  ... 程式碼
\end{lstlisting}
自行建立 lstlisting 環境
排版結果