• 沒有找到結果。

大家來學

N/A
N/A
Protected

Academic year: 2022

Share "大家來學"

Copied!
178
0
0

加載中.... (立即查看全文)

全文

(1)

大家來學 L A TEX

Version 1.0

2004 年 3 月 8 日

By Edward G.J. Lee 李果正 Email : [email protected] 本教學文件之製作,部份接受下列計劃補助:

行政院研考會委辦 「政府機關資料文件交換之電子檔案格式應用研究」

(2)

目 錄

1 先來說一些故事 . . . . 1

1.1 Knuth 教授的生平簡介 . . . 1

1.1.1 TAOCP(The Art of Computer Programming) . . . 3

1.2 那麼,LATEX 又是什麼呢? . . . 3

1.3 一般人對LATEX 的迷思. . . 4

1.4 本文的重點方向 . . . 6

2 行前準備 . . . . 7

2.1 Unix-like 系統 . . . 7

2.2 MS Windows 系統 . . . 8

2.2.1 cygwin 環境. . . 8

2.3 Mac OS X 系統 . . . 8

2.4 商業維護的TEX/LATEX 系統 . . . 9

2.5 選個順手的編輯器 . . . 9

2.5.1 Vim. . . 10

2.5.2 GNU Emacs/XEmacs. . . 10

2.5.3 NEdit. . . 10

2.5.4 WinEdt. . . 10

2.5.5 UltraEdit . . . 10

2.5.6 Kile. . . 11

3 TEX/L

A

TEX 語法概說 . . . . 12

3.1 LATEX 文稿的處理流程 . . . 12

3.1.1 總結一下處理流程 . . . 13

3.2 LATEX 的特殊專用符號 . . . 13

3.3 LATEX 排版上的一些規範或慣例. . . 14

3.3.1 字型的相關術語 . . . 14

3.3.2 一般性的遊戲規則 . . . 16

3.3.3 針對標點符號的遊戲規則. . . 17

3.4 LATEX 的文稿結構 . . . 21

3.4.1 環境(environment) . . . 21

3.4.2 最簡單的LATEX 的文稿結構 . . . 21

3.4.3 preamble 區可以放些什麼? . . . 22

3.4.4 章節結構 . . . 23

(3)

目 錄 目 錄

4 實際上排版玩看看 . . . . 25

4.1 簡單的實例. . . 25

4.1.1 關於換行 . . . 26

4.1.2 關於縮排 . . . 26

4.2 加入章節標題. . . 27

4.3 加入title page 資訊 . . . 28

4.4 加入目錄(Table of Contents). . . 29

4.5 加入摘要(abstract). . . 29

4.6 加入註解. . . 30

4.6.1 腳註(Footnote) . . . 31

4.6.2 邊註(Marginal note) . . . 31

4.7 字型的相關調整 . . . 32

4.7.1 LATEX 對字型的屬性描述. . . 32

4.7.2 調整字族、字型系列、字形的指令 . . . 34

4.7.3 相對字型大小的調整. . . 37

4.7.4 絕對字型大小的調整. . . 37

4.8 原文照列. . . 38

4.8.1 原文照列指令 . . . 38

4.8.2 原文照列環境 . . . 39

4.9 加入中文. . . 40

5 空間與位置 . . . . 42

5.1 LATEX 中使用的度量單位 . . . 42

5.1.1 絕對單位 . . . 43

5.1.2 相對單位 . . . 43

5.2 版面大小. . . 43

5.2.1 版面圖解 . . . 44

5.2.2 紙張大小 . . . 46

5.3 調整橫向空間. . . 46

5.3.1 調整橫向空間的指令. . . 46

5.3.2 調整橫向空間的環境. . . 47

5.3.3 引文環境 . . . 48

5.4 調整縱向空間. . . 50

5.5 條列環境. . . 52

5.5.1 項目式條列環境(itemize) . . . 52

5.5.2 列舉式條列環境(enumerate). . . 53

5.5.3 敘述式條列環境(description) . . . 53

(4)

目 錄 目 錄

5.6 線框 . . . 54

5.6.1 直線(rule) . . . 54

5.6.2 文字底線(underline) . . . 55

5.6.3 方框(box). . . 55

5.6.4 段落方框 . . . 57

6 L

A

TEX 的標準文稿類別 . . . . 59

6.1 LATEX 類別的宣告 . . . 59

6.2 類別的選擇性參數 . . . 60

6.3 類別的種類. . . 61

7 巨集套件 . . . . 62

7.1 一般套件的使用 . . . 62

7.2 LATEX 官方文件中的標準巨集套件. . . 63

7.2.1 alltt. . . 63

7.2.2 doc . . . 63

7.2.3 exscale . . . 63

7.2.4 fontenc . . . 64

7.2.5 graphpap . . . 65

7.2.6 ifthen . . . 66

7.2.7 inputenc. . . 66

7.2.8 latexsym . . . 67

7.2.9 makeidx. . . 67

7.2.10 newlfont. . . 67

7.2.11 oldlfont . . . 67

7.2.12 showidx. . . 67

7.2.13 syntonly. . . 68

7.2.14 tracefnt . . . 68

7.3 LATEX 官方文件中的工具組 . . . 68

7.3.1 AMS-LATEX . . . 68

7.3.2 babel . . . 69

7.3.3 cyrillic. . . 69

7.3.4 graphics. . . 69

7.3.5 psnfss. . . 69

7.3.6 array . . . 69

7.3.7 calc . . . 70

7.3.8 dcolumn. . . 70

7.3.9 delarray. . . 70

7.3.10 hhline. . . 70

7.3.11 longtable . . . 70

7.3.12 tabularx. . . 70

(5)

目 錄 目 錄

7.3.13 afterpage . . . 71

7.3.14 bm . . . 71

7.3.15 enumerate. . . 71

7.3.16 fontsmpl. . . 72

7.3.17 ftnright . . . 72

7.3.18 indentfirst. . . 73

7.3.19 layout. . . 73

7.3.20 multicol. . . 73

7.3.21 rawfonts. . . 74

7.3.22 somedefs . . . 74

7.3.23 showkeys . . . 74

7.3.24 varioref . . . 74

7.3.25 verbatim . . . 74

7.3.26 xr. . . 74

7.3.27 xspace. . . 75

7.3.28 theorem. . . 75

7.4 巨集套件何處尋? . . . 75

8 表格的處理 . . . . 77

8.1 表格的種類. . . 77

8.2 tabbing 環境. . . 78

8.3 tabular 環境 . . . 79

8.3.1 tabular 表格的基本結構 . . . 79

8.3.2 tabular 環境對欄位的調整 . . . 80

8.4 array 巨集套件. . . 83

8.5 tabularx 巨集套件 . . . 83

8.6 表格線條粗細的控制(booktabs) . . . 85

8.7 彩色表格(colortbl). . . 86

8.7.1 color 巨集套件. . . 86

8.7.2 colortbl 的主要指令 . . . 87

8.8 表格的註解(threeparttable) . . . 88

8.9 小數點對齊(dcolumn) . . . 88

8.10 大型表格(longtable) . . . 90

8.10.1 太寬的表格 . . . 90

8.10.2 太長的表格 . . . 90

8.11 浮動環境. . . 91

8.11.1 基本的浮動環境 . . . 91

8.11.2 浮動環境選項參數 . . . 92

(6)

目 錄 目 錄

9 圖形的處理 . . . . 93

9.1 圖形的種類. . . 93

9.1.1 點陣圖形 . . . 93

9.1.2 向量圖形 . . . 94

9.2 繪圖工具. . . 94

9.2.1 原生繪圖工具 . . . 94

9.2.2 外來繪圖工具 . . . 96

9.2.3 圖形轉換工具 . . . 98

9.3 picture 環境 . . . 99

9.3.1 進入picture 環境 . . . 100

9.3.2 picture 環境的繪圖指令 . . . 100

9.3.3 簡化座標位置 . . . 102

9.3.4 epic 巨集延伸的指令與環境 . . . 104

9.4 PSTricks 及 PDFTricks 巨集套件. . . 105

9.4.1 PSTricks 的組成巨集 . . . 106

9.4.2 PDFTricks 的使用. . . 107

9.5 METAPOST 使用簡介. . . 108

9.5.1 如何編譯METAPOST 圖檔文稿? . . . 108

9.5.2 METAPOST 文稿的基本結構. . . 109

9.5.3 METAPOST 的九種基本資料型態. . . 110

9.5.4 METAPOST 常用的指令及函數. . . 112

9.5.5 和LATEX 的配合. . . 115

9.5.6 在METAPOST 中使用中文 . . . 116

