大家來學 LATEX

Razor

2019/03/11 发布于 书籍 分类

文字内容
1. 大家來學 LATEX Version 1.0 2004 年 3 月 8 日 By Edward G.J. Lee 李果正 Email : edt1023@info.sayya.org 本教學文件之製作,部份接受下列計劃補助: 行政院研考會委辦 「政府機關資料文件交換之電子檔案格式應用研究」
2. 目錄 1 先來說一些故事 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 1 1.1.1 TAOCP(The Art of Computer Programming) . . . . . . . . . . . . . . . . 3 3 1.3 EX 又是什麼呢? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 一般人對 LATEX 的迷思 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 本文的重點方向 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2 2 Knuth 教授的生平簡介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 那麼,LAT 4 行前準備 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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/LATEX 語法概說 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 i
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 5 加入中文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 空間與位置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 ii
4. 目錄 目錄 5.6 線框 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.6.1 直線(rule) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.6.2 文字底線(underline) . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.6.3 方框(box). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.6.4 段落方框 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6 7 LATEX 的標準文稿類別 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.1 LATEX 類別的宣告 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.2 類別的選擇性參數 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.3 類別的種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 巨集套件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 iii
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 8 巨集套件何處尋? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 表格的處理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 iv
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 v
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 vi
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 1956 1960 1961.06.24 1963 1968 1977 1986 1 誕生。Milwaukee, Wisconsin; U.S. citizen。 進入凱思工學院(Case Institute of Technology)學習物理。 畢業後進入加州理工學院(California Institute of Technology)研究所,此 時轉向數學領域的研究方向。 和 Nancy Jill Carter 結婚。他的中文名字是高德納,他老婆名叫高精蘭,老 婆小他一歲。兩個小孩,一男一女。中文名字是 1977 去中國大陸時取的。 拿到 Ph.D.,並留校任教。 開始任教於 Stanford 大學,資訊科學系(Computer Science)。同年開始撰寫 名聞遐邇的 TAOCP(The Art of Computer Programming)。有人曾說,看了 這部書,往後對寫程式的話題都會變得謙虛。:) 不滿意書商所印出的 TAOCP,因此,自行開發 TEX 排版系統,這可就影響 了往後的排版、出版界,至今不墜。但也因此拖延了 TAOCP 第四冊的完成 時間。 榮獲 ACM 軟體系統獎。 http://www-cs-faculty.stanford.edu/~knuth/ 1
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 會影響他的思路,因此,寧願留住址,要和他聯絡就只好寫信,傳 2 http://www.fsf.org http://www.gnu.org/philosophy/free-sw.html 4 http://www-cs-faculty.stanford.edu/~knuth/cweb.html 5 http://www-cs-faculty.stanford.edu/~knuth/email.html 3 2
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 那麼,LATEX 又是什麼呢? TEX 是個很低階的排版語言,如果排版時都要從這種低階語言來控制版面的話,那將會非 常的煩複,所以,一些經常要用到的功能,都會先去定義好(稱為巨集,macro),這樣 6 http://www.ntg.nl,荷蘭的 TEX User Group 算是相當活躍的。 3
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 一般人對 LATEX 的迷思 這裡引用 Peter Flynn 在他的 A beginner’s introduction to typesetting with LATEX 9 一文中 所提出來的六大迷思,並添加個人的一些看法: • LATEX 只能使用一種字型? 當然不是,雖然 TEX 系統預設是使用當初 Knuth 教授所設計的 METAFONT,但目 前 OpenType, TrueType, Adobe Type1 字型都可以用在 LATEX 當中,只不過,安裝 字型的部份不是那麼的直觀就是了,但比起其他的排版系統,TEX/LATEX 所能利用 的字型種類,可以說是最多的。 • LATEX 只能用於 Unix-like 的作業系統? Knuth 教授慷慨的把 TEX 的原始程式碼開放出來10 ,所以,只要是有人在使 7 Leslie Lamport 於 1985 在 CSL 任職時寫了 LATEX。目前任職於 DEC Systems Research Center 但已 幾乎沒有參與 LATEX 的後續發展了。 8 http://www.latex-project.org/latex3.html 9 ftp://ftp.dante.de/tex-archive/info/beginlatex/beginlatex.pdf 10 雖然有一些版權的規定,但是 Knuth 教授的本意,這些原始碼是屬於 Public Domain,只是,如果經過 修改,不能再以 TEX 為名,要另外改一個名稱,以免和原來的 TEX 搞混。TEX 這個商標的所有人是美國數 學協會(American Mathematical Society, AMS)。 4
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 就剛好稱職的做他排版專業的工作。 11 http://www.latex-project.org/ http://tug.ctan.org/ 13 http://www.lyx.org/ 14 http://www.texmacs.org/ 12 5
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 用於一般商業出版上。 6
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 1 http://tug.org/texlive/ http://www.tug.org/。加入會員的話,只要些許會費,則可以獲得 TEX Live CD 及年報資訊的寄 發。 2 7
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/ 8
16. 第 2 章 行前準備 2.4. 商業維護的 TEX/LATEX 系統 2.4 商業維護的 TEX/LATEX 系統 上面所提到的都是 free 的版本,縱使是 TEX Live CD,雖也可以讓非 TUG 會員訂購, 但他們的 iso 是可以自由下載,不一定要花錢買。當然,這裡是鼓勵大家加入會員或 花點小錢購買,也算是贊助他們繼續維護好品質的 TEX 系統。另外,亦有商業維護的 TEX/LATEX 系統,雖然要花錢,但功能上可能會比較符合特別的需要,而且有比較完整的 售後服務方案: TrueTEX TurboTEX Y&Y TEX pcTEX VTEX Scientific Word Textures OzTEX Scientific Assistant http://www.truetex.com/ http://www.truetex.com/ http://www.YandY.com/ http://www.pctex.com/ http://www.micropress-inc.com/ http://www.sciword.demon.co.uk http://www.bluesky.com/ http://www.trevorrow.com/oztex/ http://www.advanced-science.com/ Windows Un*x, DOS, Windows Windows Windows Windows, Linux, OS/2 Windows Macintosh Mac OS X Mac OS X 2.5 選個順手的編輯器 TEX/LATEX 本身並不內附編輯器,這和許多排版軟體不一樣,他只專注在排版的過程,原 始文稿是如何產生的並不插手干涉,這樣子的自由度很大,每個人都可以選用適合他自己 的編輯器,但和目前一般的幕前排版系統比較的話,會讓初接觸的朋友不知所措,因為他 不曉得要如何使用 TEX/LATEX 來「編輯」原始文稿! 當然,有些 TEX/LATEX 的發行版本,乾脆就弄了個編輯器,把編輯器和排版系統本身連 接起來,這樣是很方便,但有很大的可能又得花時間學習另一種不熟悉的編輯器操作。本 文的說明,不準備被編輯器給綁住,你愛用什麼編輯器就用什麼編輯器,讓我們專心在排 版過程本身吧! 以下僅簡單介紹和中文相容的編輯器。當然,只要使用順手的編輯器都可以拿來用。原則 上,剛開始接觸 LATEX,個人是建議從命令列開始瞭解起,等整個流程有個概念後再來使 用一些方便的編輯器上的巨集及按鈕設定,不然,有時編輯器上的設定有問題時,會不知 道從何改起。至於編輯器的操作,請自行參考各編輯器的說明文件或網路上的教學文件, 這裡就不多談了。 9
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 3 http://www.gnu.org/software/auctex/ 10
18. 第 2 章 行前準備 2.5. 選個順手的編輯器 2.5.6 Kile 這是很方便的 LATEX 圖形界面整合環境,還可叫出繪圖軟體來繪圖,如果其他作業系統也 有安裝 Qt/KDE 的話,也是可以編譯安裝使用: http://kile.sourceforge.net/ 11
19. 第3章 TEX/LATEX 語法概說 這一章要談的是,和一般的純文字文稿及其他 markup 式文件系統在語言上的一般差異 性。為了讓觀念上能夠更清楚,以下所述主要是要在命令列執行的,致於編輯器上方便的 按鍵及巨集,這裡就不多談,一方面是每個人使用的編輯器不一樣,二方面是要先把黑盒 子拿掉,整個處理流程才會有概念。 當然,由於完全還沒有開始實際寫文稿來測試,所以,這章是紙上談兵,不必動手,用看 的就好。但,別急,我們會在第 4 章開始實際玩看看,請別忘了,到時要再回頭來複習一 下這些資料。 而且,前面已經說過,這篇文章主要是著眼於 LATEX 所附上的巨集,一些其他方便的套件 引用,將會在最後或另文再來談。其實,不引用任何外來特殊套件,讓 LATEX 本身去處 理,最起碼也就不會太離譜,要講求美觀、微調,個人是認為先把基礎弄起來再說,有些 套件的複雜程度,會令人頭疼,你是不是真有這個需要,值得考慮。而且,很多時候自認 為不錯的「微調」,其實常常會不合排版的慣例。TEX/LATEX 的語法,可以是很簡單明 白,也可以是相當的複雜,這是 TEX 系統本身的彈性所導致。 3.1 LATEX 文稿的處理流程 最簡單的一句話,就是把編輯器編輯好的文稿(通常結尾是 .tex),利用 latex 這個指 令去編譯文稿就對了! latex your.tex 需要注意的是,如果有索引,還要用 makeindex 執行一次,有參考文獻,還需要 bibtex 處理一次,最後再使用 latex 再處理一至二次,也就是說視文稿的複雜程度,latex 可能 需要執行好幾次,這在往後碰到時會再提出來。另外,處理中文的話,需要其他前置處 12
20. 第 3 章 TEX/LATEX 語法概說 3.2. LATEX 的特殊專用符號 理,這裡暫時先以英文文稿來說明,中文的部份,只要加入中文環境及(或)改用能處理 中文的前置處理器就可以了。 這 樣 經 過 latex 處 理 後 , 會 產 生 一 個 your.dvi 檔 , 然 後 可 以 使 用 dvips 來 產 生 PostScript 格式的檔案。也可以使用 dvipdfm[x] 來產生 PDF 的格式,當然,也 可以使用 ps2pdf 經由 PostScript 格式轉換成 PDF 格式。另外,也可由 pdflatex 由 your.tex 直接編譯成 PDF 格式的輸出。 3.1.1 總結一下處理流程 開始 latex 可能不只一次 ps 檔 your.tex dvips ps2pdf pdf 檔 dvipdfm[x] 或 pdflatex 完成 3.2 LATEX 的特殊專用符號 在 TEX/LATEX 的世界,原始文稿都是純文字檔,任何一種編輯器都可以打開來編輯、觀 看。而排版指令通常是由反斜線(\, backslash)所開頭來引導。註解則是由百分號(%) 來引導。例如,以編輯器編輯下列文字: This is my first \LaTeX\ typesetting example. 編譯後會變成以下的結果: This is my first LATEX typesetting example. 其中的 \LaTeX 就是 LATEX 的一個指令,會顯示 LATEX 這個特殊的圖示。 由於,西方國家的語系,通常字母、符號的最大容量只有 256 個(28 ),因此,許多 現有的符號必須拿來當做控制指令,才能符合排版的多樣化需求。以下的符號,接觸 13
21. 第 3 章 TEX/LATEX 語法概說 3.3. LATEX 排版上的一些規範或慣例 TEX/LATEX 的朋友,可能都得時時留意,不要未經處理就直接寫進文稿裡頭去了。 通常,編輯器的語法顏色會幫助判斷語法是否正確,但不是都能完美無缺,有時還是會漏 掉,這時別忘了查看一下 *.log 檔案,例如:編譯 your.tex 檔的話,他的 log 檔就是 your.log。 符號 作用 文稿上使用 LATEX 的替代指令 \ % # ˜ $ 下排版命令 註解 定義巨集 產生一個空白 進入(離開)數學模式 數學模式中產生下標字 數學模式中產生上標字 標示命令的作用範圍 標示命令的作用範圍 數學模式中的小於符號 數學模式中的大於符號 OT1 編碼,數學模式中才能正確顯示 表格中的分隔符號 $\backslash$ \% \# \~{} \$ \_{} \^{} \{ \} $<$ $>$ $ $ \& \textbackslash NA NA \textasciitilde \textdollar \textunderscore \textasciicircum \textbraceleft \textbraceright \textless \textgreater \textbar NA ˆ { } < > & 3.3 LATEX 排版上的一些規範或慣例 除了上面所談到的特殊符號外,也有一些規範或慣例要遵守,有些是比較硬性的規定,有 些則只是慣例,可能不同的國家、語言會有不同的慣例,暫時先把他當成是 LATEX 的遊戲 規則就成了。 3.3.1 字型的相關術語 要談排版上的規範、慣例前,我們得先認識一下字型的一些術語,以便往後文章中提到時 有個概念。通常我們每個字都是置放於一個假想的方框中,稱為 em-square,同一個字型 的同一個點數,每一個 em-square 大小都是相同的,實際上的字(glyph)要置放在這個 em-square 的什麼位置,這是字型設計者的觀點,所以,同樣點數的不同字型,他的字的 大小不一定會一樣,因為我們是使用 em-square 的大小在比較的,而非實際的 glyph。 在文章中排列的時候,則是將 glyph 置於一個以假想參考點(reference point)為基準的 一個假想線上,稱為基線(baseline),大寫字母除了 Q 以外,他們的底部都是置於基線 14
22. 第 3 章 TEX/LATEX 語法概說 3.3. LATEX 排版上的一些規範或慣例 上的。但小寫字母則不一定剛好座落在基線上,有些字的筆畫可能超出基線以下,例如 y、j 等字母。關於字型在文章中的置放位置,我們來看看一個模擬圖:1 cap height yZ mean line x-height reference point baseline depth width 這個超出基線以下的長度,我們稱之為深度(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 實際字型設計上的各部份專有名詞及結構,當然不會是這麼簡略,這裡的模擬圖,只是暫時讓字的一般 置放有個粗略的概念。 15
23. 第 3 章 TEX/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. 16
24. 第 3 章 TEX/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." 這是錯誤示範! 排版出來的情形是: 17
25. 第 3 章 TEX/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,有沒有 覺得有點道理?:-) 18
26. 第 3 章 TEX/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 . . . . 中文的刪節號是由兩個全形的三點所組成六點的,即:· · · · · · ,就是我們 Big5 碼的 0xa14b(U+2026),但由於 Unicode 尚有一個 MIDLINE HORIZONTAL ELLIPSIS(U+22EF),因此,有些軟體在解讀上有可能會不一樣,因為我們的字型, 大部分在製作標點符號時是置在中央的地方,不像中國大陸是置放在基線的地方, 而 Unicode 官方採用的樣本字型,剛好是中國大陸的廠商所提供,這樣一來有些軟 體工作者就認為我們的刪節號應該是 U+22EF 了,很不幸的,我們的 Big-5 碼並沒有 相對應的字碼。 19
27. 第 3 章 TEX/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 這是可以調整的,也就是去除兩個橫線之間的字間距,這樣就不會產生小空白了,中文刪節號也有同樣 的情形,我們會在微調的部份再來討論。 20
28. 第 3 章 TEX/LATEX 語法概說 3.4. LATEX 的文稿結構 5. 避頭點 這可是排版的重要功能。英文的通常沒有問題,LATEX 會自動避開處理,中文就不一 定了,LATEX 可不認識中文,但通常中文相關程式及套件,多多少少都會處理,只不 過,有時候偶爾可能會誤判。那麼,到底什麼是避頭點?底下列個表,大家就明白 了,我列中文的,英文的就不列出來了,因為 LATEX 會自動處理,不必我們擔心。 標點符號 置放處 ,。;、:」)》!? 「(《 破折號及刪節號 不能置於行首 不能置於行尾 置於首尾皆可 簡單的說,除了破折號及刪節號,沒有開口的,不能置於最開頭,開口向右的,不 能置於最右,開口向左的,不能置於最左。通常都會處理好,但校稿的時候要注意 一下誤判的地方。 3.4 LATEX 的文稿結構 3.4.1 環境(environment) 上一節所談的都是指令,雖然也可以由大括號來定作用範圍,但如果是一整段,甚至是一 整篇文章都要作用時,那指令可能就不很適合了,因此,LATEX 也有一種巨集結構,稱為 環境(environment),主要是讓作用範圍能擴大至較大的範圍。 所有的環境,都是起於 \begin{環境名稱},止於 \end{環境名稱},這兩個指令之間的文 稿都會被作用,而且,環境之內還可以套用其他不同的環境。 LATEX 文稿的內文,其實就是包在一個 \begin{document} 和 \end{document} 這個 document 環境當中。 3.4.2 最簡單的 LATEX 的文稿結構 以下就是所有 LATEX 必需具備的文稿大結構: \documentclass{article} 這裡是 preamble 區 21
29. 第 3 章 TEX/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} 22
30. 第 3 章 TEX/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 會自動計算處理,字型大小也會和內文使用的字型大小互相配合調整,使用者 就專心在內文構思、寫作即可。以下由列表來瞭解整個章節結構: 23
31. 第 3 章 TEX/LATEX 語法概說 3.4. LATEX 的文稿結構 深度標號 指令 作用及注意事項 −1 0 1 2 3 4 5 \part{} \chapter{} \section{} \subsection{} \subsubsection{} \paragraph{} \subparagraph{} 這是最大的結構,我們中文通常稱為「部」。 章。在 article 類別裡頭沒有章。 節。 小節。 次小節。 段落。 小段落。 章節標題的內容就是直接寫入指令的大括號裡頭就可以了,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 的指令很多,直接介紹的話,一方面記不 住,二方面也不容易瞭解他的實際作用,所以,我們將會在下章舉例時穿插在裡頭說明, 等這份文件接近尾聲時,再來整理個指令速查表,這樣以後查指令就很方便了,不必去死 記,只要知道有個這樣功能的指令就夠了。 24
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} 25
33. 第 4 章 實際上排版玩看看 4.1. 簡單的實例 使用編輯器編輯,然後存檔成 exmaple1.tex,這樣就可以編譯了: latex example1.tex dvips -Ppdf example1.dvi ps2pdf example1.ps dvipdfm[x] example1.dvi pdflatex example1.tex => => => => => 產生 example1.dvi 產生 example1.ps 產生 example1.pdf 或 由 example1.dvi 直接產生 example1.pdf 或 由 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 Please see Appendix A. We will be there soon. will be there soon. 4.1.2 關於縮排 第一行縮排了!這是因為我們完全沒有分章節,所以,LATEX 就把這些內容當做是引言的 26
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. 27
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 我們可以發現,這一頁是不編頁碼的,從下一頁開始才是第一頁。作者可以有多個,使 28
36. 第 4 章 實際上排版玩看看 4.4. 加入目錄(TABLE OF CONTENTS) 用 \and 指令來連接。日期不一定要有,如果沒有 \date{\today} 這個指令,那還是有 日期,但只能固定在今天。如果內容過長,他會自動折行,但也可以手動加 \\ 來強迫換 行,不管如何換行,整個句子是居中排列的。\maketitle 是下在本文區的開頭,如果不 下這個指令,那編譯時不會有什麼錯誤,只是就沒有 title page 了。 4.4 加入目錄(Table of Contents) 加入目錄(Table of Contents)對 LATEX 而言,更是輕而易舉的事情,只要在本文開頭加 個 \tableofcontents 指令就成了!依上面的例子,修改成: % example4.tex \documentclass{report} \title{Aesop Fables} \author{Aesop\thanks{Thanks to the reader.} \and Nobody\thanks{Thanks to nobody}} \date{\today} \begin{document} \maketitle \tableofcontents This is the first experience of \LaTeX. \chapter{Aesop Fables} \section{The Ant and the Dove} ... 排版出來的結果如下: http://edt1023.sayya.org/tex/latex123/example4.tex http://edt1023.sayya.org/tex/latex123/example4.pdf 這裡千萬要注意的是,\tableofcontents 要加在 \maketitle 的後面,否則目錄會印在 title page 之前。而且要編譯兩次。第一次產生 example4.toc,然後第二次編譯再跟據這 個 toc 檔,真正編入目錄。 目錄是包括圖表目錄的(List of Figures, List of Tables),但我們目前還沒有談到圖表的 排版,因此暫時略過,等談到時再來看要如何加入圖表目錄。 4.5 加入摘要(abstract) 這不一定會有,如果要加入的話,可使用 abstract 環境,在這個環境中的文章,左右會 29
37. 第 4 章 實際上排版玩看看 4.6. 加入註解 縮排。要注意的是,只有 article/report 類別才有 abstract,book 類別不能使用這個環 境。 % example5.tex \documentclass{report} \title{Aesop Fables} \author{Aesop\thanks{Thanks to the reader.} \and Nobody\thanks{Thanks to nobody}} \date{\today} \begin{document} \maketitle \begin{abstract} The tale, the Parable, and the Fable are all common and popular modes of conveying instruction. Each is distinguished by its own special characteristics. \end{abstract} \tableofcontents \chapter{Aesop Fables} \section{The Ant and the Dove} ... 排版出來的結果如下: http://edt1023.sayya.org/tex/latex123/example5.tex http://edt1023.sayya.org/tex/latex123/example5.pdf report 類別的摘要自成一頁,不編頁碼,且不會編入目錄中,這和一般的論文格式可能 會不一樣,使用時請注意。artcile 的類別則仍然是和本文相連的,會出現在文章標題之 後。 abstract 和 summary 在較正式的論文是有區分的,通常 abstract 在文前;summary 則 在文後。但目前一般性的文章則沒有這樣區別,通通當成「摘要」。通常,摘要裡頭是不 用註解、無交互參照也不使用公式圖表的。 4.6 加入註解 在 LATEX 裡頭,註解可有兩種方式,一種是腳註(footnote),一種是邊註(marginal note)。通常 LATEX 的腳註預設是由阿拉伯數字在編號,置於頁底部。在沒有部(part) 的情形下,report/book 類別,編號每章會從頭起算,article 類別則會連續,而且,會 使用 footnotesize 的字體印出。邊註則不編號,字體是正常大小。 30
38. 第 4 章 實際上排版玩看看 4.6. 加入註解 4.6.1 腳註(Footnote) 在所要加註的那個字後,使用 \footnote{} 指令即可,解說的文字就寫入大括號之內,一 般 LATEX 的指令在此都仍然有有作用,會印在此頁的底部,以小一點的字來印出,並加上 編號。以下我們就試試看在 Dove 這個字來做腳註。請注意,Dove 這個字和 \footnote{} 之間是沒有空白的。 % example6.tex \documentclass{report} \title{Aesop Fables} \author{Aesop\thanks{Thanks to the reader.} \and Nobody\thanks{Thanks to nobody}} \date{\today} \begin{document} \maketitle \tableofcontents 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\footnote{Pigeon, an emblem of peace.} 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. ... 排版出來的結果如下: http://edt1023.sayya.org/tex/latex123/example6.tex http://edt1023.sayya.org/tex/latex123/example6.pdf 4.6.2 邊註(Marginal note) 邊註只是把 \footnote{} 換成 \marginpar{} 而已,內容仍然寫入大括號內。但和腳註不 一樣的是,他沒有編號(因為就在旁邊,無此必要),他的字體也不會小一號,和內文的 字體大小是一樣的,這在後面討論到字型的時候會談到如何改變字體的大小。 % example7.tex \documentclass{report} 31
39. 第 4 章 實際上排版玩看看 4.7. 字型的相關調整 \title{Aesop Fables} \author{Aesop\thanks{Thanks to the reader.} \and Nobody\thanks{Thanks to nobody}} \date{\today} \begin{document} \maketitle \tableofcontents 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\marginpar{Pigeon, an emblem of peace.} 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. ... 排版出來的結果如下: http://edt1023.sayya.org/tex/latex123/example7.tex http://edt1023.sayya.org/tex/latex123/example7.pdf 4.7 字型的相關調整 TEX/LATEX 的字型系統算是相當複雜的,這裡不多談其中原理,站在使用者的角度,我們 只要知道怎麼使用就行了。在這裡,我們說字型(font),指的是字型本身的一個總稱, 或稱為字體,在字的形狀的時候,我們就稱為字形(font shape)。 LATEX 使用的字型選字機制,以目前新版本的 LATEX 而言,是使用 1993 年發行的 NFSS(New Font Selection Scheme) 第二版為標準。當然,仍然是建立在 TEX 字型機制的 基礎上的,這已超出這篇文章的範圍。 4.7.1 LATEX 對字型的屬性描述 在 LATEX 裡,對於字型的描述,使用了五種屬性來說明,這五種屬性,也是 LATEX 巨集中 常要使用到的參數,甚至是錯誤訊息標示字型來源的時候,會把字型的這些屬性給顯示出 32
40. 第 4 章 實際上排版玩看看 4.7. 字型的相關調整 來。 1. 字型編碼(font encoding) 這裡所謂的字型編碼,指的是各個個別的字在一個字型裡頭的排列順序及安排方 式。原始的 TEX 字型編碼我們就稱為 OT1(Old TEX text encoding),這是預設的, 如果都不指定字型編碼,那所使用的就是 OT1 編碼。在目前新一代的字型編碼裡 頭,字的安排方式及內容和 OT1 不一樣,例如 T11 ,這在往後提到改變字型編碼時 會再談到,我們目前就不去調整字型編碼,使用預設的 OT1,其他的編碼這裡就不 多談了。 2. 字族(font family) 指 同 一 設 計 類 型 的 字 型 集 合 的 名 稱 , 例 如 羅 馬 字 族 (roman)、 打 字 機 字 族 (typewriter)等等,通常前面會冠上製作商或製作人的名稱,例如 Knuth 教授 設計的,稱為 ‘Computer Modern Roman’,Adobe 公司製作的羅馬字族稱為 ‘Adobe Times’。我們預設使用的,當然就是 Knuth 教授所設計的 Computer Modern fonts。 以下為一些例子: 簡稱 代表意義 cmr cmss cmtt Computer Modern Roman Computer Modern Sans Serif Computer Modern Typewriter 3. 字型系列(font series) 這是指字型的 weight(胖瘦)及 width(長扁)來區分的。例如粗、細字體,一般 我們正常用的是 medium,粗體則是 bold。以下是一些例子: 簡稱 代表意義 m b bx sb c medium bold Bold extended Semi-bold Condensed 4. 字形(font shape) 這個望文生義,就是字的形狀。例如意大利斜體(italic)、斜體(slant)、small caps 等等。以下是幾個例子: 1 正式名稱是 Cork’s TEX extended text encoding 又稱為 Text Companion encoding。這裡的 T1 和 Type 1 字型規格無關,他是字型編碼方式,他把字型裡頭有關一些重音符號字母單獨視為一個單獨的字,而非如 OT1 是由一般字母和重音符號組合而成。 33
41. 第 4 章 實際上排版玩看看 4.7. 字型的相關調整 簡稱 代表意義 n it sl sc 正常字(normal),指 upright 或 roman Italic Slanted Small Caps 5. 字型大小(font size) 預設的字型大小是 10pt(10 point),十點字。不加單位的話,預設的就是 pt。請 注意,非標準 LATEX 類別的預設字型大小可能會不一樣。 我們對字型要調整改變的,就是這些字型屬性的設定值。LATEX 已設定好方便的指令給我 們使用。 4.7.2 調整字族、字型系列、字形的指令 字型 標準指令 宣告式指令(環境) 舊用法 字 形 textup italic slant small caps \textup{textup} \textit{italic} \textsl{slant} \textsc{small caps} {\upshape {\itshape {\slshape {\slshape {\it italic} {\sl slant} {\sc small caps} 系 列 medium boldface \textmd{medium} \textbf{boldface} {\mdseries medium} {\bfseries boldface} {\bf boldface} 字 族 roman sans serif typewriter \textrm{roman} \textsf{sans serif} \texttt{typewriter} {\rmfamily roman} {\sffamily sans serif} {\ttfamily typewriter} {\rm roman} {\sf sans serif} {\tt typewriter} textup} italic} slant} small caps} 先別嚇了一跳,這是有跡可循的。其中 upright, medium, roman 都是一樣的,這是一般的 正常字,就不必麻煩去設定他了,除非是要在特定字型範圍裡頭,重新改變成正常字體。 從前面所說的簡稱的字串,再和 text, family, series, shape 去配對來使用,這樣只要記得 簡稱就行了,例如:italic 的就是 \textit{}。不然也可以使用「偷吃步」的舊用法,其 實這也不是什麼偷吃步,他是原始 Plain TEX 所定義的,在舊版的 LATEX 2.09 也相容他而 沿用,並加以擴充。但如果使用舊用法,那有時組合式的表示時可能會無效,例如粗斜體 這種粗體和斜體設定混合時,就無法產生粗斜體了,這時還是得乖乖使用正統標準 LATEX 的表示法。 要注意的是,大括號的位置,宣告式的指令,整個作用範圍是連指令一起包住的,他可以 當成環境來使用,例如 \begin{itsahpe}, \end{itshape},這樣在這個環境內的文字就 通通會使用 italic 斜體,也可以不加參數使用,例如 \itshape,這樣以下的文字通通會使 34
42. 第 4 章 實際上排版玩看看 4.7. 字型的相關調整 用 italic 斜體,直至另一個改變字型的指令出現為止。標準指令的作用範圍則是當做指令 的一個參數,這些參數是出現在指令後的大括號內的。現在就來實際編譯個例子試看看: % example8.tex \documentclass{report} \title{\bfseries Aesop Fables} \author{Aesop\thanks{Thanks to the reader.} \and Nobody\thanks{Thanks to nobody}} \date{\today} \begin{document} \maketitle \tableofcontents \chapter{Aesop Fables} \section{The \textsl{Ant} and the \textsl{Dove}} \itshape An antwent 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. \upshape A \textsl{Dove} sitting on a tree overhanging the water plucked a leaf and let it fall into the stream close to her. The \textbf{\textsl{Ant}} climbed onto it and floated in safety to the bank. \section{The {\it Dog}\/ in the Manger} A \textbf{\textit{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 \textsc{Eagle} and the Arrow} An \textsc{eagle} sat on a lofty rock, watching the movements of a Hare whom he sought to make his prey. An archer, who saw the \textsc{Eagle} from a place of concealment, took an accurate aim and wounded him mortally. \end{document} 我們把 title page 的標題改成粗體(請注意,宣告式或舊用法,大括號是把指令和文字整 個括住的),把 Dove 改成 slant 斜體,把 dog 改成 italic 粗斜體2 ,把 ant 改成 slant 粗 2 請注意,這兩種斜體是不一樣的,slant 是一般正常的字,只是把他傾斜個角度而已,但 italic 則是另一 35
43. 第 4 章 實際上排版玩看看 4.7. 字型的相關調整 斜體,把 eagle 改成 small caps。由於章節標題原本就會轉換成粗體,所以章節標題的部 份,粗體就不必重複設了。 但這裡發現例子裡第二章標題中的 Eagle 並沒有改變字體,而且以 latex 編譯時會產生以 下的錯誤(這些訊息也會在 example8.log 中找到): ... LaTeX Font Warning: Font shape ‘OT1/cmr/bx/sc’ undefined (Font) using ‘OT1/cmr/bx/n’ instead on input line 4. ... LaTeX Font Warning: Some font shapes were not available, defaults substituted. ... 現在我們看到了前面所談的屬性簡稱,這在 LATEX 就會使用這種屬性來表示而發出訊 息,這裡 OT1/cmr/bx/sc 就表示了 OT1 編碼,Computer Modern Roman 字族,Bold extended 系列,而且是 small caps 形狀的字型,錯誤訊息顯示,他並沒有定義,因此, 這個字型將會使用預設的字型來代替,這裡就是以 n 正常形狀的 bx 系列字型來替代。所 以,字型指令並不是都可以隨意組合的,有些是根本就沒有這種字型,有些則是沒有用巨 集去定義好,這樣 LATEX 就取不到字了,但別擔心,頂多就是使用預設的字型罷了! 另一個很奇怪的地方,就是第一章、第二節的標題,為什麼是 {\it Dog}\/ in the...}? 這個插入的 \/ 是什麼東西?這是 TEX 系統調整斜體字(包括 iatlic 及 slanted)和正常字 之間的空白的一個指令,稱為 italic correction。這樣,在斜體字和正常字之間的空白才會 正常。那為什麼其他的斜體指令沒有加這個調整呢?這是因為 LATEX 巨集在設計時就有考 慮到這個問題,所以 \textit{} 這類標準指令都會自動調整 italic correction,不必由我 們手動調整。 另外,章節標題本就會自動轉換成粗體,標題上的 dog 為什麼沒有變粗體?這在前面有提 到過,這種舊用法有時是無法複合使用的,粗體又斜體的指令會用不上來。因此,建議盡 量使用 LATEX 的第一種標準指令來改變字型。使用 {\it ...} 或 {\itshape ...}3 這種 指令的話,就得時時注意 italic correction 的問題,也得注意是否可以複合使用指令的問 題,所以,還是不要偷懶的好。:-) 後下是排版出來的結果: http://edt1023.sayya.org/tex/latex123/example8.tex http://edt1023.sayya.org/tex/latex123/example8.pdf 種獨特的字型設計。 3 宣告式指令可以複合使用,但仍然會需要手動做 italic correction。 36
44. 第 4 章 實際上排版玩看看 4.7. 字型的相關調整 4.7.3 相對字型大小的調整 接下來談最後一個字型大小屬性的調整,這在使用上比較單純,只要知道指令就可以馬 上拿來使用。但是 TEX/LATEX 系統中,談到字型,裡頭一堆地雷,例如前面談到正常的 內文字型大小是 10pt,現在如果想製作海報,需要 64pt 的字的時候就會發現,設不出來 了!正常 LATEX 的定義,字型的大小範圍是在 5–24.88pt 之間,超出這個範圍的字需要其 他的 package 的幫忙。4 這裡我們先來看看內文 10pt 時各種字型大小指令、實際例子及其大小(這是相對大小, 會隨內文預設字型大小而自動調整):5 指令 \tiny \scriptsize \footnotesize \small \normalsize \large \Large 實際例子 {\tiny tiny} {\scriptsize scriptsize} {\footnotesize footnotesize} {\small small} {\normalsize normalsize} {\large large} {\Large Large} \LARGE {\LARGE LARGE} \huge {\huge huge} \Huge {\Huge Huge} 效果 Large 實際的大小(點數) 5pt 7pt 8pt 9pt 10pt 12pt 14.4pt LARGE 17.28pt tiny scriptsize footnotesize small normalsize large huge Huge 20.74pt 24.88pt 這些字型大小指令也可以當成環境來使用,例如: \begin{small} 本文內容 \end{small} 這樣用也是可以的。 4.7.4 絕對字型大小的調整 通常字型的大小,使用上一節所說的相對字型大小來調整會比較方便,而且對於整個版面 的配合也會比較恰當,例如行距也會跟著做適當的調整,如果自行用絕對字型大小的方法 來調整字型大小的話,常常會造成行距不一致的情形,因此,如非必要,應盡量避免。 4 這是 LATEX 本身巨集定義的問題,因為他主要是針對一般性文件及書籍,TEX 本身的能力,可以讓字型 放大到 2047pt。 5 請注意,本文 pdf 格式內文使用 12pt 字型大小,列表及其中的例子,是由另外 10pt 預設字型大小所製 作的 eps 圖檔引入,以免失真。 37
45. 第 4 章 實際上排版玩看看 4.8. 原文照列 但有時候就是需要做這樣的調整,例如本文封面的字型大小,縱使是 LATEX 預設的最大字 型也覺得稍小了點,這就要另外引入 package 調整了。 這裡我們使用 type1cm package 來調整。當然,得使用 Type 1 字型,才可以達到無段放 大、縮小的目的6 ,而這個 package 也是配合 Type 1 字型使用的。個別放大的 pk 點陣 字,這裡就不討論了,目前絕大部份的 Computer Modern 字型都已有 Type 1 的 free 版 本,而且各個 TEX distribution 都會附上,使用上會較方便。以下是 type1cm 的使用方 法: ... \usepackage{type1cm} ... \fontsize{字型大小}{行距大小}\seclectfont ... 還記得如何引用巨集套件嗎?請參考第 3 章、第 3.4 節,第 3.4.3 小節的說明。 其中的「字型大小」就是所要指定的大小,通常以 pt 為單位,當然,要使用其他單 位也是可以。「行距大小」也是要一併指定,不可省略。最後的 \seclectfont 是讓 他發生作用的意思,LATEX 有些關於字型的較低階指令,要下 \seclectfont 後才會作 用,\fontsize{}{} 正是其中之一。 4.8 原文照列 什麼是原文照列?一般 LATEX 遇到倒斜線會認為是一個指令的開始,如果連整個指令都要 印出的時候呢?這時就要用到原文照列的指令及環境了。 4.8.1 原文照列指令 如果只是一小段的文字要原文照列,那使用指令會比較方便,這個指令就是 \verb 文字 內容 ,其中的 這個符號可以使用其他非字母的符號代替,只要前後相同就行了,例 如:\verb+文字內容+ 這樣也是可以的。 6 A LT EX 系統中的字型放大,在 10pt 以上,是以 1.2 的倍數為次方來放大的,因此,正文 10pt 的字型大 小的話,不會有 13pt 這種大小的字型,LATEX 會選用最相近大小的字型來替代。 38
46. 第 4 章 實際上排版玩看看 4.8. 原文照列 4.8.2 原文照列環境 如果是一整段的內容要原文照列的話,使用環境會比較方便,那便是 verbatim 環境。不 管是哪一種原文照列的情形,預設是使用打字機字族的字型來顯示的。底下是一個簡單的 例子,說明原文照列指令及環境的使用: % example9.tex \documentclass{article} \begin{document} The example of \verb \verb{} command and \texttt{verbatim} environment. \section{\textbackslash{}\texttt{verb} command} When you want to express you home directory, you can \verb echo $HOME varient to display your home directory in your sh script. \noindent \verb* This is 4 space here. \section{\texttt{verbatim} environment} Here is a sh script to determine if on GNU/Linux system. \begin{verbatim} #!/bin/sh Date=‘date ’%y%m%d’‘ if ‘uname‘ = Linux then Mail=/var/spool/mail/edt1023 Target=/mnt/hd else Mail=/var/mail/edt1023 Target=/mnt/pub fi \end{verbatim} \end{document} 這裡會發現一些奇怪現象,例如 \verb* 那個星號是什麼意思呢?就是讓空白以 Ã 的方式 表示出來的意思,verbatim 環境也是可以這樣使用。例如 example9 中的: \verb* This is 4 space here. 也可以寫成: \begin{verbatim*} This is 4 space here. \end{verbatim*} 39
47. 第 4 章 實際上排版玩看看 4.9. 加入中文 差別在於,環境的上下行會多空出個空白行出來。 另外,標題為什麼不使用 \verb \verb 就好了呢?原因是原文照列的指令和環境都不能 當做其他指令的參數,標題本身就是一個指令,所以 \verb 不能在裡頭。 使用 \textbackslash 這麼長的敘述,而不用 $\backslash$ 這個簡單的方式,原因是這 個文稿有使用 LATEX2HTML 來轉成 HTML 格式,使用 LATEX 的替代表示法會轉成一般的 符號,但使用後者的方式則會轉成圖檔,所以這裡就使用 LATEX 的替代表示法了。 底下是排版出來的結果: http://edt1023.sayya.org/tex/latex123/example9.tex http://edt1023.sayya.org/tex/latex123/example9.pdf 4.9 加入中文 這裡只說明如何使用 CJK package 的情形,原因是一般 TEX distribution 會附上(有些發 行套件並沒有附上,這時只好自行安裝了)。CJK package 是把中文的部份包在一個環境 裡頭,在這個環境內就可以使用中文,離開這個環境就又回復到原本的英文環境,底下由 例子來說明。 \documentclass{article} \usepackage{CJK} % 使用 CJK 巨集套件 \begin{document} % 進入 CJK 環境,並使用 Big-5 碼及 hwmm 這個字型 \begin{CJK}{Bg5}{hwmm} \section{CJK 巨集套件} 這是一個測試,關於 CJK package 的測試。 \section{桃花源記節錄} 初狹,纔通人;復行數十步,豁然開朗。土地平曠,屋舍儼然。有良田、美池、% 桑、竹之屬,阡陌交通,雞犬相聞。其中往來種作,男女衣著,悉如外人;黃髮、% 垂髫, 並怡然自樂。見漁人,乃大驚,問所從來;具答之,便要還家,設酒、殺雞、% 作食。村中聞有此人,咸來問訊。自云:「先世避秦時亂,率妻子邑人來此絕境,% 不復出焉;遂與外人閒隔。」問今是何世;乃不知有漢,無論魏、晉。此人一一% 為具言所聞,皆歎惋。餘人各復延至其家,皆出酒食。停數日,辭去。此中人語% 云:「不足為外人道也。」 \end{CJK} \end{document} 就這麼簡單。只是編譯要改由 bg5latex 而不是原來的 latex 指令,這是為了避開我們 Big-5 碼的一些特殊碼的關係,還記得為何每行最後要加個百分號 % 嗎?這樣才不會插入 英文的字間空白。編譯好的例子如下: 40
48. 第 4 章 實際上排版玩看看 4.9. 加入中文 http://edt1023.sayya.org/tex/latex123/example10.tex http://edt1023.sayya.org/tex/latex123/example10.pdf 詳細的 CJK package 的使用中文說明,請參考 CJK package 所附的文件及〈我的 CJK〉 一文: http://edt1023.sayya.org/tex/mycjk/mycjk.html http://edt1023.sayya.org/tex/mycjk/mycjk.pdf 41
49. 第5章 空間與位置 前一章曾提到過,學會控制空間就學會排版了!Knuth 教授在他的 The TEXbook 一書中 也曾形容使用 TEX 排版的情形:一個版面就像一個含有膠水(glue)的頁面,然後每一個 要排版的內容就是各種不同的 box,在這些 box 還沒有固定正確位置時,都是可以移動的 (膠水還沒有乾),一旦排版完成,膠水就乾了,於是每個 box 的位置就固定無法再移動 了,除非又從頭再來。 一個字母、一個單字、一個句子、一個段落、一個符號、一個圖形、一個表格都可能構成 一個 TEX 的 box,甚至 box 中還有 box 的情形。這章想討論的,就是這個 box 如何安 置他們到正確的位置,讓每個 box 之間的空間都能達到恰到好處,所以,到底是在控制 boxes 的屬性、位置,還是調整 glue 的空間,就看各位怎麼去看待了(請注意,box 不一 定是可見的!在 TEX 裡頭,glue 是可以調整的。)。 我們前面所討論到的英文句點後空白的調整、italic correction、\linespread 及 \parindent 這些都是在調整 glue。通常,在 LATEX 系統裡頭,指定單位常常不會是絕對固定的,會視 情形做小限度的自動微調,這是版面空間配置上的需要。 5.1 LATEX 中使用的度量單位 要精確描述和調整 LATEX 中的空間及位置,我們必需要有個標準的度量單位。以下都是在 LATEX 常會用到的單位。這裡有絕對單位及相對單位之分,除非必要,不然,一般是建議 使用相對單位,原因是,他會隨著文稿字型大小改變時跟著做適當的調整。當然,在很講 求精確、固定大小的顯示時,就得使用絕對單位了。 這裡如果是閱覽 HTML 格式版本,請另參考 PDF 格式版本,以免表示上失真。以下表格 中所畫出來的長度僅供參考用。 42
50. 第 5 章 空間與位置 5.2. 版面大小 5.1.1 絕對單位 單位名稱 意義 pt bp pc mm cm in point, 1/72.27 inch Adobe big point, 1/72 inch pica, 12pt millimeter, 1/25.4 inch centimeter, 10mm inch, 25.4mm 長度 這裡要注意的是 TEX/LATEX 系統中所謂的點(point),指的是一般的 printer point,也 就是 1/72.27 inch,但在 Adobe 的規格中,例如 PostScript 語言中的所謂點,他是 big point,等於 1/72 inch(小數點的部份捨去了),會比一般的 print point 稍微大一點點。 5.1.2 相對單位 單位名稱 意義 em ex 約正在使用字型字母 M 的寬度 約正在使用字型字母 x 的高度 長度 在 TEX 裡頭所謂的 em,其實,精確而言是指在 Knuth 教授設計的 Computer Modern 字型裡頭的 em-dash 的寬度,由於字母 M 實際上是包在字型上所謂的 em-square 假想 方格中,而 em 所指的寬度是指這個 em-square 的寬度,但字母 M 本身並不全佔有這 個 em-square,因此這樣就會造成差異了。所以以字母 M 的寬度來說明的話容易有疑 義。LATEX 有個指令 \quad 這就是產生一個正確 em 的寬度的空白,所以在 Knuth 教授 的 The TEXbook 中,說明 em 就直接說他是一個 ‘quad’ 的寬度。 5.2 版面大小 我們對於所能控制的一整張紙的範圍都可以稱為版面。當然,我們的內文(body)並不是 佔滿整張紙的範圍,上下左右都會留有一定的空白。小時候在宣紙上練習寫毛筆,老一輩 的都會要我們留「天地」,這就是指內文四周的空白,除了視覺上的理由,大概也是人生 的哲理吧?:-) 在編輯上,也有人稱內文(body)的部份為「版心」或「版口」,四周的空白部份,則稱 為「版邊」。突破版心、版邊的設計,就稱之為「出血」,例如,以背景圖佈滿整張紙當 43
51. 第 5 章 空間與位置 5.2. 版面大小 做是背景的場合,以這個背景圖而言,就無所謂版邊了。但這在 LATEX 通常是不會有這種 情況出現,除非特意去指定內文和紙張大小同樣範圍。 當然,在內文以外的空白,也並非全是空白,他包含了頁足(footer),頁眉(header)及 邊註(marginal note)的部份,記載關於頁數、註解等資訊。 5.2.1 版面圖解 6 i i 2 4 ? i ? ? 5 6 6 ?Header 6 i 6 6 Body Margin Notes i 7 i-   10i- 9 i - 3   - i 8 i 11 ?  1i- 1 3 5 7 9 11 ? Footer 6 one inch + \hoffset \oddsidemargin = 62pt \headheight = 12pt \textheight = 550pt \marginparsep = 11pt \footskip = 30pt \hoffset = 0pt \paperwidth = 614pt 2 4 6 8 10 one inch + \voffset \topmargin = 16pt \headsep = 25pt \textwidth = 345pt \marginparwidth = 65pt \marginparpush = 5pt (not shown) \voffset = 0pt \paperheight = 794pt 這裡所謂的紙張大小,指的是 paperwidth 和 paperheight 所圍成的範圍,並非實際上手 44
52. 第 5 章 空間與位置 5.2. 版面大小 上拿到的紙張大小,實際在手上的紙張通常會略大於我們這裡的所謂紙張,所以,正式列 印時,還需做微調或截切才會是真正的這裡所謂的紙張大小(版面大小)。 這是 10pt 內文大小,如果不指定紙張的話,LATEX 預設會使用美式 letterpaper 的大 小,如要使用歐、日式的 a4paper 的話,要另行指定。我們可以稍微看一下 LATEX 預設 是如何安排版面空間的。其中 Header(頁眉)、Footer(頁足)及邊註的空間是不含括在 內文 Body 裡頭的,這裡是只是單面的圖,如果是雙面的話,那偶數頁和奇數頁的邊註是 要左右對換的,也就是說這個圖是奇數頁,偶數頁的話,邊註是在左邊。 這裡我們來看一下這些值所代表的意義: 指令(值) 意義 \paperwidth \paperheight \textwidth \textheight \headheight \headsep \footskip \topmargin \marginparwidth \marginparsep \marginparpush \oddsidemargin \hoffset \voffset 紙張的寬度 紙張的高度 內文(body)的寬度 內文(body)的高度 頁眉(header)長度 頁眉與內文間的距離 內文底至頁足底之距離 頁眉上方的空白 邊註的寬度 邊註與內文的距離 兩邊註間距 內文左邊的空白大小 微調版面在實際紙張的左右位置 微調版面在實際紙張的上下位置 \hoffset 及 \voffset 就是在調整版面在實際紙張上的正確位置,這樣印出來的時候才會 在實際紙張的中央。 頭昏了嗎?這很正常,因為 LATEX 的版面設定對初接觸的人來說,是惡名昭彰的困難、 麻煩,因此這裡不多談他的設定,剛開始實在沒有必要把時間花在這個地方。如果實際想 調整版面,建議使用 geometry package。舉個例子,想讓各邊緣是 2cm 就好,那只要在 preamble 區設定: \usepackage[margin=2cm]{geometry} 就可以了,如果以 12pt 大小的字,a4paper 紙張大小的設定的話,以中文而言,大約是 每行 40 個中文字,這是內文的寬度。可以視情形自行調整 margin 的值就行了。我們很希 望,下一版的 LATEX 能對這方面做改善,以方便使用者設定。 45
53. 第 5 章 空間與位置 5.3. 調整橫向空間 5.2.2 紙張大小 紙張 大小 紙張 大小 a4paper a5paper b5paper 21x29.7cm 14.8x21cm 17.6x25cm letterpaper legalpaper executivepaper 8.5x11in 8.5x14in 7.25x10.5in 至於如何指定紙張大小,這裡先簡單說明一下這篇文章的設定,談到 LATEX 的文稿類別時 會再詳細說明。 % 本文的設類別設定 \documentclass[12pt,a4paper]{report} 所以,這篇文章使用的是 a4paper,內文字型的大小是 12pt。方括號的參數是選項,可以 省略,如果省略的話,預設值就是 10pt/letterpaper。 5.3 調整橫向空間 這裡的橫向空間,例如 ~ 這單字間正常空白,及 \quad 這個 em 寬度空白,都是在調整橫 向的空白。但如果是要更大、或更小的空白時該如何調整呢?底下我們就來看看 LATEX 中 有什麼控制指令可以運用: 5.3.1 調整橫向空間的指令 指令 意義 \hspace{單位} \hfill \quad \qquad \thinspace \enspace \dotfill \hrulefill \centering \raggedright \raggedleft \centerline{} 向右空出某個度量單位的空白,如果是負數,則是向左 讓左右兩旁的文字往兩邊擴張至一個行寬為止 空出一個 em 單位的空白 空出二個 em 單位的空白 空出 1/12 個 em 單位的空白 空出 1/2 個 em 單位的空白 作用和 \hfill 相同,只是空白變成點 作用和 \hfill 相同,只是空白變成一橫線 此指令以後的文字將會居中排列,左右沿將不切齊 此指令以後的文字將會居左排列,右沿將不切齊 此指令以後的文字將會居右排列,左沿將不切齊 將大括號內的文字居中排列 46
54. 第 5 章 空間與位置 5.3. 調整橫向空間 一行的行首使用 \hspace{單位} 時將會失效,這時可以加個星號,例如 \hspace*{3em}。 在使用 \centerline{} 的場合,對於短文句很方便,因為他不會影響以下的文字,但他 也不會折行,甚至加入換行符號也無效。所以如果文句長度超過一行的行寬,他會超出邊 界,甚至就首尾的文字就看不到了。 其中 \thinspace 又可以使用簡化的 \, 來代替,主要是用在引號中又有引號的情形,通 常這種情形,兩引號之間要有個間隔,以便區分,例如: ‘‘\,‘Superman’, he said.’’ 表現出來會是: “ ‘Superman’, he said.” 這樣才能區分出不同引號,否則會變成一個連三個 grave accent 的引號。請注意,由於這 個指令是由非字母符號構成,所以,他的作用範圍在遇到符號本身後就結束了,後面不必 空白或以大括號來限制其作用範圍,就好像曾提到過的 \@ 一樣的情形。 5.3.2 調整橫向空間的環境 \begin{center}...\end{center} \begin{flushleft}...\end{flushleft} \begin{flushright}...\end{flushright} \begin{raggedright}...\end{raggedright} \begin{raggedleft}...\end{raggedleft} 讓這個環境內的內容置中 讓這個環境內的內容靠左 讓這個環境內的內容靠右 讓這個環境內的內容靠左,右沿將不切齊 讓這個環境內的內容靠右,左沿將不切齊 進入環境,和上一節提到的指令,兩者有什麼不同呢?最大的不同是,這可以方便的指定 一個範圍的文句讓他作用,而不會影響環境以外的文句。其次,進入環境,縱使和上下行 連在一起,沒有空出空白行,他也會自動的在上、下行空出個空白行出來,使用指令的話 則不會。 咦!這裡怎麼又有個 raggedright 及 raggedleft?原來他也是可以當環境來使用。由於 這兩個指令會使以下的內容的左、右沿不切齊,因此使用上要非常小心,除非本來就想讓 內文的左、右沿不切齊,否則,最好是使用有範圍限制的方式。當然,如果這兩個指令是 用在某個其他環境範圍內,他的作用也將僅限於這個環境內,不會影響這個環境外的文 句。 47
55. 第 5 章 空間與位置 5.3. 調整橫向空間 5.3.3 引文環境 引文通常就是引用他人的文句,在引文的段落,兩旁都會出現內縮的情形,以便和正文 相區隔,這也是一種空間的配置,可增加文章的易讀性。在 LATEX 裡頭有三種引文環 境:quote, quotation, verse。這三者看起來很像,但有些微的差異。 環境 適用時機 特性 quote quotation verse 較短的短引文 多個段落的長引文 詩歌、詞引文 每個段落第一行不內縮 每個段落第一行會內縮 每個段落的第一行不內縮,但第二行起會內縮 在 verse 的情形,通常會使用 \\ 來換行以便控制每一行的寬度。而且段落間距將不受外 在設定的影響,其中 quote 和 verse 環境會預插入適當的段落間距,而 quotation 環境 則不會。 底下我們來看看調整橫向空間的一個綜合實例: % example11.tex \documentclass{article} \usepackage{CJK} \begin{document} \begin{CJK}{Bg5}{hwmm} \section{hspace} \hspace*{2em}這是一個橫向空間調整的測試。\\ 這是一個\hspace{2em}橫向空間調整的測試。\\ 這是一個 \hspace{2em} 橫向空間調整的測試。 \section{hfill} 這是一個\hfill{}橫向空間調整的測試。 \section{quad} 這是一個\quad{}橫向空間調整的測試。\\ 這是一個 \quad{} 橫向空間調整的測試。\\ 這是一個\qquad{}橫向空間調整的測試。 \section{dotfill} 這是一個\dotfill{}橫向空間調整的測試。\\ 這是一個 \dotfill{} 橫向空間調整的測試。 \section{hrulefill} 這是一個\hrulefill{}橫向空間調整的測試。 \section{center} \begin{center} 這是一個橫向空間調整的測試。 \end{center} \section{flushleft} \begin{flushleft} 這是一個橫向空間調整的測試。 \end{flushleft} \section{flushright} 48
56. 第 5 章 空間與位置 5.3. 調整橫向空間 \begin{flushright} 這是一個橫向空間調整的測試。 \end{flushright} \section{quote} 這是節錄自伊索寓言的節錄故事: \begin{quote} An antwent 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. \end{quote} \section{quotation} 這是節錄自伊索寓言的節錄故事: \begin{quotation} An antwent 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. \end{quotation} \section{verse} 這是節錄自伊索寓言的節錄故事,這是節錄自伊索寓言的節錄故事,% 這是節錄自伊索寓言的節錄故事,這是節錄自伊索寓言的節錄故事: \begin{verse} An antwent 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. \end{verse} \section{centering} \centering 這是一個橫向空間調整的測試。\\ % 這裡要換行,否則會是 \raggedright 的作用 \raggedright \section{centerline} \centerline{這是一個橫向空間調整的測試。} \section{raggedright} \raggedright 這是一個橫向空間調整的測試。 \section{raggedleft} \raggedleft 49
57. 第 5 章 空間與位置 5.4. 調整縱向空間 這是一個橫向空間調整的測試。 \end{CJK} \end{document} 編譯好的結果如下: http://edt1023.sayya.org/tex/latex123/example11.tex http://edt1023.sayya.org/tex/latex123/example11.pdf 要注意是指令前後的空白,像 \hspace, \dotfill, \hrulell 這類指令,指令前後空白都 會算進去的。\quad, \qquad 這類指令,則後面的空白也是會算入的。另外,由例子中可 以看出來,一個 em 的寬度,大約是一個中文字的寬度,所以,我們預設使用 10pt 的字, 這個 em 寬度就相當於 10pt 的寬度,所以,我們在第一行插入了 2em 寬度的空白,也就 好像是內縮了兩個中文字一樣。 5.4 調整縱向空間 \vspace{單位} \bigskip \medskip \smallskip \vfill \parskip單位= 向下空出某個單位的空白(行),負數則是向上 產生 12pt(11–12pt)的垂直空白(行) 產生 6pt(5–7pt)的垂直空白(行) 產生 3pt(2–4pt)的垂直空白(行) 和 \hfill 類似,作用是將某段落向上頂,或往下擠 調整全文每個段落間的距離為某個單位 其中的 \bigskip, \medskip, \smallskip 並非固定的,他們會視上下文脈絡的需要自動 做微調,以達到一整頁較一致的空間配置。\vspace 如果是出現在一頁的第一行或最後一 行時,將會失去作用,這時可以加個星號,\vspace*{單位}。 為了維持版面的一致性,使用縱向空間調整的指令時要特別留意,例如章節標題上下的空 間、各段落間的空間,進入環境前後所空出的空間,這都有一個固定值,LATEX 會自動去 調整,不必由使用者自行動手,除非是封面這種單獨頁。所以,使用縱向空間調整指令 時,要非常注意整體的一致性,這也是排版上的一個很重要的原則。 這裡舉這篇文章的內頁封面為例來綜合說明,橫、縱向空間的運用。還記得第 4.3 節的 title page 的指令嗎?其實我們也可以自行設計一個獨立的內頁封面,使用的是 LATEX 本 身的 titlepage 環境。這裡的圖檔引用是我們還沒有學習到的,沒關係,只要大原則抓住 就行了。 % example12.tex 50
58. 第 5 章 空間與位置 5.4. 調整縱向空間 \documentclass[12pt,a4paper]{report} \usepackage{CJK} % 引入所需要的 packages \usepackage{graphicx} \begin{document} \begin{CJK}{Bg5}{hwmm} \begin{titlepage} % 使用 titlepage 環境 \vspace*{5ex} \begin{flushright} % 大標題靠右 \Huge\textbf{大家來學 \LaTeX} \end{flushright} \rule{\textwidth}{.256ex} \begin{flushleft} % 版本號碼及日期靠左,和大標題之間以一橫線隔開 Version 0.1 draft\\ \today \end{flushleft} % 圖檔位於中央偏左 \vspace{8ex} % 空出 8ex 的垂直空間 \hspace{2em}\includegraphics[scale=.75]{cover2.1} % 引入圖檔,並將這個 \vspace{8ex} % 圖檔橫向右移 2em \begin{flushright} % 作者資訊靠右 By Edward G.J. Lee 李果正\\ Email:\texttt{edt1023@info.sayya.org} \end{flushright} \end{titlepage} \end{CJK} \end{document} 由於配合版面的問題,其中有一些數據有更動,而且也省略了一些我們還沒有學習到的 packages,但大結構則和原始文稿一樣。所以,和這篇文章的 PDF 格式比較會發現,大 標題的字體小了一點,而且沒有顏色,也沒有超連結。 使用 titlepage 環境後,在 report/book 文稿他會自成一沒有頁數的單獨頁,在 article 類別,因為會和內文連接,所以,在選項的部份要多加一個 titlepage 的選項。另外, 在 titlepage 裡頭就不能再使用 \title, \author 指令了,在本文的地方也不必再下 \maketitle 指令。 編譯好的例子如下: http://edt1023.sayya.org/tex/latex123/example12.tex http://edt1023.sayya.org/tex/latex123/example12.pdf 這裡要特別說明的是,引入圖檔要使用 graphicx package(這是最常用的,也有其他的方 法來引用),引入的指令是 \includegraphics,這個我們會在第 9 章會討論,在這裡我 們把圖檔縮小成為原圖的 75%,否則整個封面會超出一頁。這個圖檔是由 METAPOST 檔 案所編譯而來的,他是一種 eps 圖檔(簡單的說,是含有邊界數據去除不必要周圍空白的 51
59. 第 5 章 空間與位置 5.5. 條列環境 ps 檔,方便引入或輸出至文稿中),編譯的方法如下: mpost cover2.mp 這樣就會產生 cover2.1 這個 eps 圖檔,這樣就可以直接引入了。他的原始碼及 eps 圖檔 在: http://edt1023.sayya.org/tex/latex123/cover2.mp http://edt1023.sayya.org/tex/latex123/cover2.1 5.5 條列環境 條列環境也是屬於一種空間的控制,他把一些文字按一定的方式來排列,條列環境中一些 起頭的符號、文數字或字串,我們稱之為項目標籤(item label),利用這些不一樣的排 列位置及不一樣的項目標籤起頭來敘述文句,就可以達到醒目的作用。這是以章節分隔以 外,相當常用讓內容一目了然的方法,建議多多利用。請千萬記得,環境中還可以有環 境,而且以下三種的條列方式可以混合交叉使用。 5.5.1 項目式條列環境(itemize) 這是以符號來起頭醒目的一種條列方式。例如: \begin{itemize} \item 第一大項,這裡是第一大項。 \item 第二大項,這裡是第二大項。 \begin{itemize} \item 第一小項,這裡是第一小項。 \item 第二小項,這裡是第二小項。 \end{itemize} \item 第三大項,這裡是第三大項。 \item 第四大項,這裡是第四大項。 \end{itemize} 排版出來會變成: • 第一大項,這裡是第一大項。 • 第二大項,這裡是第二大項。 – 第一小項,這裡是第一小項。 – 第二小項,這裡是第二小項。 • 第三大項,這裡是第三大項。 • 第四大項,這裡是第四大項。 52
60. 第 5 章 空間與位置 5.5. 條列環境 5.5.2 列舉式條列環境(enumerate) 這是以數目字或字母或羅馬數字來起頭醒目的條列方式。同樣的例子,改成 enumerate 的 話,會排版成: 1. 第一大項,這裡是第一大項。 2. 第二大項,這裡是第二大項。 (a) 第一小項,這裡是第一小項。 (b) 第二小項,這裡是第二小項。 3. 第三大項,這裡是第三大項。 4. 第四大項,這裡是第四大項。 5.5.3 敘述式條列環境(description) 這是以一個簡短文字敘述來起頭醒目的條列方式。再把他改成 description 的話,他是以 粗體文字來起頭醒目的,這些文字要用方括號括住。 \begin{description} \item[第一大項] 這裡是第一大項。 \item[第二大項] 這裡是第二大項。 \begin{description} \item[第一小項] 這裡是第一小項。 \item[第二小項] 這裡是第二小項。 \end{description} \item[第三大項] 這裡是第三大項。 \item[第四大項] 這裡是第四大項。 \end{description} 排版出來的結果是: 第一大項 這裡是第一大項。 第二大項 這裡是第二大項。 第一小項 這裡是第一小項。 第二小項 這裡是第二小項。 第三大項 這裡是第三大項。 第四大項 這裡是第四大項。 要注意的是,不管哪一種的條列環境,每個項目(item)的文字敘述會自動折行,這相當 方便,使用者只要把條列的結構弄妥,專心打每個項目的內容就成了。而且,如果使用方 括號括住一些字元、字串或符號,那帶頭的標示將會是這些字元、字串或符號,如果是列 舉式的條列方式,那麼有方括號的將不被編號,會自動跳過,編號順序則會自動順延。 53
61. 第 5 章 空間與位置 5.6. 線框 5.6 線框 線框在排版上佔有一定的地位,因為他可以區隔不同的空間,也可以讓某些部份突顯出 來。但是,過多的線框也是會有喧賓奪主的不好副作用,使用上可能要適可而止。這裡我 們要談的是單純的線框,表格也是線框的一種應用,我們將會在第 9 章,再來談表格的處 理。 5.6.1 直線(rule) 直線也是屬於方框的一種,就是一個實體長方形,只不過,他的高或寬(線的組細)只有 一點點,所以,看起來就一像直線罷了。 \rule[上下位置(單位)]{寬}{高} 寬及高應不必多做解釋,那個上下位置是什麼呢?這個上下位置是和基線(baseline)在 比較的,如果沒有指定,那就是在基線的位置,如果有指定,就依正負值調整和基線的相 對位置,正值由基線向上調整,負值則由基線向下調整。這裡來看個個實例就瞭解了: % example13.tex \documentclass{article} \parskip=3pt \parindent=0pt \begin{document} This is a line. % 畫高 1pt 寬 3cm 的橫線。 \rule{3cm}{1pt} \rule[1ex]{3cm}{1pt} \rule[-1ex]{3cm}{1pt} \rule{1pt}{3cm} % 畫高 3cm 寬 1pt 的直線。 \rule{3cm}{0pt}TEST. % 把 TEST 向右推 3cm。 \rule{2cm}{3cm} % 畫高 3cm 寬 2cm 的實體方框。 \textcolor{blue}{This is color lines.} \textcolor{red}{\rule{3cm}{1pt}} % 有顏色的線框。 \textcolor{green}{\rule[1ex]{3cm}{1pt}} \textcolor{blue}{\rule[-1ex]{3cm}{1pt}} \end{document} 編譯好的例子在: 54
62. 第 5 章 空間與位置 5.6. 線框 http://edt1023.sayya.org/tex/latex123/example13.tex http://edt1023.sayya.org/tex/latex123/example13.pdf 由例子中可以看得出來,這個畫線指令並不是單單縱、橫畫線而已,靈活運用的話,可以 做出許多不同的效果,例如方條圖之類的。 5.6.2 文字底線(underline) 有時候我們希望在書寫文字的同時,也在其下畫線。LATEX 有現成的指令可以使用,那就 是 \underline{文字},會在文字底線的部份同時畫上線條。當然,使用上常常會和現在 的橫線搞混,因此使用時要特別留意整個頁面上是否已經存在了許多橫線。 5.6.3 方框(box) 這裡主要指的文字方框,繪圖上的一般框形在第 9 章時再來討論。這一章的開頭就已談 到,整篇文章是由一個個的 box 所構成的,這裡的方框則是一個典型的 box,他的地位, 當然是和前面所說的 box 一樣,TEX/LATEX 會把他視為一個單一的字母來處理。 我們先來看看最簡單的方框的指令: 指令 意義及作用 \frame{文字} \fbox{文字} \mbox{文字} 將文字內容以可見的方框框住,方框和文字間沒有間距 將文字內容以可見的方框框住,方框和文字間有一定間距 作用和 \fbox 同,但方框不可見 以上的指令都可以形成方框文字。 方框也有可以調整的指令: 指令 意義及作用 \framebox[寬度][對齊方式]{文字} \makebox[寬度][對齊方式]{文字} 與 \fbox 同,但可指定寬度及對齊方式 與 \mbox 同,但可指定寬度及對齊方式 這裡的寬度指的是方框的寬度,不指定的話,作用就如同 \fbox 及 \mbox 一樣,以包住 整個文字範圍為寬度,由於我們不容易測知文字內容的寬度有多少,因此寬度的指定可以 使用下列相對單位的方式: 55
63. 第 5 章 空間與位置 5.6. 線框 寬度 作用 \width \height \depth \totalheight 這個寬度就是 \fbox 圍住時的方框寬度 這是正常基線至框頂的高度 這是正常基線至框底的高度 這是 \height 和 \depth 之總和 例如,我們指定 2\width 他的意思就是以 \fbox 包住此文字內容時,其方框寬度的二倍 寬。參數裡頭的對齊方式,可有下列幾種: 對齊方式 作用 c l r s center,文字位於方框中央,這是預設值 flushleft,文字位於方框左方 ushright,文字位於方框右方 stretch,文字平均分分布於方框中 不指定的話,當然就是位於方框中央位置了。我們也可以指定可見方框的線的粗細,及方 框和文字間的間隔距離: 指令 作用 \fboxrule=單位 \fboxsep=單位 指定方框線條粗細 指定文字和框緣的間距 請注意,這不會影響 \frame{}。如果想特別的置放方框的位置,也可以使用 \raisebox 指令: \raisebox{上下位置(單位)}[深度][高度]{文字內容} 這裡的上下位置的意義和 \rule 指令裡頭的一樣,只不過,這裡的上下位置一定要指定, 沒有預設值,不指定會編譯錯誤。請千萬記得,方框中當然是還可以有方框的。我們現在 就來看一個綜合的實例: % example14.tex \documentclass{article} \parskip=3ex \parindent=0pt \begin{document} \frame{This is frame.} \mbox{This is mbox.} \fbox{This is fbox.} \framebox{This is a framebox with no argumant.} \framebox[1.5\width]{This is a framebox.} \framebox[1.5\width][l]{This is a framebox with \texttt{l}.} 56
64. 第 5 章 空間與位置 5.6. 線框 \framebox[1.5\width][r]{This is a framebox with \texttt{r}.} \framebox[1.5\width][s]{This is a framebox with \texttt{s}.} This is baseline. \raisebox{3ex}[5\height]{This is a raisebox which lift 3ex.} This is baseline. \fbox{\raisebox{-3ex}[5\height]{This is a raisebox which lift $-$3ex.}} \fboxrule=1.5pt \fboxsep=8pt \framebox[1.5\width][s]{This is a framebox with \texttt{s}.} \end{document} 這應無需多加解釋,編譯好的例子在: http://edt1023.sayya.org/tex/latex123/example14.tex http://edt1023.sayya.org/tex/latex123/example14.pdf 5.6.4 段落方框 另外,也有用於段落文字的方框,可以控制某個段落出現在某特定的空間、位置。我們常 常把這種安排稱為迷你版面,把版面內容置於一個不可見的方框當中,當然,這個方框和 一般的 box,例如字母,仍然處於同樣的地位,LATEX 會把他當成一個字母單位來處理。 \parbox[對齊方式][高度][內文位置]{寬度}{文字內容} \begin{minipage}[對齊方式][高度][內文位置]{寬度} 段落內容 \end{minipage} 這裡的第一個選擇性參數「對齊方式」: t b c top,段落方框的上沿對齊一行的基線 bottom,段落方框的下沿對齊一行的基線 center,段落方框的中央對齊一行的基線,這是預設 \parbox 指令通常用於較短的文字內容,如果是較長的段落,那使用 minipage 環境會比 較方便。這些段落方框和上面所談到的一些方框最大的不同是,段落方框本就是用來排版 小段落文句,因此他會和一般正常文章段落一樣的處理,例如他會自動斷行,碰到空白行 也會起新段落,但各段落預設是不縮排的,而且,在安排上會比一般的段落緊湊,一些邊 緣的間距會縮減成 0pt。 57
65. 第 5 章 空間與位置 5.6. 線框 高度不去指定的話,那就是以整個版面經斷行處理後,整個文字段落所形成的高度。至於 內文位置指的也是 t, b, c 這些,意思是文字段落在方框內的上下位置,當然,這要有指 定方框高度時才會有意義,因此,「內文位置」和「高度」是要同時指定的,要非常注意 的是,如果指定了高度,但沒有指定內文位置,則預設是等於前面使用的「對齊方式」所 指定的參數。 這些參數的使用會有些煩複,但這是彈性所帶來的「必要之惡」,不必去死記,只有在第 一次接觸時把他搞清楚就夠了,實際要用到時再來查他的詳細參數,常用的指令、環境, 大概多查幾次就自然而然的記起來了。 58
66. 第6章 LATEX 的標準文稿類別 這章主要是在說明 LATEX 文稿的類別(document class)1 ,這是 LATEX 規範文稿整體結構 的方法。使用 class 的用意,就是把版面結構處理和實際文稿分開,這樣的最大好處就是 維持整篇文章排版結構上的一致性,也使文稿內容更清爽簡潔,使用者只要專心於文稿內 容的寫作即可,如果 class 定義的好,也可以達到一文多變化又不變更文稿內容的目的, 只要把引用的 class 換成別的就可以了,其他的可以不必更動。 目前,LATEX 有五種標準類別用於一般文件,可用於一般的書信、雜誌、期刊、報告及論 文。但有些期刊、論文會要求一定的結構,這時得依需求另行訂定。因此,也有其他的類 別存在,標準類別並不是唯一的。甚至,也可以自行撰寫自己的文稿類別。當然,我們一 般使用是不需要這麼講究,這裡只介紹 LATEX 的標準類別。而且,如果有和他人交換文稿 的需求時,我們應該盡可能的使用流通性較廣泛的類別。 另外,也有一些是關於 LATEX 說明文件及 macro 寫作時要用到的類別,這些已超出本篇 文章的範圍。 6.1 LATEX 類別的宣告 LATEX 的類別,要在文稿的一開頭時就宣告(當然,其上有註解是沒有關係的),他的一 般格式如下: \documentclass[選擇性參數]{類別} 選擇性參數是可以省略的,但類別名稱則不能省,一定要指定一個類別。而且只能只有一 個類別。 1 這在舊的版本稱為 style,這兩個詞意義上差不多,這些都是 TEX 延伸出來的巨集定義,專門用來定義 文章的大結構,以便簡化使用上及文稿的內容。 59
67. 第 6 章 LATEX 的標準文稿類別 6.2. 類別的選擇性參數 6.2 類別的選擇性參數 選擇性參數可以選擇多個,各個選項是以逗點分開的。 1. 10pt, 11pt, 12pt 指定內文一般正常字的大小,預設是 10pt。其他點數沒有外來 package 的幫忙不能 指定。 2. a4paper, letterpaper, b5paper, executivepaper, legalpaper 指定紙張大小,預設是 letterpaper。 3. fleqn 使數學式靠左對齊,預設是居中對齊。 4. leqno 使數學式編號靠左,預設是靠右。 5. titlepage, notitlepage 決定 title page 是否獨佔一頁。預設 article 不獨佔一頁,但 report/book 則會獨 佔一頁,在這裡是可以指定來變更預設行為,例如 article 文稿,指定 titlepage 的話,那 title page 就會獨佔一頁。 6. onecolumn, twocolumn 文章單欄或兩欄式,預設是單欄,也就是不分欄。 7. twoside, oneside 是否區分奇偶數頁。預設 article/report 不區分,book 則會區分。一般的書籍, 在裝訂的部份,他的中央線稱為書脊,偶數頁會在打開書籍時的左方,而且其中內 容會偏向書脊的中央(此時是向右),反之,奇數頁會在右,內容一樣會偏左向書 脊,在 oneside 的情形則不做這樣的區分,不管奇偶頁都會在紙張的中央部位。 8. landscape 橫向列印或縱向列印,預設縱向(portait)。 9. draft 草稿式編譯,這時圖檔將不會被引入,可加快編譯的速度。不過,如果編譯是使用 向量字型的話,編譯速度應該是還算很快。但使用 draft 的一個好處是,過長的地 方會標示出來。 60
68. 第 6 章 LATEX 的標準文稿類別 6.3. 類別的種類 10. openright, openany 這是在控制,章的開始是否是奇數頁(right-hand page)。在 book 類別,預設章會 從奇數頁開始,report 類別則不會。article 類別沒有章,所以,對此一設定會忽 略。 6.3 類別的種類 這裡只列出一般文章使用的類別,其他特殊巨集或 LATEX 正式文件所使用的類別就不列出 了,一般使用,這些類別就足夠了。 類別 一般用途 特性 article report book letter slides minimal 一般短文 較長論文 書籍類 信件 幻燈片 測試及寫新類別 無章,連續頁方式的安排,無奇偶數頁的區分 章會起新頁,預設無奇偶數頁的區分 章會於奇數頁起新頁,預設有偶數頁的區分 英文信件格式 幾乎另用外來套件取代 這是最簡單的類別,只規定了內文的寬、高,正常字 當然,這些用途並不是固定不變的,得看使用者的安排,不想多花時間、精神的話,那就 依 LATEX 預設的格式去使用,至少就不會太離譜。其中 minimal class 是用來測試用的, 或者寫新的 class 用的,他完全沒有版面的安排,例如,沒有章節的結構,各種間距也沒 有定義,預設的字型是正常字,沒有其他的變化,幾乎所有的變化要自行去定義。 61
69. 第7章 巨集套件 LATEX 系統已經好久沒有更新,有些部份可能會跟不上實際的腳步,而且有些內定的巨集 定義,經過大家的使用,發覺並不是那麼的順手,尤其是功能的強化方面,因此這章談談 如何引用他人已經寫好的巨集,這很重要,盡量避免重複製造輪子,寫 TEX/LATEX macro 可說是很專業的工作,要避免破壞了整體的結構,所以先找看看有什麼巨集套件可以使 用。 7.1 一般套件的使用 我們曾在第 3.4.3 小節,頁 22,提到過簡單巨集的引用,事實上,有些巨集含有許多的參 數來做微調,但是每個巨集套件的參數都不會一樣,因此,使用套件之前要先看一看他所 附上的使用手冊。幾乎大部份的巨集套件都有使用手冊,如果是系統上就有的巨集,那麼 這些文件通常會放在: $TEXMF/doc $TEXMF\doc => Unix-like 系統 => DOS/Windows 系統 這些目錄底下,這些文件會有原始 TEX/LATEX 文稿,也有編譯好的 *.dvi 或 PostScript 檔可以閱覽,為求方便的話,可以將他們轉成 pdf 格式來閱覽,原因是可以以關鍵字來搜 尋全文,在查指令、環境時會比較方便。在 Unix-like 系統或 Windows 下的 cygwin 環境 的話,可以使用 texdoc 這個指令來閱覽,例如: texdoc amsguide texdoc -s ams => 閱覽 amsguide.dvi 這個檔的說明 => 查系統上所有含 ams 字樣的文件 62
70. 第 7 章 巨集套件 7.2. LATEX 官方文件中的標準巨集套件 7.2 LATEX 官方文件中的標準巨集套件 底下是 LATEX 官方文件中所附的標準巨集套件。雖然是標準巨集套件,但一般情形下,使 用這些 packages 的機會並不多,都是有特殊需要時才會引入。 7.2.1 alltt 這個巨集套件提供 alltt 環境,和 verbatim 環境的作用相同,只是 \,{,} 的作用和一 般文章中相同會被 LATEX 解讀。這有什麼用呢?這樣一來 LATEX 這個特殊標誌也可以使 用,也可以讓環境中的文字具有顏色,或做其他變化,當然,裡頭的文字預設仍然是使用 打字機字族的。 7.2.2 doc 這是用來寫 LATEX 文件的巨集套件,這在使用 ltxdoc 這個 class 的同時就會載入 doc package。由於這不是用於一般的文件使用場合,所以,這裡就不多談,有興趣的話可自行 參考他的文件說明。 7.2.3 exscale 由於原先的 Computer Modern font 中的數學延伸符號(cmex)只有 10pt 大小的字型 (cmex10),內文放大到 large 以上的字型時,例如放大到 Large 時,有些數學符號仍 然會維持一定的大小,這時可以使用這個套件,讓這些數學符號也跟著放大,例如積分符 號。exscale 只有字型縮放的定義,因此只要把這個套件在 preamble 區引用就可以了,無 需任何指令。 不過,這裡要說明一下,在 TEX/LATEX 裡字型放大,有時可能會造成表現失真的情形, 尤其是數學式子,為了顧及數學式子中各個字母間的空間安排,cmex10 的設計並不適合 拿來放大,可以把 cmr5 放大成 10pt 和真正的 cmr10 來比較就會知道表現出來會不一 樣,因此,如果考慮精確配合的問題,放大數學式子的字型時可能要考慮一下使用場合, 尤其目前採用向量字更是如此。請試試以下的例子,我們把 cmr5、cmr10 及 cmr12 同樣 放大到 30pt 來看看結果會不會一樣: % test-fonts.tex 63
71. 第 7 章 巨集套件 7.2. LATEX 官方文件中的標準巨集套件 \font\largecmr=cmr12 at 30pt \largecmr This is cmr12 at 30pt. \font\largecmr=cmr10 at 30pt \largecmr This is cmr10 at 30pt. \font\largecmr=cmr5 at 30pt \largecmr This is cmr5 at 30pt. \bye 請注意,這是 TEX 文稿,不是 LATEX 文稿,所以要使用 tex 或 pdftex 來編譯,他的結 果如下,大家可很清楚的看得出來,雖然同樣是向量字,但放大時的表現並不會一樣: http://edt1023.sayya.org/tex/latex123/test-fonts.tex http://edt1023.sayya.org/tex/latex123/test-fonts.pdf 根據 Knuth 教授當初設計 METAFONT,他的理念是一個同樣的字型在放大的時候,同一 個字,他的筆劃置放的相對位置應該要隨放大的倍數而稍加調整。因此,假如我們只使用 一種向量字型,用在不同的放大倍率的時候,文字符號間的空間配合會產生不一樣的結 果,尤其是用在數學式子的時候,更加明顯。 當然,實用上 METAFONT 雖然也是一種向量字型,但由於太過於複雜,不適合拿來螢幕 顯示上用,所以才會退而求其次,轉成 pk 點陣字型來使用。這也就是為什麼同樣是 cmr 的字型,會有幾種不同點數的獨立字型的原因,縱使是向量字也是如此。TEX 已經 20 幾 歲了,但是,我們的字型技術似乎還是沒有完全趕上當初 Knuth 教授的理念。 7.2.4 fontenc 在第 4.7.1 小節,頁 32,曾提到字型編碼的問題。要改變字型編碼,可以使用這個 fontenc package。以 T1 font encoding 來說: ... \usepackage[T1]{fontenc} ... 這樣就可以了,但由於一些字型,例如歐洲字元,在原來的 Computer modern Type1 字 型中安排不一樣,所以,有些部份會使用原始的 METAFONT 字型所轉換成的 pk 點陣 字,這樣的話,一般印表機印出來是差異不大,但如果是想製作成 PDF 格式在螢光幕閱 64
72. 第 7 章 巨集套件 7.2. LATEX 官方文件中的標準巨集套件 覽的話,字型的表現會變得很醜。理想的話,要安裝 cm-super Type1 字型,但是一般 使用者恐怕自行安裝字型會有困難。這在 teTEX 2.x 以後的版本,已經有附上 pxfonts 及 txfonts package 及其字型,所以,如果是新近版本的 teTEX 的話,可以由以下的方式來使 用: ... \usepackage{txfonts} \usepackage[T1]{fontenc} ... 其中 txfonts 是模擬 Times 系列的字型,pxfonts 是模擬 Palatino 系列的字型。當然,這 裡關於字型的問題有點複雜,這不在這篇文章的討論範圍,只能做簡單的說明,如果沒有 特殊需要,例如,歐洲字元、一些有重音符號的字母,那使用預設的 OT1 編碼就行了, 因為這些套件所附的有些字型,只有一種大小的 Type1 字型在縮放,因此使用上恐怕會有 失真的情形。 7.2.5 graphpap 這是產生方格紙的巨集。他提供了一個指令,可以畫方格,可以配合 picture 環境來使 用,他的語法是: ... \usepackage{graphpap} ... \graphpaper[n](x,y)(x1,y1) ... 其中的 n 如果省略的話,預設是 10,他指的是方格紙的最小刻度單位。(x,y) 及 (x1,y1) 指的是左下角及右上角的座標值,例如: \documentclass{article} \usepackage{graphpap} \begin{document} \graphpaper(0,0)(360,360) \end{document} 這樣會畫出以 10 為最小刻度的方格,編譯好的例子如下: http://edt1023.sayya.org/tex/latex123/test-graphpap.tex http://edt1023.sayya.org/tex/latex123/test-graphpap.pdf 65
73. 第 7 章 巨集套件 7.2. LATEX 官方文件中的標準巨集套件 7.2.6 ifthen TEX 本身是一種排版程式語言,當然會有條件判斷式來方便寫巨集,但如果文稿中也充滿 了條件判斷式,將會使文稿複雜化,難以閱讀、維護,因此,一般條件判斷式大多數使用 在巨集定義,而不是寫在文稿當中。這個 package 就是在簡化條件判斷式,以便也可以方 便使用在文稿當中。 ifthen package 提供了 \ifthenelse 指令來做條件判斷。他後面有三個參數,第一個是條 件式,第二個是條件為真的時候要執行的內容,第三個是條件為偽的時候要執行的內容。 這裡不多談他的使用,底下只提供一個實例片段: ... \usepackage{ifthen} ... \ifthenelse{\isodd{\thepage}}% {\setlength{\leftmargin}{10pt}}% {\setlength{\leftmargin}{0pt}} ... 這樣奇數頁時,leftmargin 會設為 10pt,偶數頁時則為 0pt。後面加 % 代表,這三行是 一整行,其間沒有空白。 7.2.7 inputenc 由於 fontenc package 的一些字型編碼安排,和一般所謂的 Latin-1 這些編碼(input encoding),他們的內容不一定相符,所以,fontenc package 常會和 inputenc package 互 相配合使用,以確保在使用歐洲字元、符號時能正確取得到字。例如: ... \usrpackage[T1]{fontenc} \usepackage[latin1]{inputenc} ... \inputencoding{ascii} % 也可以在文稿內文變換 ... \inputencoding{latin2} ... \inputencoding{latin1} ... 當然,我們的文稿如果只是英美語系的文章,那這些都可以不必理會。 66
74. 第 7 章 巨集套件 7.2. LATEX 官方文件中的標準巨集套件 7.2.8 latexsym 這是 LATEX 額外提供的符號。在新版的 LATEX 2ε 並不會自動載入,要自行引入這個獨 立出來的 package。這主要是提供 lasy* 這些字型裡頭的符號。如果有使用 amsfonts 或 amssymb package 的話,這些 latexsym 符號應該是可以無需引入(有少數符號是 LATEX 特 有的)。至於各種符號的 package 有哪些內容,可以參考系統上的 symbols* 這些檔案, 他可能存在的形式是: symbols.dvi symbols-a4.ps[pdf] symbols-letter.ps[pdf] 或者,也可以從 CTAN 下載最新的版本: ftp://cam.ctan.org/tex-archive/info/symbols/comprehensive/symbols-a4.pdf 7.2.9 makeidx 這是在製作索引時要引入的 package,我們會在第 11.3 節,頁 142 再來討論。 7.2.10 newlfont 這是模擬舊版 LATEX 的字型用法,讓他使用新的取字機制的 package。也就是我們在第 4.7.2,頁 34 所提到的用法。為免麻煩,我們盡量避免使用舊用法,而使用字型的標準指 令。 7.2.11 oldlfont 這是模擬舊版 LATEX 的字型用法的 package。 7.2.12 showidx 這個 package 會顯示,\index 指令下在什麼地方。這也會在第 11.3 節來討論。 67
75. 第 7 章 巨集套件 7.3. LATEX 官方文件中的工具組 7.2.13 syntonly syntonly package 提供 \syntaxonly 指令,他可以檢查語法是否正確,並不會有 *.dvi 檔 的輸出。但這個 \syntaxonly 指令一定要放在 preamble 區。 7.2.14 tracefnt 這是追蹤字型使用情形的 package。通常編譯時所產生的資訊已經很足夠,但如果希望有 更詳細的字型使用資訊的話,可以使用這個 package: ... \usepackage[debugshow]{tracefnt} ... 請注意,這樣會增加編譯的時間,而且 *.log 檔會很大。 7.3 LATEX 官方文件中的工具組 這些巨集套件,LATEX 官方文件是歸類在相關軟體(relative software)中,可能會比上一 節提到的標準巨集套件來得實用些。但也同時可以看得出來 LATEX 非內建的套件不少,加 上其他外來的巨集套件,那真的是套件滿天飛,我們很希望在可能的情形下 LATEX team 可以考慮將一些必要的套件納入內建,更加落實版面處理和文稿寫作分開的理念。 7.3.1 AMS-LATEX LATEX 本身就有排版數學式子的能力,但在比較專業使用時,可能會需要增強他的功 能,AMS-LATEX 是美國數學協會(American Mathematical Society, AMS)所發展的一個 增強 LATEX 數學式子編輯的巨集組,是由 AMS-TEX indexamstex@AMS-TEX 移植過來給 LATEX 使用的,他主要分成兩個部份:amscls 及 amsmath,前者提供符合 AMS 的文件規格的文稿類別,後者可加強原來 LATEX 的數學模 式。我們會在第 10 章,頁 125 加以介紹。 68
76. 第 7 章 巨集套件 7.3. LATEX 官方文件中的工具組 7.3.2 babel 如果想排版英文以外的其他歐洲國家的語文,例如:德文、法文,那可以利用 babel 巨集 套件。 7.3.3 cyrillic 這是專為排版斯拉夫民族語文,例如:俄文,那可以使用這個套件。 7.3.4 graphics 這是處理圖形要用到的巨集套件。但目前一般都使用功能較完善的 graphicx 巨集套件來 取代 graphics 了,事實上,引用 graphicx 會自動的引用 graphics,而在指令使用的方便性 上,graphicx 較佳,因此我們往後都是以 graphicx 為主來說明的。這兩個套件屬於 LATEX 的圖形工具組,這個工具組包括了和顏色、圖形相關的各種巨集,我們會在第 9 章,頁 93 來討論。 7.3.5 psnfss 這是 Type1 字型的巨集套件組,例如:times, charter, mathptmx 等等,他會去使用這些 Type1 字型。但通常這些字型有許多是商業字型,系統上不一定會有,如果沒有的話,會 去使用 free 的代替字型,或者就不嵌入這些字型了。如果沒有這些商業字型,又想要嵌 入替代的 Type1 字型的話,可以考慮使用 txfonts 或 pxfonts 巨集套件及其所附字型。當 然,如果專業使用的話,可能得考慮購買專業的商業字型來使用。 7.3.6 array 這是加強原來的 array, tabular 環境的巨集套件,可增許多細部微調的功能。這在第 8.4 節,頁 83,時會討論到。 69
77. 第 7 章 巨集套件 7.3. LATEX 官方文件中的工具組 7.3.7 calc 這個套件可以讓 LATEX 接受一些簡單的代數運算。主要用於微調一些原始預設的長度及計 數器(counter)。 7.3.8 dcolumn 這是讓表格中具有小數點的數字對齊的巨集套件。我們會在第 8.9 節,頁 88 中詳細討論。 7.3.9 delarray 這是加強 array 巨集套件的功能,讓矩陣或行列式的大分界符號可以使用較簡單的指令。 這個套件要配合 array 巨集套件來使用。通常在 array 巨集套件中,這些矩陣或行列式的大 分界符號是由 \left 及 \right 來引導才會出來,但使用 delarray 巨集則不必如此麻煩。 這在第 10 章會討論到。 7.3.10 hhline 這個巨集套件會方便在畫橫線時也可以插入表格的縱線。 7.3.11 longtable longtable 是用在跨頁表格。通常在 LATEX 中的 tabular 表格是當做一個 box 來處理,因 此無法再分割,所以無法跨頁來表現。這也會在第 8.10,頁 90 談到表格時提及。 7.3.12 tabularx 這是 tabular 表格環境的加強版,他可以方便的排版指定寬度的表格。同樣的,這會在第 8.3 節,頁 79 時提及。 70
78. 第 7 章 巨集套件 7.3. LATEX 官方文件中的工具組 7.3.13 afterpage 這個件主要在調整 LATEX 的浮動環境(floating environment)時,置放浮動物件,例如: 圖、表的位置。 7.3.14 bm bm 的意思,就是 bold math(symbol),這會讓數學式子以粗體的方式來顯示。這個巨集套 件,提供一個 \bm{} 指令,只要把數學式子置於大括號中就會由粗體來顯示。 7.3.15 enumerate 這是加強 enumerate 列舉式條列環境的巨集套件。他可以很方便的指定要使用什麼方式來 起頭,原始的 enumerate 環境,預設第一層是阿拉伯數目字,雖然也可變更,但要重新定 義,不是很方便。這裡舉個例子: % example15.tex \documentclass{article} \usepackage{enumerate} \begin{document} \begin{enumerate}[Example-1.] \item This is a item 1. \item This is a item 2. \begin{enumerate}[(1)] \item This is a item (1). \item This is a item (2). \end{enumerate} \item This is a item 3. \item This is a item 4. \end{enumerate} \end{document} 可以指定會順延顯示的有:A, a, I, i, 1,如果這些是屬於固定顯示的部份,則要以大 括號括起來,否則他會順序計算顯示。請試著和第 5.5.2 小節,頁 53 的標準 enumerate 環境比較一下。編譯後的結果如下: http://edt1023.sayya.org/tex/latex123/example15.tex http://edt1023.sayya.org/tex/latex123/example15.pdf 71
79. 第 7 章 巨集套件 7.3. LATEX 官方文件中的工具組 這裡請注意一下一些同名的環境、巨集套件,例如 array 巨集套件及 array 環境,這裡的 enumerate 巨集套件也是一樣。 7.3.16 fontsmpl 這是字型 sample 測試 package,他可以是互動的,也可以引用這個 package 後直接使用 \fontsample 這個指令來印出目前使用的字型 sample。 互動的話,要自行輸入字族名稱。sample 檔在 $TEXMF/tex/latex/tools 目錄下,只要 下: latex fontsmpl.tex 就可以了,他會出現: This is TeX, Version 3.14159 (Web2C 7.4.5) (./fontsmpl.tex LaTeX2e <2001/06/01> Babel <v3.7h> and hyphenation patterns for american, french, german, ngerman, nohyphenation, loaded. (/usr/share/texmf/tex/latex/base/article.cls Document Class: article 2001/04/21 v1.4e Standard LaTeX document class (/usr/share/texmf/tex/latex/base/size10.clo)) (./fontsmpl.sty) Please enter a family name (for example ‘cmr’). \family= 只要輸入要測試的字型字族,例如 cmr,他就會產生 fontsmpl.dvi 這個檔,然後就可以 使用 dvips 或 dvipdfm[x] 把他轉成 ps/pdf 格式的檔案。他只會測試 OT1 及 T1 兩種字 型編碼。 7.3.17 ftnright LATEX 在兩欄式排版(two-column mode)時,他的腳註是置放在各自欄位底部。ftnright 會將兩欄式排版時,把所有的腳註都置放在右欄底部。這樣可以將腳註集中,看起來不會 那麼凌亂。 72
80. 第 7 章 巨集套件 7.3. LATEX 官方文件中的工具組 7.3.18 indentfirst 通常,LATEX 的章節開頭的第一個段落是不縮排的,在第二個段落起才會縮排。如果習慣 每個段落都有縮排,可以使用 indentfirst package。這個套件也是引入就可以了,無需任何 指令。 7.3.19 layout 這是顯示目前版面配置的 package。引入這個 package 後,只要在本文區下 \layout 指 令,他就會畫出目前的版面配置,也會將各種數據顯示出來。我們在第 5.2.1 小節,頁 44,裡頭所顯示的版面圖,就是這樣畫出來的。 7.3.20 multicol 在 LATEX 宣告文稿類別的同時,我們可以選用 twocolumn 來選擇兩欄式的排版,再多則 不行。在兩欄式的排版時,我們可以使用 \onecolumn 及 \twocolumn 指令,在單欄及兩 欄間變換,但這有一個很嚴重的缺點,那就是欄位變換也會迫使換新頁,原來的頁面將會 顯得空曠。 multicol 的目的,不僅突破兩欄,可以做多欄式的排版(最多可至十欄的排版),也可以 在變換欄位編排時在同一頁面變換,而不必換新頁。他提供了 multicols 環境來做欄位的 變換。他的使用方法很簡單,欄位數目及變換完全由環境來控制: ... \usepackage{multicol} ... \begin{multicols}{欄數} ... 內容,依正常單欄方式書寫即可 ... \end{multicols} 請注意,引入時 multicol 是沒有 ‘s’ 的,而環境中的 multicols 是有 ‘s’ 的。multicol package 處理腳註的方式,和單欄排版相同,就是通通置於本頁底部,不分左右欄位。 73
81. 第 7 章 巨集套件 7.3. LATEX 官方文件中的工具組 7.3.21 rawfonts 這是模擬 LATEX 2.09 舊版的低階字型指令,例如 \texrm 代表 10pt 的羅馬字族的字。在 新版的 LATEX 2ε 並沒有定義這些指令。 7.3.22 somedefs 這是寫 LATEX 巨集的一些範例定義,可以很容易的更改其中設定來寫自己的 package。這 不在這篇文章的討論範圍,因此就不多談了。 7.3.23 showkeys 這個 package 會把 \label, \ref, \pageref 等交互參照的指令內容,或文獻引用內容, 在指令所在處印出來。 7.3.24 varioref 這是加強型的交互參照的方式,我們會在第 11 章來討論。 7.3.25 verbatim 這是加強 LATEX 原來的 verbatim 環境的同名套件。可以在裡頭使用註解,也可以利用 \verbatiminput{檔案名} 指令來引入外來檔案,當然,引入後會自動進入 verbatim 環 境中。 7.3.26 xr xr 是 eXternal References 的縮寫,意思就是交互參照外部的檔案。這會在第 11.2 節,頁 140 來討論。 74
82. 第 7 章 巨集套件 7.4. 巨集套件何處尋? 7.3.27 xspace 這個 package 會在一個巨集結束時聰明的插入適當的空白。我們在第 3.3.2,頁 16,時曾 談到 LATEX 指令的結束的問題,所以,我們得在指令後加 ‘\ ’ 或者 ‘{}’ 來結束一個指 令。但如果巨集定義時使用了 xspace 巨集套件的一個指令 \xspace,那麼他就會自動判斷 指令何時結束,而不必自行插入 ‘\ ’ 或 ‘{}’ 了。 7.3.28 theorem 這是 LATEX 內建的 theorem 環境的加強型巨集套件。我們會在第 10,頁 125,再來討 論。 7.4 巨集套件何處尋? 重複發明輪子要盡量避免,所以,如果需要些功能,而 LATEX 似乎沒有,那可以先找看看 是不是別人已經有寫好類似的功能的巨集套件,首先要找的應該是 FAQ 文件: http://www.tex.ac.uk/faq 在 news://tw.bbs.comp.tex 也有一篇 Chun-Chieh Huang 所維護的中文 FAQ 可以參 考。另外 news://comp.text.tex 則是英文討論群組,可以多多利用。如果已經知道套件 名或關鍵字,那可以到: http://tug.ctan.org/CTANfind.html 去搜尋,搜尋到後可以抓整個目錄的壓縮檔。通常,安裝 package,他裡頭會說明如何安 裝,萬一沒有的話,可以到 bbs/news 上發問,或者下載以下這個 sh script: http://edt1023.sayya.org/tex/latex123/ltxins.sh 他的使用方法很簡單,把他置於執行路徑可及之處: ltxins.sh your.dtx(or your.ins) 這樣就行了,他會產生必要的 *.sty 或 *.tex 及 pdf 格式的說明文件。這裡頭使用的是 dvipdfm[x],所以要有安裝這兩種工具才行。當然,他不會自動安裝,你還是要手動把一 些檔案拷貝到 LATEX 找得到的地方。這只是一個很簡單的工具,因此不保證能成功編譯出 文件出來。 75
83. 第 7 章 巨集套件 7.4. 巨集套件何處尋? 如果想知道某個套件在系統上是否已安裝,安裝在什麼地方,可使用以下的小工具: http://edt1023.sayya.org/tex/latex123/ltxpkg.sh 把他拷貝至路徑所及之處,使用方法如下: ltxpkg.sh package-name[.sty] 這會列出所查詢的套件是否已安裝,及安裝在什麼目錄下,及這個 package 是否有預先 載入其他的 package(s)。當然,這兩個小工具都是 bash script 寫的,你的系統要有安裝 bash,一般的 Unix-like 系統應該沒有問題,Mac OS X 及 Windows/cygwin 環境就不敢 保證了。這也是個很簡單的小工具,如果是由 \input 指令所載入的其他 .tex 檔,可能 就會偵測不出來了,許多特殊細節也是沒有去考慮到,因此實際上要以 package 的原始 macro 內容為準。以下為一個使用實例: edt1023:~$ ltxpkg.sh colortbl The position of this package is at: /usr/share/texmf/tex/latex/carlisle/colortbl.sty The preloaded package(s) of ‘colortbl.sty’ is(are): array,color 所以,得知 colortbl package,系統上已經安裝,而且他會在引入的同時也引入 array 及 color 這兩個 packages,除非要變更這兩個 package 引入時的選項參數,不然就可以不必引 入這兩個 packages 了。 76
84. 第8章 表格的處理 這是屬於一般人覺得比較困難,但卻是很重要的部份,讓我們多花點時間研究。LATEX 的 表格,因為是抽象邏輯的思考方式來製作表格,對一般使用者而言,比較不容易轉換成直 觀印象。當然,有些編輯器,例如 GNU Emacs,有方便畫 LATEX 表格的編輯器 script, 但這些我們先不去理他,先從 LATEX 本身表格的結構理解起,這樣在使用其他的輔助工具 時也會比較得心應手,甚至沒有其他工具,只要把握住表格的大結構,製作表格就不會摸 不著頭緒了。 由於 LATEX 內建的表格功能算有點陽春,因此這一章會介紹一些外來的巨集套件,來彌補 LATEX 表格功能的不足,這些巨集,使用上算相當普遍,幾乎所有的 TEX 的各種發行版本 都會附上,因此不必擔心可攜性的問題。 8.1 表格的種類 表格的使用,在文章上常常是必備的要件,他有歸納及醒目的作用,當然,表格太多也是 會喧賓奪主。通常,我們中文的使用習慣,表格就是大方框內有小方框,文字置於小方框 內,甚至某些小方框內還有斜線在分隔。為了排版上的方便及視覺表現上的美觀、清楚, 在國際上大部份較正式的論文已不使用縱線、斜線,表格通常由橫線來做區隔,甚至完全 沒有線條,使用空間區隔的方式。這種趨勢幾乎在二十幾年前就已開始普遍,只是國內的 文件似乎還是很喜歡有縱、斜線在表格之中,好像沒有一些框線層層包住就不像表格。如 非特殊的表現上的需求,我們應該朝簡化表格本身的方向走,將重點置於表格的內容及表 格的邏輯結構安排,漂漂亮亮的表格外觀加上不當的內容配置,個人覺得這是個失敗的表 格製作。 另外,等粗的雙線條,可能也是得盡量避免,通常粗細不等的外框雙線條有裝飾的作用, 因此,如果文件是較正式的論文,那就可能要避免,如果是海報、DM 或要讓人們填寫的 77
85. 第 8 章 表格的處理 8.2. TABBING 環境 表格之類的,那又是另外一回事,這時封閉性的方框可能會有需要。這些規範只不過是一 些慣例,並非一成不變的,得視文件的性質及使用場合來做變化,一個大原則是,如果是 以文字敘述為主的文件,那麼,表格本身如果比文字內容搶眼太多的話,或許就要考慮簡 化表格本身了。 我們這裡就來比較,有縱線、無縱線、完全沒有線框及含雙線表格的各種形式的表格,大 家就自由心證,看哪一種表格看起來比較順眼。由於 HTML 格式在表格的表現上可能會 失真,因此這裡製作成 PDF 格式供參考: http://edt1023.sayya.org/tex/latex123/test-tables.tex http://edt1023.sayya.org/tex/latex123/test-tables.pdf 8.2 tabbing 環境 這是 LATEX 裡頭最基本的表格形式,除非自行另外定義、繪製,他並沒有方便可用的線 條指令來區隔,完全使用空間、位置的配置來顯示表格內容,這時整個 tabbing 表格在 LATEX 的地位並不是一個最小單位的 box,LATEX 不會把整個表格當成一個單位來處理。 所以,tabbing 表格是可以跨頁的,他可以被分成兩半來處理。因此,要和其他文字、 圖表並排排版時,得另外放進一個 box 中,讓他自成一個 box 單位,例如 \parbox 或 minipage 環境裡頭。 在 tabbing 環境中,第一個列(row)是以 \= 來標示 Tab 寬度來區隔欄位(column), 這個寬度是由欄位裡頭的字串寬度所決定的。後續的每個欄位是由 \> 這個符號來區隔, 每列尾要自行加上 \\ 來換行,最後一行可以不必使用 \\ 換行。tabbing 的基本大結構 是: \begin{tabbing} column1 \= column2 \= column3 \\ item1 \> item2 \> item3 \\ itemA \> itemB \> itemC \end{tabbing} 這裡特意把他排列整齊(事實上,不排整齊 LATEX 也會幫忙排好),這樣才能看得出來他 的表格結構。那如果想調整欄位寬度時可以使用 template 的方式,例如: \begin{tabbing} xxxxxxxxxx\=xxxxxxxxxx\=xxxxxxxxxx \kill column1 \> column2 \> column3 \\ item1 \> item2 \> item3 \\ itemA \> itemB \> itemC 78
86. 第 8 章 表格的處理 8.3. TABULAR 環境 \end{tabbing} 這裡以 10 個 x 為欄位的寬度,這裡的 \kill 表示這一行是不印出來的,只是在表示各個 欄位的樣本寬度,而且他會自動換行。當然,要使用其他的字串也是可以,例如以表格中 最長字串來取代整個 x 字串,這樣就會讓欄位寬度剛好都可以容納其他欄內內容。也可以 使用 \hspace{6em} 或其他的長度指令,來指定欄位的寬度。 對於欄位內文字的控制,tabbing 較不完備,雖然 LATEX 有提供 \’ 讓這個符號之前的文 字靠左,及 \‘ 讓這個符號之後的文字靠右,但實際運用,可能不是使用者想要的結果, 因此 LATEX 的表格,主要還是以 tabular 環境較為常用。但 tabbing 環境的好處是,他 不見得一定要用於表格的排版,例如他也可以表現如條列環境般的另一種表現方式,而且 他可以跨頁排版。 8.3 tabular 環境 這大概是最常使用的表格形式,可以很方便的畫線框。這種表格,LATEX 是把整個表格當 成一個單位來處理,就像字母一樣,因此他在版面的安排上是和一般的字母一般的處理, 所以,這種表格不經特殊處理,無法被分割成兩個部份來跨頁。 和 tabbing 環境的不同,除了可以有線條之外(tabular 環境,當然也是可以完全沒有線 條),分隔欄位的符號是 &,而且,一定要指定欄內文字的置放位置,欄內文字超出指定 的寬度時,會自動折行,還有許多其他更細節的調整。 8.3.1 tabular 表格的基本結構 \begin{tabular}[t]{lll} \hline column1 & column2 & column3 \\ \hline item1 & item2 & item3 \\ itemA & itemB & itemC \\ \hline \end{tabular} 其中 [t] 表示 top,也可以是 b 表示 bottom,或 c 代表 center,這要在前後有文字相並 排的時候才會顯現作用,因為 LATEX 會把整個 tabular 表格當成一個字母單位,所以可以 和其他文字、圖表並排排版。這些參數的意思是和同行文字的對齊方式,top 是表格頂端 79
87. 第 8 章 表格的處理 8.3. TABULAR 環境 和前後文字對齊,bottom 則是表格底部和前後文字對齊,center 則是和表格中央對齊。 換 行 的 方 式 和 tabbing 環 境 一 樣 , 其 中 的 \hline 是 畫 一 條 橫 線 的 意 思 , 連 續 兩 個 \hline\hline 會畫雙橫線,他本身會自動換行,因此不必加上換行符號。其中 \begin{tabular}{lll} 的 lll 是在指定各欄位內容在小方框內的置放位置,l 表示靠左 (left),r 表示靠右(right),c 表示置中(center)。在 {lll} 中加上 bar( )會畫 縱線,例如 { l l l } 這樣就會變成傳統的大方框、小方框的表格。而兩個 bar 就會畫雙 縱線。 tabular 環境內尚可使用另一個 tabular 環境來製作更複雜的表格,這在 tabbing 環境 是不被允許的。 8.3.2 tabular 環境對欄位的調整 1. p{寬度} 這裡的 p 指的是段落(paragraph)。通常用於一個小段落的文字,指定了寬度後裡 頭的文字會自動折行,而且這個段落的頂端會和其他欄位的頂端對齊。 2. @{文字、符號或指令} 這可以作用在本欄的各個列,讓他們都出現某個文字、符號或都在某個指令的作用 下。這個指令另外會同時將欄位間距縮成 0,置於首尾的話,會有讓橫線和文字切齊 的作用(預設不會切齊,橫線兩端會多出欄位間距的部份)。 3. \multicolumn{欄位數}{左右位置}{文字內容} 跨欄排版,例如一小段文字跨兩欄。左右位置可使用 lrc 之一。 4. \cline{a-b} 畫某部份欄位的橫線,其中的 a-b 指的就是要畫線的欄位數,例如 \cline{2-3} 就 是畫第二欄至第三欄的橫線。 5. \arrayrulewidth=單位長度 調整表格線條的粗細,預設值是 0.4pt。使用方法:\arrayrulewidth=1.5pt 即可, 但要注意的是要在進入 tabular 環境之前設定好。 6. \tabcolsep=單位長度 調整兩欄位的左右間距。請注意,這個值是實際兩欄位間距值的一半,預設是 6pt。 使用方法和 \arrayrulewidth 一樣。 80
88. 第 8 章 表格的處理 8.3. TABULAR 環境 7. \doublerulesep=單位長度 調整畫雙線時,這兩線間的間距,預設值是 2pt。使用方法和 \arrayrulewidth 一 樣。 8. \arraystretch 調整表格的上下行距。請注意,這要由 \renewcommand 來重設,因為在 LATEX 定義 出的一個常數值,而這個 \arraystretch 只是這些常數值的倍數,我們要重新改變 他才能改變預設倍數。例如:example16.tex 中的使用方法。 在 tabular 環境的參數中,可能是取代原來的參數,例如 p{}。也可能是置放在原參數的 前後,如 @{},這看一下實際例子就可以瞭解: % example16.tex \documentclass{article} \usepackage{textcomp} % for \textcelsius \renewcommand{\arraystretch}{1.2} % 將表格行間距加大為原來的 1.2 倍 \arrayrulewidth=1pt % 調整線條粗細為 1pt \tabcolsep=12pt % 調整欄間距為 24pt \begin{document} \centering \section*{SPECIFIC HEATS (20 \textcelsius\ AND 1 ATM)} \begin{tabular}{@{\sf }lll@{}} % 第一欄位使用 sans serif 字族 \hline & \multicolumn{2}{c}{\bf Specific Heats} \\ % 跨二三欄排版,文字置中 \cline{2-3} % 只畫二三欄橫線 & $c$ (J/kg$\cdot$K) & $C$ (J/mol$\cdot$K) \\ \hline Aluminum & 900 & 24.3 \\ Copper & 385 & 24.4 \\ Gold & 130 & 25.6 \\ Steel/Iron & 450 & 25.0 \\ Lead & 130 & 26.8 \\ Mercury & 140 & 28.0 \\ Water & 4190 & 75.4 \\ Ice ($-$10 \textcelsius) & 2100 & 38 \\ \hline \end{tabular} \end{document} textcomp 也是 LATEX 的標準巨集之一,他提供了許多符號,不必進入數學模式也是可以正 常使用。但一般編譯的話,可能會使用到 pk 點陣字,如果有安裝 cm-super Type1 字型 的話,可以使用以下的編譯方式: latex example16.tex 81
89. 第 8 章 表格的處理 8.3. TABULAR 環境 dvisp -Pcm-super example16.dvi ps2pdf example16.ps 這樣就會完全使用 Type1 字型。如果沒有安裝 cm-super Type1 字型,則可引用