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

2012年7月10日 星期二

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

在文件中,如果要放入程式碼內容,用 LaTeX/LyX 是非常方便的。使用方法如下:

1. 先從選單中選 Insert -> Program Listing


2. 接著在出現的白底框中,輸入程式碼, 如下圖。如果您要用複製、貼上的方法時,貼上時請記得按住 Shift 鍵, 這樣才能貼上 Plain Text, 不會所有文字聯成一行。


3. 其實到這邊就算完成了。如果想要「美化」一下的話,再繼續下面的設定。插入程式碼,使用的是 LaTeX 的 Listings 的 Package,這個 Package 有非常多的選項可以選擇,在 LyX 中,要調整這些設定還滿容易的。空白處點滑鼠右鍵,選擇 Settings ..., 如下圖。

接著跳出的選單,列出幾個最常用的設定選項, 如下圖。


Placement 中的 Float 如果有打勾,下方空格就要設定「t/b/p/h」其中一個。t 代表放在此頁頂端(top), b 代表放在此頁底端(bottom), p 代表放在單獨一頁 (separate), h 代表就放在這裡(here)。上圖用的是 t, 代表這個程式碼要放在此頁的最頂端。

Language 的部份, 可以指定你放的程式碼是屬於何種語言 (也有 Matlab Code), 如果選定了語言,該程式關鍵字的部份會加粗。

Line Numbering 則指定是否要顯示行號。顯示行號對於在文章中要解說程式碼功能時,非常好用。Step則是指定每隔幾行要顯示,如果設定 5, 代表只有1,6,11,... 這幾行會印行號。如果起始行不想從 1 開始,該怎麼辦呢?這就算是「進階功能」,等一下說明。

Range 則是指定要印出的程式範圍。假設你貼了一個 100 行的程式,如果覺得要全部印出太大,只想印出 50~60 行就夠了,這樣可以在 First line 設 50, Last line 設 60, 則輸出的文件就只有這 11 行了。其他完整的程式碼,還是會存在 LyX 中。如果哪天你要輸出完整 Code, 把這個設定刪掉即可印出完整程式碼了。

右邊的 Style 就是設定一些字體、樣式,這邊看個人需要設定。

OK, 這些設定都完成後,輸出看看!你會看到如下圖的樣子... 
沒有任何「進階設定」的輸出文件樣子
我相信你一定不會滿意這樣的輸出結果!因為內容跟程式碼混在一起,看不出來。程式碼最好加個框,要有標題,要能夠加標籤,這樣文章中才能引用。這些額外的「進階功能」,藏在 Settings... 的 Advanced 設定中。請再開啟「進階設定」表,如下圖。


這裡分成左右兩個區域,左邊區域是說明,右邊空白處是讓你填寫自己的設定。由於 Listing 的 Package 設定眾多,全部做成 GUI 介面的話實在沒有必要,因此折衷的方法就是這裡提供說明,你按照說明的方式自行輸入設定值。當然,這裡列出的命令,也已經涵蓋了 Main Settings 裡的功能了。

先在右方的空白處輸入一個問號「 ? 」, 你就會看到左方視窗跳出說明,說明你可以用的參數有哪些。最常用的,應該就是把程式碼「加框」了。因此我用 frame=lines 這個命令,將程式碼這個範圍加上「上、下」線框。如果你想要加個方框,可以用 frame=single. 注意看下圖,在輸入 frame 之後,左方空白就已經跳出說明,說明你打的參數有哪些值可以設定。

要詳細知道每個參數代表什麼意義的話,就必須翻閱 Listing 的 Package 說明文件了。

第二個常用的功能是加上「標題」。這裡有兩種方法:

  1. caption={ 輸入你自己的標題 }
  2. title={ 輸入你自己的標題 }
第 1 種方法會像圖、表格一樣,會有個 Listing 的開頭, 如下圖; 如果是第 2 種方法,就只有標題,而不會有 Listing 的開頭文字了。

如果你在文件中,想要交互參照這個 Program Listing, 那麼你不應該用上述兩種方法放標題。
你需要在輸入程式碼一開始的地方,選用 Insert -> Caption 的功能放入標題。如下圖

這樣會多出一個標題框,讓你輸入標題,而這個標題框,就可以加入 label, 因此在文章中你就可以用 cross-reference。如下圖。
(請切記,如果 Advanced Setting 中如果有設定標題,這裡的標題框就沒有作用了!還有,Advanced Setting 裡面的 Caption 如果需要輸入底線「_」, 請加個反斜線「\_」,這樣才不會出現 compile error。)

其他的設定,請自行探索嘗試了!

輸出的結果如下圖。可以看到 Listing 1 的確放到此頁的頂端了!而且也有行號,外框為上下線。最後補充一下,Listint 2 的外框左邊方,右邊圓,用的是 frame=single, frameround=ttff
的設定。ttff 分別代表 右上、右下、左下、左上 四個角落,是方(f) 還是圓(t)。
輸出的 PDF 文件