9.5.7 更多的METAPOST 的實例 . . . 119

9.6 圖形的引入. . . 119

9.6.1 引入外來圖檔的方法. . . 119

9.6.2 includegraphics 指令的選項參數. . . 121

9.6.3 指定圖檔的搜尋路徑. . . 122

9.6.4 圖文的旋轉 . . . 122

9.6.5 圖文的縮放及延展 . . . 123

10 數學排版 . . . . 125

10.1 進入數學模式(math mode)的方法 . . . 125

10.1.1 隨文數式(math inline mode) . . . 126

10.1.2 展式數式(math display mode). . . 127

10.1.3 在數學模式中的一些遊戲規則 . . . 127

10.2 數學符號. . . 129

10.3 各種數學式子的書寫方法 . . . 129

10.3.1 分式(fraction). . . 129

10.3.2 上下標 . . . 131

(7)

目 錄 目 錄

10.3.3 根號. . . 131

10.4 矩陣(array) . . . 131

10.4.1 矩陣方程式 . . . 133

10.5 定理 . . . 134

10.5.1 原始LATEX 的定義. . . 134

10.5.2 amsthm 巨集套件 . . . 135

10.6 數學模式中的字型及空間調整. . . 136

10.6.1 數學字體的改變 . . . 136

10.6.2 數學模式中調整間距. . . 136

11 一篇文章、一本書的完整結構. . . . 138

11.1 目錄(Contents) . . . 138

11.1.1 更改目錄標題名稱 . . . 138

11.1.2 目錄的深度 . . . 139

11.1.3 額外的目錄 . . . 140

11.2 交互參照(Cross References) . . . 140

11.2.1 一般的交互參照 . . . 140

11.2.2 超連結交互參照(hyperlink) . . . 141

11.3 索引(index) . . . 142

11.3.1 索引的結構及編譯 . . . 142

11.3.2 索引值的製作 . . . 142

11.3.3 更改索引標題 . . . 144

11.4 參考文獻(Bibliography) . . . 144

11.4.1 thebibliography 環境 . . . 144

11.4.2 更改標題名稱 . . . 145

11.4.3 BibTEX 簡介 . . . 146

11.5 附錄(Appendix) . . . 148

11.5.1 改變附錄的標題 . . . 148

11.6 大型文稿的維護 . . . 148

11.6.1 input 和 include 的差異 . . . 150

11.7 裁切記號(crop marks) . . . 150

12 後記 . . . . 151

13 GNU 自由文件許可證原文 . . . . 154

參考資料 . . . . 162

使用許可證聲明 . . . . 163

索引 . . . . 163

(8)

第 1 章 先來說一些故事

TEX 是 Donald E. Knuth1 教授的精心傑作,它是個功能非常強大的幕後排版系統,含有 彈性很大,而且很低階的排版語言。當初,是因為 Knuth 教授在寫他的大著 TAOCP(The Art of Computer Programming) 時,發覺書商把他書中的數學式子排得太難看了,於是決 定自行開發一個非常適合排數學式子的排版語言,這就是 TEX 系統的來由。

不僅僅是談到 TEX 一定會提到 Knuth 教授,只要提到排版,沒有人可以忽略他的 TEX 所 帶來的變革、影響,甚至 TEX 已經 20 幾歲了,仍然深深影響著排版界及排版軟體,可見 這個排版軟體真的是非同小可。

1.1 Knuth 教授的生平簡介

1938.01.10 誕生。Milwaukee, Wisconsin; U.S. citizen。

1956 進入凱思工學院(Case Institute of Technology)學習物理。

1960 畢業後進入加州理工學院(California Institute of Technology)研究所,此 時轉向數學領域的研究方向。

1961.06.24 和 Nancy Jill Carter 結婚。他的中文名字是高德納,他老婆名叫高精蘭,老 婆小他一歲。兩個小孩,一男一女。中文名字是1977 去中國大陸時取的。

1963 拿到 Ph.D.,並留校任教。

1968 開始任教於 Stanford 大學,資訊科學系(Computer Science)。同年開始撰寫 名聞遐邇的 TAOCP(The Art of Computer Programming)。有人曾說,看了 這部書,往後對寫程式的話題都會變得謙虛。:)

1977 不滿意書商所印出的TAOCP,因此,自行開發 TEX 排版系統,這可就影響

了往後的排版、出版界,至今不墜。但也因此拖延了 TAOCP 第四冊的完成

時間。

1986 榮獲 ACM 軟體系統獎。

1http://www-cs-faculty.stanford.edu/~knuth/

(9)

1 章 先來說一些故事 1.1. KNUTH教授的生平簡介

他可說是著作等身,書籍、論文都有,他的任何著作有個奇怪的『副作用』,那就是任何 人發現書上的錯誤,都可以向他舉發,並領取 $2.56(美金)!想試試看「手氣」嗎?台 灣就有人領過。:-) 為什麼是 $2.56?Knuth 教授的答案是:

“256 pennies is one hexadecimal dollar.”

發現 TEX 系統的臭蟲也是一樣,這個獎金每年倍數增加,直至 $655.36(216 pennies) 為 止。

他也很推崇自由軟體基金會 (Free Software Foundation)2 及 GNU/Linux,把一些希望都 寄託於 GNU/Linux,尤其是 Unicode 環境,他希望 GNU/Linux 很快就能在網頁上顯示 他的中文名字,而不必使用圖檔。其實是可以做到了,只是 Unicode 環境還不算普及罷 了。他曾在 1996 年接受 Dr. Dobb’s Journal 訪問時英雄惜英雄的公開表示,創導自由軟 體 (Free Software)3 的 Richard M. Stallman 是他心目中的英雄之一,他認為自由軟體基 金會這些人所做的貢獻很不錯,雖然和他的方式不一定一樣,但許多貢獻是互有認同的。

在發展 TEX 時就同時思考 WEB(這個詞比目前使用的 WWW Web 還早使用),那是 一種 literate programming 的程式方法。他認為目前已成熟的可以提出含有文件的程式 方法,使寫程式就像寫文學作品(小說?)一般的藝術表現。後來也把他由 C 改寫(和 Silvio Levy 合作),名為 CWEB4。TEX 就是由 WEB 寫成的,WEB 可視為 Pascal 語 言的一個子集。

一個 literate 程式師可被視為文學作家、評論寫作者、隨筆作者· · · ,程式的表現不僅 僅是搬弄符號,而是展現自己的風格,當然也是指達成目的的風格、甚至程式中變數運用 的風格。

這樣一來就可以展現讓人類較能理解的程式碼。使用形式及非形式的融合,而且兩者間相 輔相成,目的達成了,也讓閱讀的人就好像讀文學作品般的去抓住作者的心,使程式創作 提升至更高的(文學)藝術境界,而不再是死板板的 code 了。

Knuth 大師已於 1992 年自大學退休,但仍在 Stanford/Oxford 等大學有授課。目前正處 於隱居的生活,他這麼早退休的原因,就是因為 TAOCP 這部書,他估計大約要花 20 年 來完成,因此目前的重點工作是完成他的 TAOCP(分成好幾冊,目前真正出版的只有三 大冊)。他認為 email5 會影響他的思路,因此,寧願留住址,要和他聯絡就只好寫信,傳

2http://www.fsf.org

3http://www.gnu.org/philosophy/free-sw.html

4http://www-cs-faculty.stanford.edu/~knuth/cweb.html

5http://www-cs-faculty.stanford.edu/~knuth/email.html

(10)

1 章 先來說一些故事 1.2. 那麼,LATEX又是什麼呢?

真。給他的秘書的 email,是最後有時間才會去看,他曾公開的表明,這部書是他這一生 中最重要的工作。

雖然 Knuth 教授寫了許多嚴肅艱深的書籍、論文,但是他也是有風趣的一面,在 1996 年,Mathematisch Centrum (MC, 為慶祝五十周年慶改稱為 Centrum voor Wiskunde en Informatica, CWI) 曾邀請他演講,並知會荷蘭的 TEX User Group(NTG)6,NTG 見機會 難得,就邀請 Knuth 教授另開個 TEX 及 METAFONT 討論會,並接受大家的提問,他 說:『不對,我也是可以問你們問題的!』。而且,他還說:『這種問答的內容,很可能 在不同場合重複過,所以,如果我對同一個問題,曾有過兩種答案的話,你們必需取其平 均值。』他的妙語如珠,在許多類似的場合常常引起哄堂大笑,但實際的內容卻絕非泛泛 之言。:-)

1.1.1 TAOCP(The Art of Computer Programming )

