LaTeX 教學系列 (II):第一份 LaTeX 文件裡面,我們提到了如何建立第一份文件,並且根據不同的文件類別使用章節標題。
文章目錄
TeX 世界的巴別塔
跟許多程式語言一樣,TeX 語言也是由西方世界的人所發明的,因此自然地對於東亞國家的使用者不太友善,就像《聖經》中提到的巴別塔(Tower of Babel)一樣,把不同語言使用者隔絕開來。然而,隨著電腦的普及,有排版需求的人越來越多,因此不同的編譯系統便被許多無所事事厲害的工程師魔改,製作出可以允許不同語言使用者的編譯系統。
編譯系統 | 優點 | 缺點 |
---|---|---|
pdfLaTeX | 穩定且廣泛支持,直接生成 PDF 文件 | 對非拉丁字母和 OpenType 字體支持較差 |
XeLaTeX | 支持 Unicode 和 OpenType 字體,可以使用不同語言 | 編譯速度可能較慢 |
LuaLaTeX | 支持 Unicode 和 OpenType 字體,基於 Lua 擴展功能強大 | 編譯速度可能較慢 |
LaTeX | 可以生成 DVI 文件,靈活性高 | 需要額外步驟將 DVI 轉換為 PS 或 PDF 文件,使用較為繁瑣 |
TeX | 高靈活度與可控性 | 語法較為複雜,不如 LaTeX 方便易用 |
ConTeXt | 對多語言和複雜文檔處理較好,開發活躍 | 與 LaTeX 兼容性較差,需要學習新的語法 |
OpTeX | 簡單易用,語法設計現代 | 使用者社群較小,資料和資源相對較少 |
AMS-TeX | 數學公式排版效果極佳,專為數學出版物設計 | 相比 LaTeX 功能更單一 |
看到這裡的你一定會想問:之前文章中的例子都是用英文寫的,那如果我的文件是中文怎麼辦呢?如果你有這個問題的話,恭喜你已經贏過許多人了!在這篇文章的第三小節就會提到如何設定中文字體!
別著急,且聽我慢慢細說。
LaTeX 的裝備:套件
如果你有遊玩線上遊戲(尤其是角色扮演類)的經驗,肯定需要在遊戲內購買裝備,才能夠打敗特定關主、魔王。LaTeX 也是一樣,需要使用裝備才能夠使用特定功能,例如上一小節最後提到的使用中文。因此,這個小節將會教你如何安裝並使用套件,並且在不清楚套件可以如何設定的情況下,到哪裡尋求援助。
買裝備:安裝與使用套件
使用 LaTeX 套件時,我們需要以\usepackage[套件設定]{套件名稱}
下指令,告訴電腦我們需要使用特定套件。1不過需要注意,如果你是在本機裡面使用 LaTeX,也就是已經裝好編譯器,那麼在使用套件之前,編譯器通常都會先詢問是否要安裝特定套件2,必須要確保真的安裝該套件成功之後,編譯才會成功。
在上一篇文章的最後,不曉得聰明的你有沒有發現,在範例中有一些很奇怪的拉丁字母。這些文字就是排版領域大名鼎鼎的 Lorem ipsum(簡稱為 Lipsum)。Lipsum 是一段常見的占位文字,或稱為假文,起源於古羅馬詩人西賽羅(Cicero)的作品,通常用於設計和排版中,用來填充文本文字區域以模擬實際的文字內容,協助測試版面效果。以下我們拿 lipsum
與 blindtext
兩個套件做說明。3
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2] % 生成第 1 到第 2 段 Lorem ipsum 文本
\end{document}
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\blinddocument % 生成一個包含標題、段落、列表等的範例
\end{document}
說明書:CTAN
如果你買了一個東西卻不知道如何使用的話,那麽購買該項產品或服務的意義就不大。因此通常廠商都會給予使用者說明書(manual),清楚地告訴使用者應該如何使用,以及一些問題排解的指示。
TeX 的各種套件也有對應的使用說明書,而這個說明書被存放在CTAN這個使用說明書儲存櫃中。4假設我們要查看 lipsum
這個套件的使用說明,可以在瀏覽器的搜尋欄打上「CTAN lipsum」這兩個關鍵字,大部分第一個都是正確的搜尋結果。點進去之後就會看到 CTAN 上存放該套件的使用說明(多以 Package documentation 命名)。例如lipsum
的使用說明書可以點擊此連結。
LaTeX 百變怪:設定文字
設定字體大小
在 LaTeX 中,更改字體大小有多種方法,主要是使用預定義的字體大小指令和 \selectfont
指令兩種不同方法。預定義的字體大小指令非常簡單且易於使用,
字體大小指令 | 字體大小 (pt) | 字體大小指令 | 字體大小 (pt) |
---|---|---|---|
\tiny | 5 | \large | 12 |
\scriptsize | 7 | \Large | 14 |
\footnotesize | 8 | \LARGE | 17 |
\small | 9 | \huge | 20 |
\normalsize | 10 | \Huge | 25 |
這些指令的排版效果如下:
\documentclass{article}
\begin{document}
This is \tiny tiny text.
This is \scriptsize very small text.
This is \footnotesize smaller text.
This is \small small text.
This is \normalsize normal size text.
This is \large large text.
This is \Large larger text.
This is \LARGE even larger text.
This is \huge huge text.
This is \Huge the largest text.
\end{document}
另一種設定字體大小則是使用\fontsize{size}{baselineskip}\selectfont
指令。在這裡,size
是字體大小,baselineskip
是行距。例如,若要設定字體大小為 25pt 並將行距設定為 14pt,可以使用 {\fontsize{25}{14}\selectfont 要更改大小的字體}
,實際效果如下面所示:
\documentclass{article}
\begin{document}
This is the {\fontsize{25}{14}\selectfont modified} text.
\end{document}
在這邊有一個小技巧,我們使用花括號{}
創建一個局部範圍,範圍內的設定只影響括號內的內容,括號外的內容不受影響。
如果你不知道字體大小測量的方式,可以先看下圖。排版技術十分要求對齊(alignment),因此設計字體時,一定都會以下圖的線條作為輔助線。
而字體基線跟排版有什麼關係呢?下圖顯示了兩行文字,第一行文字與第二行文字之間的基線用紅色線段標示出來,一般來說我們都會以基線作為兩行之間的對齊基準,太大會讓字體離得太遠,太小則會讓字體看起來很擠,因此中庸之道就是選擇一個適合目前文件大小的基線高度。
設定字體系列
這張圖片展示了 LaTeX 中不同字體系列(typeface/family)的設定方法,包括 serif(羅馬字體)、sans serif(無襯線字體)和 typewriter(等寬字體)。每種字體系列都有相應的指令和切換指令:
字體系列 | 指令 | 替代指令 | 輸出結果 |
---|---|---|---|
serif (roman) | \textrm{Sample Text 0123} | \rmfamily | Sample Text 0123 |
sans serif | \textsf{Sample Text 0123} | \sffamily | Sample Text 0123 |
typewriter (monospace) | \texttt{Sample Text 0123} | \ttfamily | Sample Text 0123 |
在 Word 裡面,使用者可以將某一段文字反白,接著選擇想要的字型進行更改。不過有時這個操作沒有辦法正確地更改文字字型,而且如果對方的電腦沒有特定字型檔案,那麼就會顯示預設字體(通常都是新細明體)。LaTeX 很好地解決這個問題,在 LaTeX 中可以使用 fontspec
套件,該套件提供了一個簡便的方法來設定和更改字型,特別適用於使用 XeLaTeX 或 LuaLaTeX 編譯的文檔。
首先,你需要在文檔的導言區引入 fontspec
套件,接著使用 \setmainfont
、\setsansfont
與 \setmonofont
,接著就可以更改你想要的字體。不過通常來說,字體檔應該都要儲存在資料夾中的 fonts
資料夾,並且指定路徑,否則電腦不會知道你想要的字體是什麼。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}
\begin{document}
This is Serif.
\textsf{This is Sans Serif.}
\textsf{This is Mono.}
\end{document}
設定字型
在 LaTeX 中,粗體、斜體和粗斜體的用途各有不同,主要用於突出和強調文本內容。粗體(Bold)常用於強調重要的詞或句子,標題或副標題,以引起讀者的注意;在技術文檔中,粗體用於強調關鍵詞或重要術語。斜體(Italic)則通常用於書名、文章名稱或強調外來詞,以及在數學和科學文檔中表示變數或斜體符號。斜體也可以用於引用或強調特定的詞語或句子。至於粗斜體(Bold Italic),則用於需要特別強調的文本,例如在強調的同時需要更強的視覺效果,或者在標題中的特別強調部分。
\documentclass{article}
\begin{document}
This is normal text.
This is \textbf{bold} text.
This is \textit{italic} text.
This is \textbf{\textit{bold italic}} text.
\end{document}
設定中文
在 LaTeX 中,使用中文需要特別的套件來處理字體和字符編碼問題。常用的套件是 xeCJK,該套件需要 XeLaTeX 編譯器來正確顯示中文。5首先,你需要確保系統已安裝 XeLaTeX 編譯器,接著,在你的 LaTeX 文檔中引入 xeCJK
和 fontspec
兩個套件。xeCJK
用於處理中文排版,而 fontspec
用於設定字體。以下是範例程式碼,展示如何設定中文:
% !TeX xelatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{FandolSong}
\begin{document}
你好,這是一份測試文件。
\end{document}
由於前面提到無法上傳字體檔到 TeXLive 上,因此以下提供在本機建立 fonts 資料夾的處理方式。首先,在 .tex
的同個資料夾路徑下建立 fonts 資料夾,並將中文字體檔(副檔名多半是 .ttf
、.TTF
或 .otf
)放在裡面,中文字體檔案建議用cwTeX 字體。先看範例,再來一一講解如何設定。
% !TeX xelatex
\documentclass{article}
% 載入套件
\usepackage{xeCJK}
\usepackage{fontspec}
% 設定中文字體
\setCJKmainfont[Path=./fonts/]{cwTeXQMing-Medium.ttf}
\setCJKfamilyfont{kai}[Path=./fonts/]{cwTeXQKai-Medium.ttf}
\newcommand{\kai}[1]{{\CJKfamily{kai}#1}}
\setCJKfamilyfont{yuan}[Path=./fonts/]{cwTeXQYuan-Medium.ttf}
\newcommand{\yuan}[1]{{\CJKfamily{yuan}#1}}
\setCJKfamilyfont{hei}[Path=./fonts/]{cwTeXQHei-Bold.ttf}
\newcommand{\hei}[1]{{\CJKfamily{hei}#1}}
\begin{document}
你好,這是一份測試文件。
\end{document}
在範例程式碼中,我們使用 \setCJKmainfont
設定文件的主要中文字體,也就是如果你不加修改字體,那麼就是依照使用者預設的字體呈現。接著,\setCJKfamilyfont
則是新增中文字體的字體家族,例如 \setCJKfamilyfont{kai}[Path=./fonts/]{cwTeXQKai-Medium.ttf}
便指定了字體家族為 kai
(因為是楷體),在選擇參數中加入 Path=./fonts/
,代表將字體檔路徑設定在子資料夾 fonts 中,最後告訴電腦字體檔案名稱是什麼。
設定到這邊並未結束,因為這樣只有告訴電腦有這個字體家族,但是並沒有呼叫該字體的指令。不過因為每個人設定的字體家族名稱都不盡相同,因此需要新增指令。新增指令的方式很簡單,只要用 \newcommand{指令名稱}[參數數目]{定義指令}
。6回到原本的例子,文件中已經設定一個字體家族名為 kai
,我們就創建新指令 \kai
,定義為 \newcommand{\kai}[1]{{\CJKfamily{kai}#1}}
,也就是當使用者需要將字體變成楷體時,使用 \kai{欲變更文字}
即可。其他的字體類型以此類推,我們就可以建立一個好看的中文文件了!
LaTeX 的服裝:版面設定
有了上面的設定概念後,接著我們就可以針對文件中的其他部分進行修改。我們可以透過一些套件,讓我們的文件變得更加易讀、美觀。這一小節我們將會提到如何進行邊界設定、章節標題字體設定,以及頁首與頁尾的設定。
邊界設定
在 Word 中,我們可以進行版面設定,即設定上、下、左、右邊界,LaTeX 也有提供相同的功能。設定邊界的方式很簡單,只要使用 geometry
套件即可。不過,在設定時還是有些地方需要注意。先看下圖:
一份文件中,本文的位置由圖左中間的方框包住,該方框與紙張中間的距離就稱為邊距(margin)。邊距分為上(top)、下(bottom)、左(left)、右(right)。引用套件後,我們可以使用 \geometry{}
來設定。以下是範例,假設將頁面的上邊距和下邊距設定為 2 公分,左邊距和右邊距設定為 2.5 公分,你也可以自己調整看看,不同的數字會有何種變化。
% !TeX xelatex
\documentclass{article}
% 設定中文字體
\usepackage{fontspec}
\setmainfont{FandolSong}
% 設定邊界
\usepackage{geometry}
\geometry{a4paper, margin=2.5cm}
% 設定標題頁資訊
\title{第一份 \LaTeX\ 文件}
\author{王大明}
\date{\today}
\begin{document}
\maketitle
你好,這是一份測試文件。
\end{document}
如果你想要將所有邊距設為同一數值,例如 \geometry{margin=2cm}
,這樣就將會把文件的所有邊距都設定為 2 公分。如果只想設定某一方向的邊距,可以使用以下指令:\geometry{left=3cm}
,類似地,可以設定 top
、right
和 bottom
邊距。
如果你認為 geometry
套件只有這樣的功能,那你就太小看它了!如果我們的文件不是一般常見的 a4 格式,例如中學考卷通常都是 a3,那麼要如何處理?更進一步地說,中學的考卷有時需要橫向排版,這時候又應該怎麼做?別緊張,geometry
套件還提供了其他設定選項,例如紙張大小、頁面方向和裝訂邊距等。
使用者可以通過 a4paper、letterpaper 等選項來設定紙張大小,或是可以用 landscape
將頁面設定為縱向或橫向,7如果需要為裝訂預留額外的邊距,可以使用 bindingoffset
參數。假設我們要將文件設定為 a3 的橫向大小,邊距均為 2.5 公分,並預留裝訂區域為 1 公分,可參考以下範例:
% !TeX xelatex
\documentclass{article}
% 設定中文字體
\usepackage{fontspec}
\setmainfont{FandolSong}
% 設定邊界
\usepackage{geometry}
\geometry{a3paper, margin=2.5cm, landscape, bindingoffset=1cm}
% 設定標題頁資訊
\title{第一份 \LaTeX\ 文件}
\author{王大明}
\date{\today}
\begin{document}
\maketitle
你好,這是一份測試文件。
\end{document}
章節標題格式設定
Word 裡面我們對於章節標題格式設定,需要先選取一個章節的標題,接著點選樣式進行設定,8不過這樣的設定方式稍顯麻煩,有時會因為加入新的小節而跑版。
在 LaTeX 中,我們使用 titlesec
進行設定。首先,在導言區載入 titlesec
套件後,使用 \titleformat{欲設定標題}[形狀]{格式}{標籤樣式}{標題編號與文本間距}{標題文本前指令}[標題文本後指令]
指令來設定章節標題的格式。這個指令分成好幾個部分:
-
欲設定標題:指定要設定格式的標題指令,例如
\section
、\subsection
等。 -
形狀:可選參數,用於指定標題的形狀或樣式,例如
block
(塊狀)或display
(顯示)。如果不需要特別的形狀,這部分可以省略。 -
格式:設定標題的字體、大小、顏色等格式,使用 LaTeX 的文本格式指令。
-
標籤樣式:指定標題的標籤樣式,即標題編號部分。可以使用
\thesection
、\thesubsection
等指令來設定。如果不需要標題編號,可以使用空的大括號{}
。 -
標題編號與文本間距:設定標題編號與標題文本之間的距離,單位可以是
pt
、em
、cm
等。 -
標題文本前指令:指定在標題文本之前執行的 LaTeX 指令,例如插入圖片、水平線等。如果不需要,可以留空。
-
標題文本後指令:可選參數,指定在標題文本之後執行的 LaTeX 指令。
我們直接從以下範例看一下如何處理:
% !TeX xelatex
\documentclass{article}
% 設定中文字體
\usepackage{fontspec}
\usepackage{xeCJK, CJKnumb}
\setmainfont{FandolSong}
% 載入中文假文產生器
\usepackage{zhlipsum}
% 設定標題格式
\usepackage{titlesec}
\titleformat{\section} % 設定 \section 標題的格式
{\normalfont\Large\bfseries} % 標題的字體和大小
{\CJKnumber{\thesection}、} % 使用 \CJKnumber 將章節編號轉換為中文數字
{1em} % 編號與文本之間的距離
{} % 標題文本之前的程式碼
% 設定邊界
\usepackage{geometry}
\geometry{a4paper, margin=2.5cm}
% 設定標題頁資訊
\title{第一份 \LaTeX\ 文件}
\author{王大明}
\date{\today}
\begin{document}
\maketitle
\section{前言}
\zhlipsum[1-3]
\end{document}
在上面的範例程式碼中,有幾個小技巧:
- 可以看到我們使用
\usepackage{xeCJK, CJKnumb}
將兩個套件載入進來。如果欲載入沒有要設定其他的內容,那麼就可以將多個套件以逗號分隔一次載入。 - 前面我們提到拉丁字母有假文產生器
lipsum
,中文也有相應的套件zhlipsum
,使用方法與lipsum
大致相同,即輸入\zhlipsum[起始段落-結束段落]
即可。
頁首頁尾設定
在 Word 中,頁首與頁尾的設定十分複雜,除了腳註的設定外,更包含奇偶數不同的頁碼、頁首文字等。LaTeX 則提供 fancyhdr
套件,透過預先設定,就不用一個個微調。
在以下的範例程式碼中有一個地方必須注意:我們以頁腳的設定來說,程式碼中有 fancyfoot
與 cfoot
、lfoot
、rfoot
,你可能會想說這是不一樣的東西吧。答案是肯定,也是否定。事實上 fancyfoot
是較為正式的用法,可以設定的參數較多,常用位置參數包括:L
左邊(Left)、C
中間(Center)、R
右邊(Right)、E
偶數頁(Even)、O
奇數頁(Odd)。而 cfoot
、lfoot
、rfoot
則是 fancyhdr
套件提供的快捷命令,用於快速設置頁腳的中間、左邊和右邊內容。
% !TeX xelatex
\documentclass[twoside]{article}
% 設定中文字體
\usepackage{fontspec}
\usepackage{xeCJK, CJKnumb}
\setmainfont{FandolSong}
% 載入中文假文產生器
\usepackage{zhlipsum}
% 設定標題格式
\usepackage{titlesec}
\titleformat{\section} % 設定 \section 標題的格式
{\normalfont\Large\bfseries} % 標題的字體和大小
{\CJKnumber{\thesection}、} % 使用 \CJKnumber 將章節編號轉換為中文數字
{1em} % 編號與文本之間的距離
{} % 標題文本之前的程式碼
% 設定邊界
\usepackage{geometry}
\geometry{a4paper, margin=2.5cm}
% 設定頁首頁尾
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\lhead{\normalsize 左上文字 \\ 左下文字}
\rhead{\normalsize 右上文字 \\ 右下文字}
% 設置偶數頁和奇數頁的不同頁眉和頁腳
\fancyfoot[C]{}
\fancyfoot[LE,RO]{第~\thepage~頁} % 頁碼放在偶數頁的左邊及奇數頁的右邊
% 設定標題頁資訊
\title{第一份 \LaTeX\ 文件}
\author{王大明}
\date{\today}
\begin{document}
\maketitle
\section{前言}
\zhlipsum[1-10]
\section{研究方法}
\zhlipsum[11-20]
\end{document}
在使用 fancyhdr
之前,建議使用 \fancyhf{}
清除任何預設的頁首和頁腳設定。然後,使用 \lhead
和 \rhead
命令分別設定頁首的左側和右側內容,其中 \lhead{\normalsize 左上文字 \ 左下文字}
將頁首的左側設定為包含「左上文字」和 「左下文字」,而 \rhead{\normalsize 右上文字 \ 右下文字}
則將頁首的右側設定為包含「右上文字」和 「右下文字」。
頁腳部分,使用 \cfoot{\footnotesize \thepage}
在頁腳的中央顯示頁碼。此外,利用 \fancyfoot[C]{}
清空中央的頁腳內容,然後使用 \fancyfoot[LE,RO]{第~\thepage~頁}
設定頁碼,使其在偶數頁的左側和奇數頁的右側顯示,並且格式為第~頁碼~頁
。
小結
這篇文章教的內容有點多,可能對於初學者而言沒辦法一下子吸收過來,建議多看幾次,或是直接實際操作,讓 LaTeX 的指令變成肌肉記憶。如果找不到可以練習的素材,可以使用筆者的模板(趁機打廣告)練習看看:Note template。
如果你不曉得
[]
與{}
的差別在哪,請回去看第一篇文章的決定美醜的關鍵:參數。 ↩︎筆者未有使用過 MikTeX 以外編譯器的經驗,因此不確定其他編譯器是否如此智慧。MikTeX 的好處是可以在 MikTeX Console 裡面設定自動安裝套件,不用每次詢問。 ↩︎
lipsum
與blindtext
最大的差別是:lipsum
僅生成 Lorem ipsum 占位文本,而blindtext
則可以生成各種格式的測試文本,例如標題、副標題等。 ↩︎但是這個儲存櫃唯一的缺點就是全英文,但現在 chatGPT 等 AI 工具如此發達,只要將文件內容丟進去即可翻譯,因此不用擔心看不懂。 ↩︎
另外還有
CTEX
、CJK
、CJKutf8
,但是最常見最好用的套件是xeCJK
。而 CJK 代表的意思是中文(Chinese)、日文(Japanese)與韓文(Korean)。 ↩︎新指令的定義是包含你希望指令執行的內容。如果指令可以允許接受參數,則可以在定義中使用
#1
、#2
等來引用這些參數,#1
表示第一個參數,依此類推。 ↩︎默認情況下是縱向(portrait),因此不需要設定。 ↩︎