這一章要談的是,和一般的純文字文稿及其他 markup 式文件系統在語言上的一般差異性。為了讓觀念上能夠更清楚,以下所述主要是要在命令列執行的,致於編輯器上方便的按鍵及巨集,這裡就不多談,一方面是每個人使用的編輯器不一樣,二方面是要先把黑盒子拿掉,整個處理流程才會有概念。
當然,由於完全還沒有開始實際寫文稿來測試,所以,這章是紙上談兵,不必動手,用看的就好。但,別急,我們會在第 4 章開始實際玩看看,請別忘了,到時要再回頭來複習一下這些資料。
而且,前面已經說過,這篇文章主要是著眼於 LaTeX 所附上的巨集,一些其他方便的套件引用,將會在最後或另文再來談。其實,不引用任何外來特殊套件,讓 LaTeX 本身去處理,最起碼也就不會太離譜,要講求美觀、微調,個人是認為先把基礎弄起來再說,有些套件的複雜程度,會令人頭疼,你是不是真有這個需要,值得考慮。而且,很多時候自認為不錯的「微調」,其實常常會不合排版的慣例。TeX/LaTeX 的語法,可以是很簡單明白,也可以是相當的複雜,這是 TeX 系統本身的彈性所導致。
最簡單的一句話,就是把編輯器編輯好的文稿(通常結尾是 .tex),利用 latex 這個指令去編譯文稿就對了!
latex your.tex
需要注意的是,如果有索引,還要用 makeindex 執行一次,有參考文獻,還需要 bibtex 處理一次,最後再使用 latex 再處理一至二次,也就是說視文稿的複雜程度,latex 可能需要執行好幾次,這在往後碰到時會再提出來。另外,處理中文的話,需要其他前置處理,這裡暫時先以英文文稿來說明,中文的部份,只要加入中文環境及(或)改用能處理中文的前置處理器就可以了。
這樣經過 latex 處理後,會產生一個 your.dvi 檔,然後可以使用 dvips 來產生 POSTSCRIPT 格式的檔案。也可以使用 dvipdfm[x] 來產生 PDF 的格式,當然,也可以使用 ps2pdf 經由 POSTSCRIPT 格式轉換成 PDF 格式。另外,也可由 pdflatex 由 your.tex 直接編譯成 PDF 格式的輸出。
This is my first \LaTeX\ typesetting example.
編譯後會變成以下的結果:
This is my first LaTeX typesetting example.
其中的 \LaTeX 就是 LaTeX 的一個指令,會顯示 LaTeX 這個特殊的圖示。
由於,西方國家的語系,通常字母、符號的最大容量只有 256 個(
),因此,許多現有的符號必須拿來當做控制指令,才能符合排版的多樣化需求。以下的符號,接觸 TeX/LaTeX 的朋友,可能都得時時留意,不要未經處理就直接寫進文稿裡頭去了。
通常,編輯器的語法顏色會幫助判斷語法是否正確,但不是都能完美無缺,有時還是會漏掉,這時別忘了查看一下 *.log 檔案,例如:編譯 your.tex 檔的話,他的 log 檔就是 your.log。
符號 作用 文稿上使用 LaTeX 的替代指令 \ 下排版命令 $\backslash$\textbackslash% 註解 \%NA # 定義巨集 \#NA ~ 產生一個空白 \~{}\textasciitilde$ 進入(離開)數學模式 \$\textdollar_ 數學模式中產生下標字 \_{}\textunderscore^ 數學模式中產生上標字 \^{}\textasciicircum{ 標示命令的作用範圍 \{\textbraceleft} 標示命令的作用範圍 \}\textbraceright< 數學模式中的小於符號 $<$\textless> 數學模式中的大於符號 $>$\textgreater| OT1 編碼,數學模式中才能正確顯示 $|$\textbar& 表格中的分隔符號 \&NA
除了上面所談到的特殊符號外,也有一些規範或慣例要遵守,有些是比較硬性的規定,有些則只是慣例,可能不同的國家、語言會有不同的慣例,暫時先把他當成是 LaTeX 的遊戲規則就成了。
要談排版上的規範、慣例前,我們得先認識一下字型的一些術語,以便往後文章中提到時有個概念。通常我們每個字都是置放於一個假想的方框中,稱為 em-square,同一個字型的同一個點數,每一個 em-square 大小都是相同的,實際上的字(glyph)要置放在這個 em-square 的什麼位置,這是字型設計者的觀點,所以,同樣點數的不同字型,他的字的大小不一定會一樣,因為我們是使用 em-square 的大小在比較的,而非實際的 glyph。
在文章中排列的時候,則是將 glyph 置於一個以假想參考點(reference point)為基準的一個假想線上,稱為基線(baseline),大寫字母除了 Q 以外,他們的底部都是置於基線上的。但小寫字母則不一定剛好座落在基線上,有些字的筆畫可能超出基線以下,例如 y、j 等字母。關於字型在文章中的置放位置,我們來看看一個模擬圖:3.1
這個超出基線以下的長度,我們稱之為深度(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 的距離。
\ 開頭,後接由字母組成的字串或單一的非字母字元。其中由 [ ] 中括號括住的是選擇性參數,可以省略,由 { } 大括號括住的是不能省略的參數,當然,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.
所以,正常印出來應該是:
This is my first LaTeX typesetting example.
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 是認不得中文的。
" 這個一次完成兩個點的 ditto marks。所以,實際上在鍵入文稿時是:
Please press an `Esc' key. Please press an 'Esc' key. 這是錯誤示範! ``This sentence.'' "This sentence." 這是錯誤示範!
排版出來的情形是:
中文的話,我們是使用中文全形的「、」及『、』,在中國大陸則已改用和英文相同形狀的全形符號,但這在中文直排時會出問題,因此,中文的單、雙引號還是得維持我們目前使用的。![]()
現在的問題是,如果這些標點符號後面不是另一個句子的開始的時候,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,把他們綁住的意思。排版出來的時候會變成:
請放大去仔細比較一下結果就知道了。第二行的才是正確的,Mr. 和 Edward 之間的空白是正常單字間空白,比第一行的句子結束空白要小一點點。其他有使用到縮寫字的場合,例如:`Dr.'、`etc.'、`e.g.'、`i.e.'、`vs.'、`Fig.'、`cf.'、`Mrs.',這些都不是代表句子結束,所以,要插入一個正常空白。![]()
那 G.J. 後面為什麼沒有插入正常空白?那是因為,J 是大寫的,這時 LaTeX 不會去誤認為是句子結束,通常句子結束時的句點前的那個字母是小寫的。Well,有沒有覺得有點道理?:-)
等等,事情還沒有結束!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.
排版出來的結果將會是(差異不明顯,請小心比較):
如果,你現在閱讀的是 HTML 格式文件,有些例子如果無法明顯顯示出來,請改閱覽 PDF 版本。而且,如果你製作 PDF 格式時,字型沒有內嵌(本文的英數字是嵌入 Computer Modern Type1 字型),差異可能將會更不明顯。可試著使用 gv/gsview 去閱覽,然後調整成 Landscape,把句子尾部拉到邊緣的地方去就看得出來了。這在句子多的時候,這個空白也並非固定大小的,LaTeX 會視文章結構的需要做細微的調整。![]()
\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.
排版出的來結果是:
中文的刪節號是由兩個全形的三點所組成六點的,即:![]()
- 就行了,例如 father-in-low,這樣會表現成 fater-in-low。
1991--2003 年,這會表現成 1991-2003 年。
I am---a good man. 會表現成 I am--a good man.。至於這個三個連續的 hyphen 前後是否要留空白,都有人使用,並沒有硬性的慣例,但為了和中文的破折號配合(中文破折號前後,通常不留空白),個人通常是不留空白的。
$-5$,然後表現出來是
標點符號 置放處 ,。;、:」)》!? 不能置於行首 「(《 不能置於行尾 破折號及刪節號 置於首尾皆可
簡單的說,除了破折號及刪節號,沒有開口的,不能置於最開頭,開口向右的,不能置於最右,開口向左的,不能置於最左。通常都會處理好,但校稿的時候要注意一下誤判的地方。
上一節所談的都是指令,雖然也可以由大括號來定作用範圍,但如果是一整段,甚至是一整篇文章都要作用時,那指令可能就不很適合了,因此,LaTeX 也有一種巨集結構,稱為環境(environment),主要是讓作用範圍能擴大至較大的範圍。
所有的環境,都是起於 \begin{環境名稱},止於 \end{環境名稱},這兩個指令之間的文稿都會被作用,而且,環境之內還可以套用其他不同的環境。
LaTeX 文稿的內文,其實就是包在一個 \begin{document} 和 \end{document} 這個 document 環境當中。
以下就是所有 LaTeX 必需具備的文稿大結構:
\documentclass{article}
這裡是 preamble 區
\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
真正的實例解說,會在下一章來進行,所以,這裡暫時不會介紹有什麼環境可以使用,先玩看看沒有關係。由於還沒談到中文的問題,因此如果你想試試看,那暫時先使用英文,道理都是相通的。
這裡可以引用巨集,而且會影響整篇文稿的指令,例如一些事先定義好的指令,想在整篇文稿中使用,就可以置放在 preamble 區。
本文主要是標準 LaTeX,但前面已提到,會有些巨集套件不得不要引用,底下就來說明如格引用套件。這些套件都是一般 TeX 系統都會附上的。
指令及環境要如何開頭都介紹過了,現在來看看引用巨集要怎麼開頭。
\documentclass{article}
\usepackage{color}
\begin{document}
\textcolor{blue}{This is blue color.}
\end{document}
編譯一下,看看結果是什麼?這裡使用的就是 color package,裡頭是由 TeX/LaTeX macro 所寫成一個巨集套件。一般簡單的我們就稱為巨集(macro),複雜一點的就稱為巨集套件(package),其實,裡頭都是一樣的,只不過大小及有沒有整理成一個系統的差別。
LaTeX 裡頭有什麼現成的套件可以使用,每個散佈的 TeX 系統所收集的可能都會有所不同。大概沒有人可以精通所有現存的 LaTeX 巨集套件,因為實在是太多了,不過,本文大概都會提到常用的巨集套件。詳細的巨集套件的種種,會在第 7 章來說明。
會影響整篇文稿的指令,通常也是放在 preamble 區,例如:
\linespread{1.36}
\parindent=0pt
\linespread 是在控制上下行的行距,這裡就是將行距變成原來的 1.36 倍。至於什麼是行距呢?就是這一行的基線(baseline)到下一行的基線的距離,通常英文文章不必去調整他的行距,但中文得適當加大行距以利閱讀。
\parindent 是調整段落內縮的程度,這裡調整成 0,也就是說各段落都不內縮的意思,也可以調整成其他的值,LaTeX 就會依這個值去內縮。當然,不去設定的話,LaTeX 就會依他的預設值去內縮。
本文區當然是我們寫文章的主要地方,及一些微調。在 LaTeX 的文稿裡頭,章節標題的形成都是由同樣的指令來控制的,這樣有一個好處,臨時插入章節標題及其內文時,我們不必去理會標題編號及目錄的問題,也不必去理會要用什麼字型、及字型大小要多大,LaTeX 會自動計算處理,字型大小也會和內文使用的字型大小互相配合調整,使用者就專心在內文構思、寫作即可。以下由列表來瞭解整個章節結構:
深度標號 指令 作用及注意事項 \part{}這是最大的結構,我們中文通常稱為「部」。 0 \chapter{}章。在 article 類別裡頭沒有章。 1 \section{}節。 2 \subsection{}小節。 3 \subsubsection{}次小節。 4 \paragraph{}段落。 5 \subparagraph{}小段落。
章節標題的內容就是直接寫入指令的大括號裡頭就可以了,LaTeX 在排版時會自動使用粗體、加入章節編號及納入目錄裡頭。
至於第一欄的深度標號(secnumdepth),book/report 類別的深度標號是 2,article 的是 3。這是什麼意思呢?就是說 book/report 類別的文稿,在 \subsection{} 以後(subsection 本身仍會編號),章節就不再編號了;同樣的,在 article 類別的文稿,在 \subsubsection{} 以後就不編號了。但仍然會獨立出一單獨行來表示這個是標題。不編號了的章節內容,當然也就不納入目錄裡頭了。這當然是可以更改的,只要更改 LaTeX 的 secnumdepth 這個變數的值就可以了,這個往後會提及如何更改 LaTeX 的預設值。像這篇文章,在 preamble 區就有一個設定:
% let the depth of report to subsubsection
\setcounter{secnumdepth}{3}
所以,這篇文章雖然使用的是 report 類別,但是章節的深度標號是標在 3,也就是說會編號到 subsubsection 為止,但這仍然是沒有編入目錄中的。
下一章就讓我們開始實際動手吧!但
,怎麼到現在都沒有完整介紹指令呢?那我怎麼會知道有什麼指令可以使用?這是因為 LaTeX 的指令很多,直接介紹的話,一方面記不住,二方面也不容易瞭解他的實際作用,所以,我們將會在下章舉例時穿插在裡頭說明,等這份文件接近尾聲時,再來整理個指令速查表,這樣以後查指令就很方便了,不必去死記,只要知道有個這樣功能的指令就夠了。