這可是演算法的大著,請別折騰我,我只是心嚮往之,這部書我沒有一本是看得懂的。:-) 1. 第一冊,Fundamental Algorithms,1968 第一版,ISBN 0-201-89683-4。

2. 第二冊,Seminumerical Algorithms,1969 第一版,ISBN 0-201-89684-2。

3. 第三冊,Sorting and Searching,1973 第一版,ISBN 0-201-89685-0。

4. 第四冊,Combinatorial Algorithms,尚未完成,可能會先出分冊。

(a) 分冊 4A, Enumeration and Backtracking (b) 分冊 4B, Graph and Network Algorithms (c) 分冊 4C, Optimization and Recursion

5. 第五冊,Syntactic Algorithms,計劃 2010 年完成。

6. 第六冊,the theory of context-free languages,書名可能會變更,尚未開始。

7. 第七冊,Compiler techniques,書名可能會變更,尚未開始。

詳細的目錄大綱及修訂版的資訊,請參考網頁上的資料:

http://www-cs-staff.stanford.edu/~knuth/taocp.html

1.2 那麼,L

A

TEX 又是什麼呢?

TEX 是個很低階的排版語言,如果排版時都要從這種低階語言來控制版面的話,那將會非 常的煩複,所以,一些經常要用到的功能,都會先去定義好(稱為巨集,macro),這樣

6http://www.ntg.nl,荷蘭的TEX User Group 算是相當活躍的。

(11)

1 章 先來說一些故事 1.3. 一般人對LATEX的迷思

排版時才會方便、快速,直接引用已定義好的巨集裡頭的指令就可以了。

原始的 TEX 已經有了一組 macro,是 Knuth 教授所寫的,那就是著名的 Plain TEX,但 仍然不夠方便、直觀,於是 Leslie Lamport7 又寫了另一組的 macro,稱為 LATEX,主要 是把版面配置和文章內容,適度的分開處理,只要使用者選定了一種類別,整本書或整篇 文章的結構就是按照這個類別來安排版面,這樣寫文件的人只要專注於文章內容就可以 了,版面配置就完全交給 TEX/LATEX 去處理。

既然 LATEX 只不過是 TEX 的一大組巨集,那,當然原來的 TEX 的指令,大部份也是可 以用在 LATEX 文稿當中的。而且,LATEX 並不是目前唯一的 TEX macro,其他如 eplain TEX, ConTEXt, TEXinfo 等都是 TEX macro,也都有他們自成一套的語法。目前的 LATEX 由 LATEX 3 Project8 所維護及發展。

如果談到這裡,你還是霧煞煞的話,類比成 HTML markup 標記語言就能大概知道一些概 念了,當然,這和 HTML 標記語言是可相提而無法並論的。如果連 HTML 也不熟悉,那 也沒關係啦!這章本來就是在說故事嘛!:-) 只要繼續看後面的內容就行了。

1.3 一般人對 L

A

TEX 的迷思

這裡引用 Peter Flynn 在他的 A beginner’s introduction to typesetting with LATEX9 一文中 所提出來的六大迷思,並添加個人的一些看法:

LATEX 只能使用一種字型?

當然不是,雖然 TEX 系統預設是使用當初 Knuth 教授所設計的 METAFONT,但目 前 OpenType, TrueType, Adobe Type1 字型都可以用在 LATEX 當中,只不過,安裝 字型的部份不是那麼的直觀就是了,但比起其他的排版系統,TEX/LATEX 所能利用 的字型種類,可以說是最多的。

LATEX 只能用於 Unix-like 的作業系統?

Knuth 教授慷慨的把 TEX 的原始程式碼開放出來10,所以,只要是有人在使

7Leslie Lamport 於 1985 在 CSL 任職時寫了LATEX。目前任職於 DEC Systems Research Center但已 幾乎沒有參與 LATEX 的後續發展了。

8http://www.latex-project.org/latex3.html

9ftp://ftp.dante.de/tex-archive/info/beginlatex/beginlatex.pdf

10雖然有一些版權的規定,但是Knuth 教授的本意,這些原始碼是屬於 Public Domain,只是,如果經過 修改,不能再以TEX 為名,要另外改一個名稱,以免和原來的 TEX 搞混。TEX 這個商標的所有人是美國數 學協會(American Mathematical Society, AMS)。

(12)

1 章 先來說一些故事 1.3. 一般人對LATEX的迷思

用的作業系統都可以移植過去,不必擔心版權的問題。像 MS DOS, OS/2, MS Windows, Mac OS, Unix-like 系統都有 TEX 的移植版本,甚至是 PDA(e.g. the Sharp Zaurus)都有 TEX/LATEX 的縱跡。可以說是走到哪兒,就可以用到哪兒,而 且,文稿都是互通的,列印結果也相同。

LATEX 已經過時了?

剛好相反,LATEX Project11 及其他相關 packages 正穩定的研發當中,尤其和目前新 一代的 SGML/XML/HTML 及資料庫系統,都積極的想辦法銜接起來。對於數學式 子的排版,至今無人能出其右。有興趣的話,可以參考 news://comp.text.tex 的 流量,及其中 CTAN12 對於巨集更新、上傳的消息發布。

LATEX 沒有所見即所得(WYSIWYG)?

某 種 層 面 上 而 言 , 是 的 。 因 為 他 本 質 上 是 幕 後 排 版 系 統。 但 是 , 所 產 生 的 dvi/ps/pdf 檔,可以很精準的顯示你所想要表達的內容,不曉得這算不算是「所 見即所得」?另外,一些相關 GUI 配合的軟體,也會打破幕後排版的定義,例如 LyX13, TEXmacs14 等等。

LATEX 很難學?

這個嘛!我只能說,有什麼東西是很好學的?如果只是一般使用,而不是當個排版 專家,甚至 TEX/LATEX programmer,那麼,幾十分鐘的說明,就可以「上工」了!

剩下的只是一些細部調整的問題(不去調整,也絕對不會離譜)。相對於一般圖形 化 Office 類軟體,要真正把他的內容熟悉,恐怕也是不簡單的。另外的問題,大概 是幕前、幕後系統操作習慣的問題,甚至是一種第一印象了,就好像說到電腦,有 不少人的腦子裡就會浮現 MS Windows 的圖象一樣。:-)

LATEX 是專為科學家或數學家而寫的?

的確,當初 Knuth 教授是為了表達精確、品質優美的數學式子而開發 TEX 的,

但由於 TEX 的彈性,使得在其他的領域的使用者也爭相使用,已經不是局限在學 術界在使用了。尤其 XML 的興起,需要一個適合的格式化工具(formatter)的配 合,TEX/LATEX 就剛好稱職的做他排版專業的工作。

11http://www.latex-project.org/

12http://tug.ctan.org/

13http://www.lyx.org/

14http://www.texmacs.org/

(13)

1 章 先來說一些故事 1.4. 本文的重點方向

1.4 本文的重點方向

TEX/LATEX 的相關議題:版面的配置、排版規範、字型技術、TEX the program 的改進、

繪圖技術、TEX macro 的撰寫、pre/post 處理程式的撰寫、出版流程· · · 等等,浩瀚無 涯,可以說窮一輩子也可能研究不完,所以,各位在「陷入」這個領域之前,建議最好有 個適當的範圍,以免「愈陷愈深」終至無法自拔。

所以,本文的重點是放在「標準」LATEX 本身,其他相關的 package/macro 除非必要,

盡量不提及。但是 LATEX 本身也不是十全十美的,所以,有需要的地方也需要一並提及 外來的 macro,無論如何,重點是放在標準 LATEX 本身,請閱讀本文的朋友注意一下這 個方向。LATEX 本身就能解決的,就不假外求了,雖然會失去了一些彈性,但為免造成 package/macro 滿天飛,打亂學習陣腳,剛開始也只好如此了!

而且,可能的情形下,會往一般用途的方向去介紹,而不僅僅專注在數理排版。數學式子 雖是 TEX/LATEX 的拿手把戲,但不代表一般用途就不適合,相反的,現在有許多商業公 司正把 TEX/LATEX 用於一般商業出版上。

(14)

第 2 章 行前準備

使用 TEX/LATEX 系統,剛開始,比較麻煩的是安裝問題。不過,以現在的作業系統而 言,幾乎較流行的作業系統都有現成包好的 TEX 系統套件可以安裝,例如 Un*x 系統的 teTEX、Windows 系統的 MiKTEX 及 fpTEX。另外,也有 TEX Live CD1 可以供下載、購 買,這是 TUG(TEX User Group)2 製作的各種作業系統的可執行檔,使用上相當方便。

