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 環境
排版結果




2012年12月27日 星期四

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

這篇是為了改進「在文件中放入程式碼 -- (2)」而寫的。如果這篇看不懂,請先看前述的文章。

在「在文件中放入程式碼 -- (2)」這個文章中,我只放了 5 個 Program Listing, 但我需要對每個 Program Listing 做設定。這實在是一件很累人的事情。假設我想要修改某個設定,一次套用到這 5 個 Program Listing 裡面,那我就必須要逐一點開各個設定框,再修改設定值。

通常 LaTeX 不會希望使用者用這麼耗時的方法去修改一個很多地方都會用到的設定。因此,LyX 提供了一個地方,可以設定全域 (Global) Program Listing 參數。

點選 Document -> Settings... 之後,跳出選單,找到如下圖的設定, 自行輸入設定值。(這裡我就照抄前份文件的設定).

接著刪除掉各個 Program Listing 裡面的設定, 變成空白!這樣,以後文章插入的 Program Listing, 都會套用全域的設定值。

如果某個 Program Listing 就是要特別不一樣的話,那就在自己的 Program Listing 做自己的設定。

例如,前份文件的範例檔,我想把 Listing 1 的部份,修改為:(1). 註解字要變成 cyan 的顏色, (2). 外框要有陰影效果, 我只要輸入以下的 Local 設定即可。這裡的 Local 設定,會蓋掉 Global 的設定,因而達到「微調」的效果。

這部份的範例檔案可以在此下載

2012年10月22日 星期一

在 LyX 中使用本機的中文字型

之前介紹使用 LyX 製作中文文件時,如果沒有特別安裝字型,只使用 LaTeX-CJK 的字型的話,就只有兩種中文字體 (bsmi, bkai) 可以選擇。
如果想要直接使用自己電腦上已有的中文字體的話,那該怎麼辦呢?

這時候就可以用 XeTeX 了。

我本來以為在 LyX 中使用 XeTeX 很麻煩,但這幾天試了一下,發現其實很簡單。
以下我以在 Linux (Ubuntu 12.04) 環境為例,從安裝字體開始,逐一解釋我的步驟。

安裝中文字體

在 Linux 中要安裝中文字體,可以安裝 cwTTF 系列字體。我是從這個專案網站下載 5 個 .ttf 的檔案,點開後 (如圖1), 按右下角的「Install」,即可將字體安裝到 ~/.fonts 目錄下。
我總共安裝了「明體、楷體、黑體、圓體、仿宋體」五種中文字體。
圖 1.  Ubuntu 內的字體瀏覽器
注意: 當 LyX 內要指定中文字體名稱時,要使用如圖1 右上角 Name: 後面接的名稱,而不是 ~/.fonts 內的檔案名稱!

2012年9月9日 星期日

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

之前介紹過如何在文章中放入程式碼,但我用的方式是在文件中放入一個區塊,並將程式碼貼上。這種方法對於一次要附上「一堆」程式碼的時候,非常不方便。尤其是程式可能正在修改中,常常會更動內容,要時常「複製」「貼上」到 LyX 中根本是不可能的事情。

因此,這部份介紹如何使用「插入」的方式連結欲放入的程式碼。

這裡的技巧是某次我要 trace 一個程式,整個程式碼多達 10 多個副程式,就算用一般程式編輯器來列印,也要「開啟」「列印」按10多次,而且如果我修改了某個程式碼列印出的樣式(例如改變紙張大小、邊界、文字等等),也無法改一次 10 幾個檔案全部套用。
後來我想到將程式碼貼到 Word 中再列印,但 Word 裡面很難加上程式行號,把關鍵字標注出來,所以試了一下就放棄了。
後來我想到利用 LyX 來列印程式碼,發現還滿好用的,所以在此介紹一下。

2012年8月31日 星期五

如何更改一些固定的名稱

在製作中文 LaTeX 文件的時候,常常需要修改一些內定的名稱。例如: Section 1, Content, Figure 1, Table 1 ...  等等。

在 LyX 中要對整個文件進行「改名」的設定,需要在 Preamble 區中輸入命令。

在 LyX 的功能選單上選擇 Document, Settings..., 接著選擇左方的 LaTeX Preamble, 如下圖

一開使如果沒有輸入過資料,應該是一片空白的。

修改固定名稱的語法很簡單, 語法為:

 \renewcommand{舊名稱}{新名稱}

這裡的 「舊名稱」 是要輸入下面列出的專有名稱 (標準 LaTeX 文件):

\abstractnameAbstract
\alsonamesee also (makeidx package)
\appendixnameAppendix
\bibnameBibliography (report,book)
\ccnamecc (letter)
\chapternameChapter (report,book)
\contentsnameContents
\enclnameencl (letter)
\figurenameFigure (for captions)
\headtonameTo (letter)
\indexnameIndex
\listfigurenameList of Figures
\listtablenameList of Tables
\pagenamePage (letter)
\partnamePart
\refnameReferences (article)
\seenamesee (makeidx package)
\tablenameTable (for caption)

例如,如果想將文件中所有的圖名稱 Figure. 1 改為縮寫 Fig. , 則可以輸入:
\renewcommand{\figurename}{Fig.}

有些文件樣板有自己特有的「舊名稱」,這時候如果要改變,需要查一下相關說明文件才能知道了。

參考資料: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=fixnam