對了!關於如果程式碼的行號若不要從 1 開始編號的話,或是程式想要分成 2 段,而行號想要繼續前面那段程式碼的行號的話,該怎麼做呢?這部份就留給有興趣的人去翻閱說明文件了!(參考 2.6 Line Numbers) 只要設定正確的話,就可以得到如下的結果。

2012年6月24日 星期日

LyX 簡易入門

這篇簡介文章提供給已經用慣 Word, 想要試用 LyX, 或是第一次剛接觸 LyX,卻徬徨不知如何下手的人。

雖然 LyX 的手冊,或是其他參考文件都已經有很詳細指引,但幾乎都是英文的。而中文的資料,幾乎都是大陸的,字體設定也大多針對簡體字。因此, 我想自己寫個簡易的入門,不僅自己留作紀錄, 也作為有興趣的人參考。

雖然我用的平台是 Linux, 但與 Windows 版本沒有差別,因此使用 Windows 的人也可以照著試做。以下範例所使用的 LyX 版本是 2.0.3 版的。

2012年3月21日 星期三

製作含有電路圖的文件

最近需要在文件中放入電路圖。我第一個想到的是用一些電路圖繪製軟體,將電路圖輸出成圖
檔,然後放入 LyX 內。這樣比較簡單、直觀,但是遇到若是要繪製「等效電路」這種圖的時候,電路圖繪製軟體就變得不太適合,反而是一些向量繪圖軟體如  Inkscape, Visio, Illustrator等等比較適合。
用繪圖軟體繪製圖案的時候,有些缺點, 例如線段要對齊、統一長度不易,需有電子零件套件庫,數學式註解不易等。尤其是註解的問題, 雖說有些向量繪圖軟體內,可以直接插入數學符號的註解,有的也可用 LaTeX 產出的數學符號做標註,但放入備註這個動作,還是需要手動調整,有時候還是很不方便。
因此,我搜尋了一下 TeX 套件庫中能夠製作電路圖的套件庫,發現還不只一個選擇。稍微比較了一下,最後選定用 circuit-macros 套件來繪製。參考了使用手冊,發現使用起來似乎不簡單。後來,稍微 Google 一下,發現巴西的 Felipe Brandão Cavalcanti 先生寫了一份淺顯易懂的說明文件, 說明在 Mac 上如何使用 (但不只 Mac, 在 Linux 上也適用,只是安裝命令不同)。按照這份文件,在 Mac 上安裝開發環境需要:

  1. 安裝 dpic 程式 (從原始碼安裝)。
  2. 安裝 circuit-macros.
按照該份說明文件,設定好開發環境之後,就可以進行測試了。若執行該文件中所提的 make tst  之後能夠產生出 PDF 檔,而且內容正常,那代表開發環境一切 OK 了!

但是該說明文件中,並沒有說明如何將電路圖放入 LyX 中。這部份我試驗了一下,發現還滿容易的:
圖 1
  1. 由 .m4 檔生成 .mps 檔。( .m4 的檔案就是描述電路如何繪製的命令)
  2. 在 LyX 中, 放入圖片時,使用 TeX Code 的方式. 輸入 \includegraphics{XXX.mps}, XXX 代表圖檔檔名, 如圖1. 
  3. 需特別注意的是,LaTeX Sources 視窗中必須要有 \usepackage[pdftex]{graphicx} 這行。 這時可能會有 2 種情況: 
    • 如果整份文件中,都沒用 LyX 的插入圖片的方式放入任何圖片,這行就不會自動加入。這時就要在 Preamble 區自己寫入這行。例如上面的例子, 就是在 Preamble 區加入「 \usepackage[pdftex]{graphics}  」
    • 如果文件中有任何一張使用 LyX 插入圖片功能置放的圖片,則 graphicx 套件會自動加入,此時 Preamble 區不用寫 \usepackage... 這行命令。如圖2. 但此時 graphic driver 需設定為 pdftex. 如圖3.
圖 2
圖 3
這樣,就可以做出一份含有電路圖的文件了。如下圖
輸出的 PDF
至於 .m4 檔如何寫才能畫圖?這部份我就是直接看範例文件來學習,並且直接拿 Examples 檔案來修改,這樣比較快了。
我摸索了約 3~4 天,終於會用,而且也繪出了滿足我需求的電路圖型。我發現繪圖的語法還滿容易了解的,而且電壓、電流標註可以完全跟 LaTeX 文件符號一樣,不會搞混。我想對於常常需要畫電路示意圖的人來說,這個工具應該值得嘗試使用一下。


好心人的分享: http://ytdp.ee.wits.ac.za/cct.html