目前所謂的 TEX 套件,是把原來的 TEX 排版引擎本身,加上 LATEX 及其他相關的巨集,

再加上字型軟體(METAFONT)、繪圖程式(METAPOST)、字型檔· · · 等等,所組合 成的一整個可實際運作的排版系統。因此,什麼是 TEX?會因使用的場合不同而有不同 的意義,一般純指指令本身的時候,就單純寫成小寫的 tex,此時所用的巨集,預設就是 Knuth 教授所寫的 plain TEX。寫成 TEX 時,一般是指整個系統而言。這在 LATEX 巨集亦 同,latex 指的是指令,LATEX 指的是整個巨集系統。

2.1 Unix-like 系統

一般 Unix-like 系統都是安裝 teTEX 套件,凡是和 tetex 字樣相關的 packages 都安裝起 來,目前 GNU/Linux 各種 distribution 及 FreeBSD 都有現成的 packages 供安裝使用。

如果是沒有提供這個套件的作業系統,可能得自行編譯了,原始碼在:

http://www.tug.org/teTeX

ftp://cam.ctan.org/tex-archive/systems/unix/teTeX ftp://tug.ctan.org/tex-archive/systems/unix/teTeX ftp://dante.ctan.org/tex-archive/systems/unix/teTeX

1http://tug.org/texlive/

2http://www.tug.org/。加入會員的話,只要些許會費,則可以獲得 TEX Live CD 及年報資訊的寄 發。

(15)

2 章 行前準備 2.2. MS WINDOWS系統

2.2 MS Windows 系統

最常使用的free 版本,大概就是 MiKTEX 及 fpTEX,其中,後者等於是 Un*x 中的 teTEX 的 Windows 移植版本。

http://www.miktex.org/

http://www.fptex.org/

安裝的話都自動化了,應該可以很方便的安裝起來。

2.2.1 cygwin 環境

這是 Windows 系統下的一個 Un*x 環境(正確的說,是 Linux-like),有了這個環境就可 以使用 Unix-like 的界面,也可以編譯 Unix-like 中的程式,當然也就可以安裝 Unix-like 系統的 teTEX 套件了,有人習慣了 Unix-like 的操作環境,但又常需要在 Windows 平台 下作業,這是個不錯的選擇。

http://sources.redhat.com/cygwin

http://sources.redhat.com/cygwin/setup.exe

只要先下載 setup.exe 這個可執行檔,然後執行後按著指示就可以完成安裝,當然,網路 要連線。至於 teTEX 相關的套件,安裝好 cygwin 就會安裝,至於中文 CJK 套件,感謝 seventeen 的製作,請參考:

http://seventeen.mit.edu/blog/17/archives/000141.html

2.3 Mac OS X 系統

個人對 Mac OS X 並不熟悉,所以僅提供個人知道的 distribution。但 Mac OS X 亦可以 安裝 Un*x 系統上的 teTEX 系統,也可以在其上自行編譯。

參考文件:

[文件]MacOS 10.2.4安裝teTeX http://www.rna.nl/tex.html

http://www.cs.wright.edu/~jslater/mac-tex/mac-tex-intro/mac-tex-intro.pdf TEXShop

http://www.uoregon.edu/~koch/texshop/texshop.html iTEXMac

http://itexmac.sourceforge.net/

(16)

2 章 行前準備 2.4. 商業維護的TEX/LATEX系統

2.4 商業維護的 TEX/L

A

TEX 系統

上面所提到的都是 free 的版本,縱使是 TEX Live CD,雖也可以讓非 TUG 會員訂購,

但他們的 iso 是可以自由下載,不一定要花錢買。當然,這裡是鼓勵大家加入會員或 花點小錢購買,也算是贊助他們繼續維護好品質的 TEX 系統。另外,亦有商業維護的 TEX/LATEX 系統,雖然要花錢,但功能上可能會比較符合特別的需要,而且有比較完整的 售後服務方案:

TrueTEX http://www.truetex.com/ Windows

TurboTEX http://www.truetex.com/ Un*x, DOS, Windows Y&Y TEX http://www.YandY.com/ Windows

pcTEX http://www.pctex.com/ Windows

VTEX http://www.micropress-inc.com/ Windows, Linux, OS/2 Scientific Word http://www.sciword.demon.co.uk Windows

Textures http://www.bluesky.com/ Macintosh OzTEX http://www.trevorrow.com/oztex/ Mac OS X Scientific Assistant http://www.advanced-science.com/ Mac OS X

2.5 選個順手的編輯器

TEX/LATEX 本身並不內附編輯器,這和許多排版軟體不一樣,他只專注在排版的過程,原 始文稿是如何產生的並不插手干涉,這樣子的自由度很大,每個人都可以選用適合他自己 的編輯器,但和目前一般的幕前排版系統比較的話,會讓初接觸的朋友不知所措,因為他 不曉得要如何使用 TEX/LATEX 來「編輯」原始文稿!

當然,有些 TEX/LATEX 的發行版本,乾脆就弄了個編輯器,把編輯器和排版系統本身連 接起來,這樣是很方便,但有很大的可能又得花時間學習另一種不熟悉的編輯器操作。本 文的說明,不準備被編輯器給綁住,你愛用什麼編輯器就用什麼編輯器,讓我們專心在排 版過程本身吧!

以下僅簡單介紹和中文相容的編輯器。當然,只要使用順手的編輯器都可以拿來用。原則 上,剛開始接觸 LATEX,個人是建議從命令列開始瞭解起,等整個流程有個概念後再來使 用一些方便的編輯器上的巨集及按鈕設定,不然,有時編輯器上的設定有問題時,會不知 道從何改起。至於編輯器的操作,請自行參考各編輯器的說明文件或網路上的教學文件,

這裡就不多談了。

(17)

2 章 行前準備 2.5. 選個順手的編輯器

2.5.1 Vim

這有各種平台的版本可以下載:

http://www.vim.org/

可以配合 vim-latex suite 來使用:

http://vim-latex.sourceforge.net/

2.5.2 GNU Emacs/XEmacs

這也是有各種平台的版本,也可以配合 AUCTEX3 來使用,相當方便,這也是 Knuth 教 授本身所愛用的編輯器:

http://www.gnu.org/software/emacs/emacs.html http://www.xemacs.org

2.5.3 NEdit

這也可以配合 AUCTEX 來使用,但只有 Un*x 系統的版本:

http://nedit.org

2.5.4 WinEdt

這是 shareware,只有 Windows 版本:

http://home.istar.ca/~winedt

2.5.5 UltraEdit

這也是 shareware,也是只有 Windows 版本。

http://www.ultraedit.com

3http://www.gnu.org/software/auctex/

(18)

2 章 行前準備 2.5. 選個順手的編輯器

2.5.6 Kile

這是很方便的 LATEX 圖形界面整合環境,還可叫出繪圖軟體來繪圖,如果其他作業系統也 有安裝 Qt/KDE 的話,也是可以編譯安裝使用:

http://kile.sourceforge.net/

(19)

第 3 章 TEX/L A TEX 語法概說

這一章要談的是,和一般的純文字文稿及其他 markup 式文件系統在語言上的一般差異 性。為了讓觀念上能夠更清楚,以下所述主要是要在命令列執行的,致於編輯器上方便的 按鍵及巨集,這裡就不多談,一方面是每個人使用的編輯器不一樣,二方面是要先把黑盒 子拿掉,整個處理流程才會有概念。

當然,由於完全還沒有開始實際寫文稿來測試,所以,這章是紙上談兵,不必動手,用看 的就好。但,別急,我們會在第 4 章開始實際玩看看,請別忘了,到時要再回頭來複習一 下這些資料。

而且,前面已經說過,這篇文章主要是著眼於 LATEX 所附上的巨集,一些其他方便的套件 引用,將會在最後或另文再來談。其實,不引用任何外來特殊套件,讓 LATEX 本身去處 理,最起碼也就不會太離譜,要講求美觀、微調,個人是認為先把基礎弄起來再說,有些 套件的複雜程度,會令人頭疼,你是不是真有這個需要,值得考慮。而且,很多時候自認 為不錯的「微調」,其實常常會不合排版的慣例。TEX/LATEX 的語法,可以是很簡單明 白,也可以是相當的複雜,這是 TEX 系統本身的彈性所導致。

3.1 L

A

TEX 文稿的處理流程

最簡單的一句話,就是把編輯器編輯好的文稿(通常結尾是 .tex),利用 latex 這個指 令去編譯文稿就對了!

latex your.tex

