大家來學 LATEX

2020-02-27 318浏览

  • 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 會影響他的思路,因此,寧願留住址,要和他聯絡就只好寫信,傳 2http://www.fsf.orghttp://www.gnu.org/philosophy/free-sw.html4http://www-cs-faculty.stanford.edu/~knuth/cweb.html5http://www-cs-faculty.stanford.edu/~knuth/email.html3 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.html1.2 那麼,LATEX 又是什麼呢? TEX 是個很低階的排版語言,如果排版時都要從這種低階語言來控制版面的話,那將會非 常的煩複,所以,一些經常要用到的功能,都會先去定義好(稱為巨集,macro),這樣 6http://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 的後續發展了。 8http://www.latex-project.org/latex3.html9ftp://ftp.dante.de/tex-archive/info/beginlatex/beginlatex.pdf10 雖然有一些版權的規定,但是 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 就剛好稱職的做他排版專業的工作。 11http://www.latex-project.org/http://tug.ctan.org/13http://www.lyx.org/14http://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'>http://www.tug.org/teTeX