需要注意的是,如果有索引,還要用 makeindex 執行一次,有參考文獻,還需要 bibtex 處理一次,最後再使用 latex 再處理一至二次,也就是說視文稿的複雜程度,latex 可能 需要執行好幾次,這在往後碰到時會再提出來。另外,處理中文的話,需要其他前置處

(20)

3TEX/LATEX語法概說 3.2. LATEX的特殊專用符號

理,這裡暫時先以英文文稿來說明,中文的部份,只要加入中文環境及(或)改用能處理 中文的前置處理器就可以了。

這 樣 經 過 latex 處 理 後 , 會 產 生 一 個 your.dvi 檔 , 然 後 可 以 使 用 dvips 來 產 生 PostScript 格式的檔案。也可以使用 dvipdfm[x] 來產生 PDF 的格式,當然,也 可以使用 ps2pdf 經由 PostScript 格式轉換成 PDF 格式。另外,也可由 pdflatex 由 your.tex 直接編譯成 PDF 格式的輸出。

3.1.1 總結一下處理流程

開始

latex 可能不只一次

your.tex dvips ps2pdf

dvipdfm[x] 或 pdflatex

完成 pdf 檔

ps 檔

3.2 L

A

TEX 的特殊專用符號

在 TEX/LATEX 的世界,原始文稿都是純文字檔,任何一種編輯器都可以打開來編輯、觀 看。而排版指令通常是由反斜線(\, backslash)所開頭來引導。註解則是由百分號(%)

來引導。例如,以編輯器編輯下列文字:

This is my first \LaTeX\ typesetting example.

編譯後會變成以下的結果:

This is my first LATEX typesetting example.

其中的 \LaTeX 就是 LATEX 的一個指令,會顯示 LATEX 這個特殊的圖示。

由於,西方國家的語系,通常字母、符號的最大容量只有 256 個(28),因此,許多 現有的符號必須拿來當做控制指令,才能符合排版的多樣化需求。以下的符號,接觸

(21)

3TEX/LATEX語法概說 3.3. LATEX排版上的一些規範或慣例

TEX/LATEX 的朋友,可能都得時時留意,不要未經處理就直接寫進文稿裡頭去了。

通常,編輯器的語法顏色會幫助判斷語法是否正確,但不是都能完美無缺,有時還是會漏 掉,這時別忘了查看一下 *.log 檔案,例如:編譯 your.tex 檔的話,他的 log 檔就是 your.log。

符號 作用 文稿上使用 LATEX 的替代指令

\ 下排版命令 $\backslash$ \textbackslash

% 註解 \% NA

# 定義巨集 \# NA

˜ 產生一個空白 \~{} \textasciitilde

$ 進入(離開)數學模式 \$ \textdollar

數學模式中產生下標字 \_{} \textunderscore

ˆ 數學模式中產生上標字 \^{} \textasciicircum

{ 標示命令的作用範圍 \{ \textbraceleft

} 標示命令的作用範圍 \} \textbraceright

< 數學模式中的小於符號 $<$ \textless

> 數學模式中的大於符號 $>$ \textgreater

| OT1 編碼,數學模式中才能正確顯示 $|$ \textbar

& 表格中的分隔符號 \& NA

3.3 L

A

TEX 排版上的一些規範或慣例

除了上面所談到的特殊符號外,也有一些規範或慣例要遵守,有些是比較硬性的規定,有 些則只是慣例,可能不同的國家、語言會有不同的慣例,暫時先把他當成是 LATEX 的遊戲 規則就成了。

3.3.1 字型的相關術語

要談排版上的規範、慣例前,我們得先認識一下字型的一些術語,以便往後文章中提到時 有個概念。通常我們每個字都是置放於一個假想的方框中,稱為 em-square,同一個字型 的同一個點數,每一個 em-square 大小都是相同的,實際上的字(glyph)要置放在這個 em-square 的什麼位置,這是字型設計者的觀點,所以,同樣點數的不同字型,他的字的 大小不一定會一樣,因為我們是使用 em-square 的大小在比較的,而非實際的 glyph。

在文章中排列的時候,則是將 glyph 置於一個以假想參考點(reference point)為基準的 一個假想線上,稱為基線(baseline),大寫字母除了 Q 以外,他們的底部都是置於基線

(22)

3TEX/LATEX語法概說 3.3. LATEX排版上的一些規範或慣例

上的。但小寫字母則不一定剛好座落在基線上,有些字的筆畫可能超出基線以下,例如 y、j 等字母。關於字型在文章中的置放位置,我們來看看一個模擬圖:1

cap height

x-height

depth

width

baseline mean line

reference point

yZ

這個超出基線以下的長度,我們稱之為深度(depth),以上的就稱為字高(height),當 然大小寫的不同又分為大寫字母的字高(cap height)及小寫字母 x 的字高(x-height),

由於這個例子裡是調合字,所以每個字的寬度(width)不一定會一樣,像打字機字族 的則是等寬的字型。字高加上深度,我們就稱之為 totalheight,大部份的情況,僅僅說 height 時是不包括 depth 的,而且通常指的是 cap height。

mean line 在一般比較少用到,通常是字型設計時才會用到,他是指小寫字母去除上面突出 的部份所連成的一個基準線,這個 mean line 到 baseline 的距離,一般就稱為 x-height,

當然就是小寫字母 x 的高度,因此我們會有一個長度單位,稱為 ex,指的就是這個 x-height。

中文字的話比較特殊,他是以 em-square 的中心點來置放 glyph 的,在中英文混合時,中 文字並不是剛好座落於基線上的,會超出基線下一點點,至於會超出多少,則和字型的設 計有關,每種字型都有可能會不同。這也是為求排版上的一致性,字型可能都需要盡量使 用同一套的各種字型的原因,否則就得經過微調,才能使整個字型表現上取得協調一致。

這些專門術語,往後提到一些指令的參數的描述時都會使用到,因此先熟悉一下,例如:

字型旋轉時,跟據的就是以參考點(reference point)為準,沿延伸出的軸心來旋轉的,

而一般所說的行距,指的是上下兩 baseline 的距離。

1實際字型設計上的各部份專有名詞及結構,當然不會是這麼簡略,這裡的模擬圖,只是暫時讓字的一般 置放有個粗略的概念。

(23)

3TEX/LATEX語法概說 3.3. LATEX排版上的一些規範或慣例

3.3.2 一般性的遊戲規則

1. LATEX 的指令都是大小寫有別的,由 \ 開頭,後接由字母組成的字串或單一的非字 母字元。其中由 [ ] 中括號括住的是選擇性參數,可以省略,由 { } 大括號括住的 是不能省略的參數,當然,LATEX 的指令不一定會有參數,但絕大部份都會有參數,

只不過把他給省略使用預設值罷了。

2. LATEX 文稿中,空一個英文空白和空多個英文空白的作用是一樣,LATEX 會認作一個 英文空白。

3. 平常我們編輯純文字檔,按個 Enter 鍵,就代表換行,但實際排版出來,一行的寬度 是按照排版版面的設定,也就是說,你在文稿中按 Enter,不代表排版後就是從這裡 斷行,LATEX 會依一行應有的寬度經過整體計算後自動補成一整行後再來斷行,而且 會在中間自動補足一個空白。這在英文很自然,稱為字(word)間空白,但中文則 不一樣,在編輯器中編輯中文,隨意按 Enter 的結果,會造成文章中的中文間出現空 白。這會在本文中適當的時機,提出解決的方法。

4. 編輯器中,多按幾次 Enter 就多空出幾行,但在 LATEX 文稿裡,多個空白行,和一 個空白行是一樣的作用,LATEX 會把他認作是一個空白行。而這個空白行,LATEX 同 時也會認作是新段落的開始,所以 LATEX 是以空白行來分隔各個段落。

5. LATEX 預設每個章節的第一個段落的第一行是不內縮(noindent),從第二個段落開 始才會內縮(indent)。當然,這是可以更改的,往後會再提及。

6. LATEX 的指令,是從反斜線後第一個字母開始,到第一個非字母符號為止(包括空 白、標點符號及數字)。因此:

This is my first \LaTeX typesetting example.

這樣的話,實際結果,因為 \LaTeX 後的空白是屬於指令的一部份,空白將不會被解 釋,這樣會印成:

This is my first LATEXtypesetting example.

這種結果,LATEX 和 typesetting 連在一起了。要避免的話,就要指定指令的作用範 圍,例如以下的大括號。或就真的加個空白,例如 \ ,LATEX 碰到 \ 就會形成完整 的指令,其後的空白就會被真正解釋為空白了:

This is my first {\LaTeX} typesetting example.

This is my first \LaTeX{} typesetting example.

This is my first \LaTeX\ typesetting example.

(24)

3TEX/LATEX語法概說 3.3. LATEX排版上的一些規範或慣例

所以,正常印出來應該是:

This is my first LATEX typesetting example.

7. 註解符號(%),可以放在一行的任何地方,% 後的文字會被 LATEX 忽略。所以,如 果是放在一行的最尾端,那麼 LATEX 會自動插入的字間空白也將會被忽略。例如:

This is my fisrt \LaTeX\ document. Give \LaTeX\ a%

try.

這樣一來,排版出來會變成:

This is my fisrt LATEX document. Give LATEX atry.

a 和 try 連在一起了!正常應該是:

This is my fisrt LATEX document. Give LATEX a try.

基於這個特性,我們可以應用在中文,也就是說在編輯器中,中文文章按 Enter 鍵換 行時,尾端加個 %,這樣一來 LATEX 就不會插入英文字間空白,中文字就可以連成 中間沒有空白的一整行了,否則 LATEX 在整篇文稿斷句時,會自動在原換行處填入 一個英文空白,因為,原始的 TEX/LATEX 是認不得中文的。

8. 中英文混合的時候,通常,英文字前後都會留個空白,以便和中文區隔開來,只是 這個空白要多大,這就沒有固定的慣例,通常留個英文空白也是可以,要講究的 話,等談到中文排版相關議題時再來討論,目前就養成習慣,英文單字前後留個英 文空白。

3.3.3 針對標點符號的遊戲規則

1. 中英文的引號不一樣,這裡請特別注意,許多人常常搞錯。中、英文引號不管單雙 都要分左右。英文的話,左邊的引號是 grave accent,是鍵盤左上方 Esc 或 F1 下方 有波形號的那一個鍵;右邊的是 apostrophe,也就是鍵盤左邊 Enter 鍵隔壁的那個 鍵。雙引號的情形是鍵入兩次的左單引號及兩次的右單引號,而不是用 " 這個一次 完成兩個點的 ditto marks。所以,實際上在鍵入文稿時是:

Please press an ‘Esc’ key.

Please press an ’Esc’ key. 這是錯誤示範!

‘‘This sentence.’’

"This sentence." 這是錯誤示範!

排版出來的情形是:

(25)

3TEX/LATEX語法概說 3.3. LATEX排版上的一些規範或慣例

Please press an ‘Esc’ key.

Please press an ’Esc’ key. 這是錯誤示範!

“This sentence.”

”This sentence.” 這是錯誤示範!

中文的話,我們是使用中文全形的「、」及『、』,在中國大陸則已改用和英文相 同形狀的全形符號,但這在中文直排時會出問題,因此,中文的單、雙引號還是得 維持我們目前使用的。

2. LATEX 會在英文文章的一個句子結束和另一個句子開始的中間,自動調整成較大一 點的空白,這可以增加文章的易讀性。所謂一個句子結束,例如:句點(.)、問號

(?)、驚嘆號(!)及冒號(:),這當然是指英文的半形標點符號,不是中文的全 形標點符號。你可以注意一下上面所舉的例子,在 document. 和 Give 之間的空白會 稍微大於其他英文單字間的空白。

現在的問題是,如果這些標點符號後面不是另一個句子的開始的時候,LATEX 無法去 判斷這種情形,這時得由我們自己自行判斷、處理了。例如英文縮寫字:

I am Mr. Edward G.J. Lee, G.J. is a abbreviation of my name.

I am Mr.~Edward G.J. Lee, G.J. is a abbreviation of my name.

I am Mr.\ Edward G.J. Lee, G.J. is a abbreviation of my name.

其中 Mr.\ Edward 的寫法,和 Mr.~Edward 幾乎是一樣的,都是強迫插入一個比較 小的正常單字間空白,差別在於後者也另外表示不可以從這裡換行,通常用在人名 的時候,讓他們不致中斷,一般在人名的排版,包括他的頭銜、職稱,是不中斷成 兩行而分開的。而且整個文句較長的話,以後者較恰當,才不會因為斷行被分成兩 半,這個 ~ 符號也因此在 TEX 的專有名詞,就稱為 tie,把他們綁住的意思。排版 出來的時候會變成:

I am Mr. Edward G.J. Lee, G.J. is an abbreviation of my name.

I am Mr. Edward G.J. Lee, G.J. is an abbreviation of my name.

請放大去仔細比較一下結果就知道了。第二行的才是正確的,Mr. 和 Edward 之間的 空白是正常單字間空白,比第一行的句子結束空白要小一點點。其他有使用到縮寫 字的場合,例如:‘Dr.’、‘etc.’、‘e.g.’、‘i.e.’、‘vs.’、‘Fig.’、‘cf.’、‘Mrs.’,這些都不 是代表句子結束,所以,要插入一個正常空白。

那 G.J. 後面為什麼沒有插入正常空白?那是因為,J 是大寫的,這時 LATEX 不會去 誤認為是句子結束,通常句子結束時的句點前的那個字母是小寫的。Well,有沒有 覺得有點道理?:-)

(26)

3TEX/LATEX語法概說 3.3. LATEX排版上的一些規範或慣例

等等,事情還沒有結束!Knuth 教授出了一道考題,如果句子的結束是 ‘Please see Appendix A.’ 後面又還接有另一個句子。這時怎麼辦?由於,不會認為是 句子結束,因此會插入正常空白,但這正是句子結束呀!請暫時先記得,使用 ...Appendix A\null.,或 ...Appendix A\@.。這個說來有點話長,有機會再來探 討,請記得 ‘\null’ 和句點間是沒有空白的。例如:

Please see Appendix A. We will be there soon.

Please see Appendix A\null. We will be there soon.

排版出來的結果將會是(差異不明顯,請小心比較):

Please see Appendix A. We will be there soon.

Please see Appendix A. We will be there soon.

如果,你現在閱讀的是 HTML 格式文件,有些例子如果無法明顯顯示出來,請 改閱覽 PDF 版本。而且,如果你製作 PDF 格式時,字型沒有內嵌(本文的英數 字是嵌入 Computer Modern Type1 字型),差異可能將會更不明顯。可試著使用 gv/gsview 去閱覽,然後調整成 Landscape,把句子尾部拉到邊緣的地方去就看得出 來了。這在句子多的時候,這個空白也並非固定大小的,LATEX 會視文章結構的需要 做細微的調整。

3. 刪節號中文英也是不同,英文是三點,如果碰到句點的話,則是四點。中文的話是 六點,碰到中文句點很容易就分得清楚。但是英文這個三點,不是就打個三個句點 了事,這樣的點太密集,可以使用 \ldots 或 \dots 指令,例如:

I’m not a good man ..., but a good husband .... 錯誤示範!

I’m not a good \ldots\ man \ldots, but a good husband \ldots.

I’m not a good \dots\ man \dots, but a good husband \dots.

排版出的來結果是:

I’m not a good ... man ..., but a good husband .... 錯誤示範!

I’m not a good . . . man . . . , but a good husband . . . . I’m not a good . . . man . . . , but a good husband . . . .

中文的刪節號是由兩個全形的三點所組成六點的,即:· · · ,就是我們 Big- 5 碼的 0xa14b(U+2026),但由於 Unicode 尚有一個 MIDLINE HORIZONTAL ELLIPSIS(U+22EF),因此,有些軟體在解讀上有可能會不一樣,因為我們的字型,

大部分在製作標點符號時是置在中央的地方,不像中國大陸是置放在基線的地方,

而 Unicode 官方採用的樣本字型,剛好是中國大陸的廠商所提供,這樣一來有些軟 體工作者就認為我們的刪節號應該是 U+22EF 了,很不幸的,我們的 Big-5 碼並沒有 相對應的字碼。

(27)

3TEX/LATEX語法概說 3.3. LATEX排版上的一些規範或慣例

4. 破折號。在英文,相當於破折號的可能有三種:

hyphen

這是最短的dash,通常就是鍵入 - 就行了,例如 father-in-low,這樣會表現 成 fater-in-low。

en-dash

這是最常用的破折號,是鍵入兩個 hyphen。例如 1991--2003 年,這會表現成 1991–2003 年。

em-dash

這是最長的 dash,由三個連續的 hyphen 組成,應該是最相近於我們中文所說 的破折號。例如 I am---a good man. 會表現成 I am—a good man.。至於這 個三個連續的 hyphen 前後是否要留空白,都有人使用,並沒有硬性的慣例,

但為了和中文的破折號配合(中文破折號前後,通常不留空白),個人通常是 不留空白的。

真正的減號

這應不能算是破折號,而是實際的減號或負號,這要進入數學模式,例如:負 五,要寫成 $-5$,然後表現出來是 −5。這也常常會有人搞錯,不能直接鍵入 一般的負號那個鍵來充數,這是因為 TEX/LATEX 的數學式子的用字和間隔處 理,和一般內文不同的關係。

中文的破折號

中文的破折號是佔兩個中文字位置的的一橫線,長度和刪節號相同。在中 線位置的,定義上是有兩種,en-dash 是 Big-5 0xa156,em-dash 是 Big-5 0xa158。但由於中文字間距的問題,有可能打出來的破折號中間會有一點空 白2,例如——中文的 em-dash,這是––中文的 en-dash。在論文中,破折號 通常可以使用小括號或冒號代替。

中文的私名號及書名號

中文的私名號,可以標明人名、地名,如孫逸仙;書名號(私名號的底線換成 波紋形狀),可以用在書名,這些符號常造成排版上的困擾,常使用 《 》來取 代書名號,私名號則無其他取代方法。在一般的自然及應用科學論文上通常不 使用這種舊式的私名號及書名號。

2這是可以調整的,也就是去除兩個橫線之間的字間距,這樣就不會產生小空白了,中文刪節號也有同樣 的情形,我們會在微調的部份再來討論。

(28)

3TEX/LATEX語法概說 3.4. LATEX的文稿結構

5. 避頭點

這可是排版的重要功能。英文的通常沒有問題,LATEX 會自動避開處理,中文就不一 定了,LATEX 可不認識中文,但通常中文相關程式及套件,多多少少都會處理,只不 過,有時候偶爾可能會誤判。那麼,到底什麼是避頭點?底下列個表,大家就明白 了,我列中文的,英文的就不列出來了,因為 LATEX 會自動處理,不必我們擔心。

標點符號 置放處

,。;、:」)》!? 不能置於行首

「(《 不能置於行尾

破折號及刪節號 置於首尾皆可

簡單的說,除了破折號及刪節號,沒有開口的,不能置於最開頭,開口向右的,不 能置於最右,開口向左的,不能置於最左。通常都會處理好,但校稿的時候要注意 一下誤判的地方。

3.4 L

A

TEX 的文稿結構

3.4.1 環境(environment)

上一節所談的都是指令,雖然也可以由大括號來定作用範圍,但如果是一整段,甚至是一 整篇文章都要作用時,那指令可能就不很適合了,因此,LATEX 也有一種巨集結構,稱為 環境(environment),主要是讓作用範圍能擴大至較大的範圍。

所有的環境,都是起於 \begin{環境名稱},止於 \end{環境名稱},這兩個指令之間的文 稿都會被作用,而且,環境之內還可以套用其他不同的環境。

LATEX 文稿的內文,其實就是包在一個 \begin{document} 和 \end{document} 這個 document 環境當中。

3.4.2 最簡單的 L

A

TEX 的文稿結構

以下就是所有 LATEX 必需具備的文稿大結構:

\documentclass{article}

這裡是 preamble 區

(29)

3TEX/LATEX語法概說 3.4. LATEX的文稿結構

\begin{document}

這裡是本文區

\end{document}

\documentclass{article},這是在告訴 LATEX 使用哪一種類別,我們目前使用的是 article 類別,關於類別會在第 6 章討論。preamble 區,則是下一些會影響整個文稿 的指令,及引用巨集套件的地方,當然,完全不引用巨集,也不使用影響全文的指令的 話,preamble 區就是空白,不寫任何東西。本文區,就是我們實際上寫文章的地方。

現在也可以把前面所舉的例子,放入本文區裡頭,preamble 區空白沒關係,然後存檔,試 著編譯看看:

latex example.tex

dvips example.dvi => 產生 ps 格式 example.ps dvipdfm[x] example.dvi => 產生 pdf 格式

pdflatex example.tex => 直接由 .tex 產生 .pdf

真正的實例解說,會在下一章來進行,所以,這裡暫時不會介紹有什麼環境可以使用,先 玩看看沒有關係。由於還沒談到中文的問題,因此如果你想試試看,那暫時先使用英文,

道理都是相通的。

3.4.3 preamble 區可以放些什麼?

這裡可以引用巨集,而且會影響整篇文稿的指令,例如一些事先定義好的指令,想在整篇 文稿中使用,就可以置放在 preamble 區。

3.4.3.1 巨集的引用

本文主要是標準 LATEX,但前面已提到,會有些巨集套件不得不要引用,底下就來說明如 格引用套件。這些套件都是一般 TEX 系統都會附上的。

指令及環境要如何開頭都介紹過了,現在來看看引用巨集要怎麼開頭。

\documentclass{article}

\usepackage{color}

\begin{document}

\textcolor{blue}{This is blue color.}

\end{document}

(30)

3TEX/LATEX語法概說 3.4. LATEX的文稿結構

編譯一下,看看結果是什麼?這裡使用的就是 color package,裡頭是由 TEX/LATEX macro 所寫成一個巨集套件。一般簡單的我們就稱為巨集(macro),複雜一點的就稱為巨集套 件(package),其實,裡頭都是一樣的,只不過大小及有沒有整理成一個系統的差別。

LATEX 裡頭有什麼現成的套件可以使用,每個散佈的 TEX 系統所收集的可能都會有所不 同。大概沒有人可以精通所有現存的 LATEX 巨集套件,因為實在是太多了,不過,本文大 概都會提到常用的巨集套件。詳細的巨集套件的種種,會在第 7章來說明。

3.4.3.2 影響整篇文稿的指令

會影響整篇文稿的指令,通常也是放在 preamble 區,例如:

\linespread{1.36}

\parindent=0pt

\linespread 是在控制上下行的行距,這裡就是將行距變成原來的 1.36 倍。至於什麼是 行距呢?就是這一行的基線(baseline)到下一行的基線的距離,通常英文文章不必去調 整他的行距,但中文得適當加大行距以利閱讀。

\parindent 是調整段落內縮的程度,這裡調整成 0,也就是說各段落都不內縮的意思,也 可以調整成其他的值,LATEX 就會依這個值去內縮。當然,不去設定的話,LATEX 就會依 他的預設值去內縮。

3.4.4 章節結構

本文區當然是我們寫文章的主要地方,及一些微調。在 LATEX 的文稿裡頭,章節標題 的形成都是由同樣的指令來控制的,這樣有一個好處,臨時插入章節標題及其內文時,

我們不必去理會標題編號及目錄的問題,也不必去理會要用什麼字型、及字型大小要多 大,LATEX 會自動計算處理,字型大小也會和內文使用的字型大小互相配合調整,使用者 就專心在內文構思、寫作即可。以下由列表來瞭解整個章節結構:

(31)

3TEX/LATEX語法概說 3.4. LATEX的文稿結構

深度標號 指令 作用及注意事項

−1 \part{} 這是最大的結構,我們中文通常稱為「部」。

0 \chapter{} 章。在 article 類別裡頭沒有章。

1 \section{} 節。

2 \subsection{} 小節。

3 \subsubsection{} 次小節。

4 \paragraph{} 段落。

5 \subparagraph{} 小段落。

章節標題的內容就是直接寫入指令的大括號裡頭就可以了,LATEX 在排版時會自動使用粗 體、加入章節編號及納入目錄裡頭。

至於第一欄的深度標號(secnumdepth),book/report 類別的深度標號是 2,article 的是 3。這是什麼意思呢?就是說 book/report 類別的文稿,在 \subsection{} 以後

(subsection 本身仍會編號),章節就不再編號了;同樣的,在 article 類別的文稿,

在 \subsubsection{} 以後就不編號了。但仍然會獨立出一單獨行來表示這個是標題。不 編號了的章節內容,當然也就不納入目錄裡頭了。這當然是可以更改的,只要更改 LATEX 的 secnumdepth 這個變數的值就可以了,這個往後會提及如何更改 LATEX 的預設值。像 這篇文章,在 preamble 區就有一個設定:

% let the depth of report to subsubsection

\setcounter{secnumdepth}{3}

所以,這篇文章雖然使用的是 report 類別,但是章節的深度標號是標在 3,也就是說會 編號到 subsubsection 為止,但這仍然是沒有編入目錄中的。

下一章就讓我們開始實際動手吧!但· · · ,怎麼到現在都沒有完整介紹指令呢?那我怎 麼會知道有什麼指令可以使用?這是因為 LATEX 的指令很多,直接介紹的話,一方面記不 住,二方面也不容易瞭解他的實際作用,所以,我們將會在下章舉例時穿插在裡頭說明,

等這份文件接近尾聲時,再來整理個指令速查表,這樣以後查指令就很方便了,不必去死 記,只要知道有個這樣功能的指令就夠了。

(32)

第 4 章 實際上排版玩看看

好了,現在正式來玩看看吧!本章主要是簡單的實例說明,先進入狀況再談其他。實際應 用比高談闊論有用多了。

先來個「最高指導原則」:學會控制空間,你就學會排版了!剛學排版的朋友,往往會把 所學到的東西去想法子佈滿你所有的空間(就是一個頁面),但實際上,你要調整的,其 實是各個部份的空間配置,抽象一點說,也就是一整個頁面當中,沒有文字、圖表的部份 才是排版真正的重點。你先聽聽就好,過一段時間的熟悉後,再來回頭思考這個「玩弄」

空間的原則。:-)

由於本文有 HTML 版本,為了轉換上不造成失真,實例的部份,文稿上只寫程式碼,結 果的部份都是編譯好的 PDF 格式檔案,置放於網站上,可線上閱覽或下載,簡單的例子 則不另製作獨立的 PDF 檔,請參閱本文的 PDF 格式檔案內容。

4.1 簡單的實例

這裡就把前一章所談到的一些內容整理成一個文稿,先來試試看,這裡先使用 report 類 別文稿,因為 article 類別文稿是沒有 chapter 的:

% example1.tex

\documentclass{report}

\begin{document}

This is my first {\LaTeX} typesetting example.\\

This is my first \LaTeX{} typesetting example.\\

This is my first \LaTeX\ typesetting example.\\

I am Mr. Edward G.J. Lee, G.J. is a abbreviation of my name.\\

I am Mr.\ Edward G.J. Lee, G.J. is a abbreviation of my name.\\

Please see Appendix A. We will be there soon.\\

Please see Appendix A\null. We will be there soon.

\end{document}

(33)

4 章 實際上排版玩看看 4.1. 簡單的實例

使用編輯器編輯,然後存檔成 exmaple1.tex,這樣就可以編譯了:

latex example1.tex => 產生 example1.dvi dvips -Ppdf example1.dvi => 產生 example1.ps ps2pdf example1.ps => 產生 example1.pdf 或

dvipdfm[x] example1.dvi => 由 example1.dvi 直接產生 example1.pdf 或 pdflatex example1.tex => 由 example1.tex 直接產生 example1.pdf 編譯好的 PDF 檔可在此下載或閱覽:

http://edt1023.sayya.org/tex/latex123/example1.tex http://edt1023.sayya.org/tex/latex123/example1.pdf

4.1.1 關於換行

每行最後加了個 \\,這表示強迫換行的意思,否則 LATEX 會依版面預設的寬度來換行,

就不會是一個句子一行了,大家可以把這個 \\ 拿掉,再來編譯試看看結果,就會知道怎 麼一回事了。也可以使用 \newline 這個指令,當然,我們都會聰明的選用較短的指令。

而且 \\ 可以控制換行時的間隔,這在 \newline 則不行。例如:

Please see Appendix A. We will be there soon.\\[1cm]

Please see Appendix A\null. We will be there soon.

這樣的話,兩行之間的行距就是原來的行距再加上 1cm。甚至,也可以是負數的參數,這 樣行距就會變成原來的行距減去 1cm,當然,如果設過頭了的話,兩行可能會重疊在一 起。既然,這裡使用的是方括號,表示這些參數是可以省略的。

另外,\linebreak[n] 也可以強迫換行,n 代表由 1–4 的建議值,數值愈大表示愈是強烈 建議,不設定的話,就是換或不換兩種選擇,沒有中間地帶。和前面所說的不同處是,這 種換行會把原來那一行句子的長度平均布滿版面上行寬的長度。例如:

Please see Appendix A. We will be there soon.\linebreak Please see Appendix A\null. We will be there soon.

排版後會表現成:

Please see Appendix A. We will be there soon.

Please see Appendix A. We will be there soon.

4.1.2 關於縮排

第一行縮排了!這是因為我們完全沒有分章節,所以,LATEX 就把這些內容當做是引言的

(34)

4 章 實際上排版玩看看 4.2. 加入章節標題

部份,依 LATEX 的安排,引言開頭是會縮排的。要解決這個問題,可有兩種方法:

1. 在第一行之前加入 \noindent 來指示 LATEX 不要去縮排。但是這只作用在下指令的 地方,其他該縮排的地方還是會縮排。

2. 在 preamble 區加入 \parindent=0pt,這表示讓全文的縮排為 0pt,當然,這就表 示全文都不要縮排了。

4.2 加入章節標題

在 LATEX 裡頭,要加入章節標題實在是太容易了,也不必去管字體的大小及置放的位置,

盡管加上去就對了!LATEX 會替我們安排一切。我們這裡仍然以 report 類別來說明,因 為 article 類別裡頭,沒有章,只能適用於較簡單的短文。

% example2.tex

\documentclass{report}

\begin{document}

This is the first experience of \LaTeX.

\chapter{Aesop Fables}

\section{The Ant and the Dove}

An ant went to the bank of a river to quench its thirst, and being carried away by the rush of the stream, was on the point of drowning.

A Dove sitting on a tree overhanging the water plucked a leaf and let it fall into the stream close to her. The Ant climbed onto it and floated in safety to the bank.

\section{The Dog in the Manger}

A dog lay in a manger, and by his growling and snapping prevented the oxen from eating the hay which had been placed for them.

‘‘What a selfish Dog!’’ said one of them to his companions;

‘‘he cannot eat the hay himself, and yet refuses to allow those to eat who can.’’

\chapter{The Eagle and the Arrow}

An eagle sat on a lofty rock, watching the movements of a Hare whom he sought to make his prey.

(35)

4 章 實際上排版玩看看 4.3. 加入 TITLE PAGE資訊

An archer, who saw the Eagle from a place of concealment, took an accurate aim and wounded him mortally.

\end{document}

編譯出來的結果:

http://edt1023.sayya.org/tex/latex123/example2.tex http://edt1023.sayya.org/tex/latex123/example2.pdf

請注意他什麼時候會縮排,什麼時候會換頁。report 類別,新的一章會換頁,如果想節省 一點空間,可以換用 article 類別,\chapter{} 改用 \section{},原來 \section{} 就 改用 \subsection{},這樣就不會換頁,內容就會連續下去了。大家可以試著把 report 改成 article 及 book 再重新編譯一次,試試看結果有何不同。

4.3 加入 title page 資訊

這是指內頁的第一頁,我也不知道這個中文專有名詞是什麼,在 LATEX 裡頭,我們就稱為 title page。在 LATEX 的標準格式裡,他包括了標題(title)、作者名字(author)、日期

(date)及感謝詞(thanks)。要注意的是,在 report/book 類別,title page 是自成一 單獨頁的,但在 article 類別裡,他是和本文連起來的。我們就以上面的伊索寓言的文章 為例,要修改的地方是 preamble 區及本文區的 \maketitle:

% example3.tex

\documentclass{report}

\title{Aesop Fables}

\author{Aesop\thanks{Thanks to the reader.}

\and Nobody\thanks{Thanks to nobody.}}

\date{\today}

\begin{document}

\maketitle

This is the first experience of \LaTeX.

\chapter{Aesop Fables}

\section{The Ant and the Dove}

...

排版出來的結果如下:

http://edt1023.sayya.org/tex/latex123/example3.tex http://edt1023.sayya.org/tex/latex123/example3.pdf

我們可以發現,這一頁是不編頁碼的,從下一頁開始才是第一頁。作者可以有多個,使

參考文獻

相關文件

• Using the remainder estimate for the Integral Test, answer this question (posed at the end of Group Exercise 2 in Section 12.2): If you had started adding up the harmonic series at

Teachers may consider the school’s aims and conditions or even the language environment to select the most appropriate approach according to students’ need and ability; or develop

Robinson Crusoe is an Englishman from the 1) t_______ of York in the seventeenth century, the youngest son of a merchant of German origin. This trip is financially successful,

 Reading and discussion task: Read the descriptors for Level 4 under ‘Content’ in the marking criteria and identify areas for guiding the students to set their goals for the

fostering independent application of reading strategies Strategy 7: Provide opportunities for students to track, reflect on, and share their learning progress (destination). •

Strategy 3: Offer descriptive feedback during the learning process (enabling strategy). Where the

In this work, for a locally optimal solution to the NLSDP (2), we prove that under Robinson’s constraint qualification, the nonsingularity of Clarke’s Jacobian of the FB system

In this work, for a locally optimal solution to the nonlin- ear SOCP (4), under Robinson’s constraint qualification, we show that the strong second-order sufficient condition