LaTeX 學習筆記:文檔排版基礎
在撰寫學術論文、技術報告或專業著作時,排版的質量往往決定了作品給人的第一印象。對於計算機科學、工程技術、數理化等領域而言,文檔中不僅包含大量數學公式,還常常涉及圖表、參考文獻等複雜結構。正如我們在《[[LaTeX學習筆記:開場白與索引]]》一文中所提到的那樣,計算機科學家們正是為了應對這些複雜的排版需求而開發了 \(\LaTeX\)。
在本篇筆記中,我們將重點介紹 \(\LaTeX\)
定義排版結構
在 \(\LaTeX\) 中,文檔的整體排版結構是通過一系列結構性命令(structural commands)來定義的。這些命令用於給文檔指定排版類型,加載功能擴展包,設置頁面版式,設置標題、作者等元信息,並生成文檔的開篇部分。最常用的命令包括:
\documentclass:用於指定文檔所要採用的排版類型;\usepackage:用於通過加載宏包的方式來獲得擴展功能;\geometry:用於設置文檔的頁面尺寸與頁邊距等頁面版式信息\title、\author、\date:用於定義文檔的標題、作者等元信息;
接下來,我將會按照功能逐一介紹這些命令的使用方法。
指定排版類型
在使用 \(\LaTeX\) 語言定義一個文檔的排版結構時,我們需要先在其源文件的第一行中使用\documentclass命令指定要採用的排版類型。換而言之,我們需要首先指定該文檔的排版規格屬於短篇文章、學術報告、信件、書籍,還是他類型的文獻。在程序員的日常工作中,較為常用排版類型主要可分為以下幾種:
- 標準文檔類,由 \(\LaTeX\)
article:用於排版短篇文章,包括期刊投稿、技術文檔等;report:用於排版學術報告,包括畢業論文、技術報告等;book:用於排版書籍類文檔,例如專著、教材等;letter:用於排版信件類文檔,包括個人書信、商務信函等;
- 擴展文檔類:由
extsizes宏包提供,提供有extarticle、extreport、extbook三個類,它們分別是上述前三個標準文檔類的擴展版,主要區別是支持更大的字號選項(如14pt、17pt、20pt)
3.中文文檔類:由ctex宏包提供,提供有ctexart、ctexrep、ctexbook、ctexletter四個類,它們分別是上述四個標準文檔類的中文增強版本,可自動配置中文字體、字號、段落間距與標題格式,更適合中文排版。值得一提的是:在新版 CTeX 宏包中(自 2.0 以後),ctexletter類儘管仍然存在,但默認情況下不會隨發行版安裝,讀者如有需要可通過 texdoc ctex 查閲詳細信息。
下面,讓我們來具體演示一下\documentclass命令的使用。假設,你現在想要讓目標文檔按照ctexart類型來排版,那麼就需要在其 \(\LaTeX\)
\documentclass{ctexart}
當然,該命令除了指定文檔的排版類型之外,還可以通過一些可選參數來指定文檔的某些排版細節。例如像下面這樣:
\documentclass[12pt,oneside]{ctexart}
在上述命令的中括號裏,參數12pt用於將文檔的字體大小設置為 12 磅(point),而參數oneside則用於指定該文檔將採用單面打印的方式輸出。總體來説,\documentclass命令的可選參數主要可分為以下幾大類:
- 字體與字號參數:用於設置文檔的字體大小,除了之前提到的
12pt外,還包括如下常見選項:
10pt(默認值):適用於一般文檔;11pt:適用於需要稍大字體的論文或報告;14pt,17pt,20pt:部分擴展類支持更大的字號;
需要再次強調的是:14pt、17pt、20pt等較大字號僅在extarticle等擴展類中可用。另外,對於中文類文檔(如 ctexart),也可通過 zihao 參數控制字號,例如:
\documentclass[zihao=-4]{ctexart} % 設置中文字號
這會根據中文字號標準(初號、四號等)調整排版比例,更符合中文出版規範。
- 頁面尺寸參數:用於設置文檔的頁面尺寸,常見選項主要包括:
a4paper:適用於 A4 紙;letterpaper:適用於 US Letter 紙;a5paper:適用於 A5 紙;b5paper:適用於 B5 紙;executivepaper:適用於 Executive 紙;legalpaper:適用於 Legal 紙;
- 頁面佈局參數:用於設置文檔的頁面佈局,常見選項主要包括:
titlepage/notitlepage:控制是否生成獨立標題頁(report和book這兩個類默認採用titlepage,article類默認則不是);openright/openany:控制章節起始頁是否必須在奇數頁(書籍排版常用);twocolumn/onecolumn:雙欄或單欄排版;draft/final:在草稿模式下,LaTeX 會標出溢出行、圖片留空;fleqn/leqno:左對齊公式或在左側編號;
- 打印與裝訂參數:用於設置文檔的打印與裝訂方式,常見選項主要包括:
oneside/twoside:控制單雙面 排版(book類默認採用twoside);landscape:橫向排版(與 PDF 輸出相配合時尤其有用)。
當然,除了上面列出的排版類型及其相關參數之外,一些特定的學術期刊或機構可能會要求我們按照特排版類型來排版,例如IEEEtran、acm_proc_article-sp等。雖然在通常情況下,這些來自第三方的排版類型也只需使用\documentclass命令來指定即可,但在某些特定情況下,如果想讓這些排版類型充分發揮作用,還需通過\usepackage命令來加載它們所通過的功能擴展包,以擴展 \(\LaTeX\)
加載功能擴展包
從程序員的角度,我們可以將 \(\LaTeX\) 排版系統中的\usepackage命令理解成 Python 中的import語句,C/C++ 語言中的#include語句,它們的作用是在當前源文件中引入 \(\LaTeX\) 自帶或者第三方提供的擴展包,以便獲得特定的功能。在 \(\LaTeX\) 語言中,這些擴展包都是以“宏包(package)”的形式提供的,例如amsmath、graphicx、hyperref等。具體來説,就是我們需要在使用\documentclass命令指定了當前文檔所要採用的排版類型之後,就緊接着使用\usepackage命令來加載我們需要的宏包,以便獲得這些宏包提供的擴展功能。
例如,如果我們基於某種靈活性方面的考慮,既想使用標準類article排版,又想在文檔中使用中文,就可以通過\usepackage命令加載ctex這個宏包來實現,像下面這樣:
\documentclass{article}
\usepackage{ctex}
% 其他命令 ...
除此之外,為了達到專業排版效果,我們通常還會推薦加載以下宏包(具體請根據實際需求來進行選擇):
% 基礎
\usepackage{ctex} % 中文支持
\usepackage{geometry} % 頁面設置
% 數學相關
\usepackage{amsmath} % 數學公式擴展
\usepackage{amssymb} % 數學符號擴展
% 圖形相關
\usepackage{graphicx} % 圖片支持
\usepackage{float} % 浮動體
\usepackage{subcaption} % 子圖
% 表格相關
\usepackage{booktabs}
% 超鏈接與引用相關
\usepackage{hyperref} % 超鏈接
\usepackage{cleveref} % 智能引用
% 文獻管理相關
\usepackage{biblatex}
% 微排版相關
\usepackage{microtype}
當然,在加載宏包時,需要注意遵循“少而精”原則:只加載必要宏包即可,以避免發生衝突或冗餘。例如,在上述推薦中,如果我們事前已經加載了ctex宏包,那麼inputenc、fontenc、lmodern這幾個宏包就無需再加載了。因為使用ctex宏包時,我們採用的排版引擎大概率是 XeLaTeX 或 LuaLaTeX,它們已經內置了 UTF-8 編碼、T1 字體編碼以及 Latin Modern 字體,無需再額外加載。
另外,加載宏包也需要特別注意一下加載的順序,因為某些宏包之間存在着特定的依賴關係,對加載的順序是敏感的,例如,我們通常建議先加載數學宏包(amsmath、amssymb),再加載hyperref;而cleveref則必須在hyperref之後加載。總而言之,讀者最好在具體使用之前查閲一下這些宏包的文檔,以瞭解它們之間的依賴關係。
設置頁面版式
之前在介紹\documentclass命令時,我們曾提到過一些與頁面版式相關的可選參數,例如a4paper、twoside、oneside等。這些參數屬於文檔類中的全局配置接口,只能對排版進行一些粗粒度的默認設置,例如採用的紙張類型、單/雙面打印模式等,但並不能精確控制頁面邊距或版心尺寸。
如果希望文檔在閲讀體驗和排版細節上達到專業水準,就需要對頁面佈局進行更精細的控制。通常的做法是先通過\usepackage命令加載名為geometry的宏包,然後再使用\geometry命令設置頁面的具體版式。例如像下面這樣
\documentclass{article}
\usepackage{geometry} % 加載 geometry 宏包
\geometry{
a4paper, % 設置紙張尺寸
left=3cm, % 左頁邊距
right=3cm, % 右頁邊距
top=3cm, % 上頁邊距
bottom=3cm % 下頁邊距
}
與\documentclass命令中的可選參數相比,\geometry命令提供了更細粒度的頁面佈局控制,內容包括頁邊距、版心大小、裝訂線、頁眉頁腳高度等。因此,它廣泛應用於技術文檔、學術論文與書籍排版中。下面,讓我們來看一個用於給專業書籍排版的示例:
\documentclass[12pt,twoside]{book} % 雙面打印常用於書籍排版
\usepackage{geometry}
\geometry{
paper=a5paper, % 書籍常用 A5 尺寸
inner=2.8cm, % 訂口(內側邊距)
outer=2.2cm, % 外側邊距
top=2.5cm, % 上邊距
bottom=2.5cm, % 下邊距
headheight=14pt, % 頁眉高度
headsep=0.8cm, % 頁眉到正文距離
footskip=1.2cm % 頁腳到正文距離
}
在上面這個示例中,我們通過\geometry命令對文檔進行了精確的頁面佈局設置,其中:
- 參數
twoside用於將書籍設置為“奇偶頁鏡像佈局”,即將內側邊距設置得更大一些,以便裝訂。 - 參數
inner/outer是專為雙頁面打印的選項,用於取代參數left/right相對死板的頁邊距設置。 headsep、footskip等參數的作用是用於細調頁眉頁腳與正文間的距離。
通過這種方式,我們可以在維持文檔類整體結構的基礎上,對頁面版式進行專業級的精細化定義。當然,\geometry命令可設置的參數遠不止這些,如果讀者想了解更多該命令的參數,可以查閲該geometry宏包的官方文檔。
另外在 \(\LaTeX\) 語言中,關於版式設置的命令也並不只有\geometry。還包括用於設置行距、頁眉頁腳、分欄等多方面的命令或宏包。下面讓我們來做個簡單的瞭解:
\linespread命令:主要利用行間距調整正文可讀性,常用於論文或技術報告。例如\linespread{1.2}。通常情況下,1.0屬於正常行間距,大於1.0則是選擇拉開行距,小於1.0則屬於緊湊行距。當然,相同的功能也可以通過加載setspace宏包來實現,例如:
\usepackage{setspace}
\singlespacing % 單倍行距
\onehalfspacing % 1.5 倍行距
\doublespacing % 雙倍行距
\pagestyle命令:用於設置頁眉頁腳的樣式,它的參數可以是plain、empty、headings、myheadings等。其中,plain是默認的頁眉頁腳樣式(只顯示頁碼);empty則不顯示頁眉頁腳;headings則會在頁眉中顯示章節標題和頁碼;myheadings則允許用户自定義頁眉內容。同樣的,\pagestyle命令的功能也可以通過加載fancyhdr宏包來得到擴展,例如:
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{} % 清空頁眉頁腳
\fancyhead[L]{左頁眉}
\fancyhead[C]{中頁眉}
\fancyhead[R]{右頁眉}
\fancyfoot[L]{左頁腳}
\fancyfoot[C]{中頁腳}
\fancyfoot[R]{右頁腳}
在上述示例中:
\fancyhf{}命令用於清空頁眉頁腳;\fancyhead命令用於設置頁眉內容;\fancyfoot命令用於設置頁腳內容。[L]、[C]、[R]分別表示左、中、右三個位置。fancy參數表示採用fancyhdr宏包提供的頁眉頁腳樣式。
\twocolumn、\onecolumn命令:用於控制正文是否雙欄排版。例如\twocolumn是雙欄排版,\onecolumn則是單欄排版。\topmargin、\oddsidemargin等命令:它們是傳統 LaTeX 提供的命令,可直接控制頁邊距,例如:
\setlength{\topmargin}{-0.5in}
\setlength{\oddsidemargin}{0.2in}
\setlength{\textwidth}{6in}
\setlength{\textheight}{9in}
請注意:上述命令使用起來不如\geometry命令直觀,很容易出錯,現代文檔推薦使用geometry宏包提供的功能。
除了上面列出的這些命令和相關宏包之外,與版式相關的宏包還包括以下這些,讀者如有需要可以查閲相關文檔:
titlesec:用於設置章節標題樣式;caption:用於設置圖表標題格式;parskip:用於設置段落間的垂直間距;microtype:用於字間距微調,提高排版質量;layout:用於設置可視化頁面佈局;typearea:用於設置頁面版式,與geometry類似,但功能更強大。
設置文檔元信息
在 \(\LaTeX\) 語言中,文檔可設置的元信息取決於其採用的排版類型。例如,就之前提到的article、report、book等文檔類而言,我們分別可通過\title、\author、\date這三個命令來設置文檔的標題、作者與發表日期,這些信息通常會顯示在文檔的標題頁中。例如,如果我們想對張三撰寫的一篇題為“LaTeX 快速入門”的文檔進行排版,就可以像這樣設置它的元信息:
\documentclass[oneside, 12pt, a4paper]{article}
\usepackage{ctex} % 支持中文
% 設置文檔元信息
\title{\LaTeX 快速入門} % 設置文檔標題
\author{張三} % 設置文檔作者,如果有多個作者,可使用“\and”分隔,
% 例如:“張三\and 李四”
\date{\today} % 設置文檔日期,如果不想設置,可以寫 \date{}
% 開始組織文檔內容
\begin{document}
\maketitle % 生成標題頁
\end{document}
上述代碼所設置的這些信息會被保存在 \(\LaTeX\) 內部定義的結構中,並在執行\maketitle時用於排版標題頁。如圖1所示:
除此之外,如果我們還想在文檔的元信息中加入諸如摘要、關鍵字等學術論文中常見的內容,就必須藉助第三方提供的文檔類或宏包來進行擴展了,下面是一些常見實例:
beamer文檔類提供了用於設置副標題(\subtitle命令)、機構(\institute命令)、圖標(\logo命令)等元信息的擴展接口;IEEEtran文檔類提供了用於設置關鍵字(IEEEkeywords環境)、摘要(abstract環境)等元信息的擴展接口;memoir文檔類提供了\publishers、\affiliation、\subject等更豐富的標題頁定製命令,分別用於設置出版商、機構、主題等元信息;
換而言之,如果要設置相對複雜的元信息,需要根據對應文檔所採用的排版類型及其相關的文檔説明來設置,並不存在通用的解決方案。另外,需要額外説明的一點是:標題頁上顯示的元信息(例如 \title命令輸出的內容)與PDF 文件本身的元信息 並不是同一套東西。後者常見於 PDF 閲讀器的“文件屬性”界面,需要使用hyperref宏包來設置,例如:
\usepackage{hyperref}
\hypersetup{
pdftitle={LaTeX 快速入門},
pdfauthor={張三},
pdfsubject={LaTeX 教程},
pdfkeywords={LaTeX, 排版, 入門}
}
這些屬性不會根據\title或\author命令來自動推斷,因此通常需要手動指定。總體來説,\(\LaTeX\):基礎類只提供最小集合,而不同的文檔類和宏包根據場景添加自己的元數據接口。這也是 \(\LaTeX\)
組織文檔內容
一般來説,如果我們需要用到 \(\LaTeX\) 這種複雜的系統來排版一份文檔,那麼該文檔通常會是一篇有相當規模和專業性的作品,例如學術論文、技術報告、出版書籍等。這些作品中往往會包含封標題頁、目錄結構、章節層級、正文段落、插圖、表格、參考文獻等元素。這些元素通常都有着來自出版社、學術機構的,既定且嚴格的格式規範。接下來,我們將以一篇文檔的實際編寫過程為例來逐一介紹這些元素在 \(\LaTeX\)
章節層級設計
在正式開始撰寫一篇文章之前,我們通常需要先擬定相應的寫作大綱。在 \(\LaTeX\) 的排版系統中,這項工作可以通過設計文檔的章節層級來完成。當然,這需要根據我們在定義文檔結構時所選擇的排版類型來進行,因為它們使用到的命令是略有差異的。譬如在之前介紹的標準文檔類中,article類文檔的章節層級通常如下:
- 一級標題:由
\section命令定義。 - 二級標題:由
\subsection命令定義。 - 三級標題:由
\subsubsection命令定義。 - 四級標題(可選):由
\paragraph命令定義。
而在report和book類的文檔中,排版系統在上述命令之外還提供了級別更高的\chapter命令,和級別更低的\subparagraph命令,因此它們的章節層級一般包括:
- 一級標題:由
\chapter命令定義。 - 二級標題:由
\section命令定義。 - 三級標題:由
\subsection命令定義。 - 四級標題:由
\subsubsection命令定義。 - 五級標題(可選):由
\paragraph命令定義。 - 六級標題(可選):由
\subparagraph命令定義。
請注意:在上述標準文檔類中,\paragraph和\subparagraph這兩個命令所顯示的文本屬於 run-in heading(即標題後緊跟着的正文),在默認情況下是不會自動換行的,所以它們更接近“帶標題的段落”。並且,它需手動調整目錄深度後才會被納入目錄。關於目錄的生成,我們稍後會具體介紹。
下面,讓我們以“\(\LaTeX\) 排版示例”為題,來演示一下如何基於article類文檔來設計章節層級,其具體代碼如下:
\documentclass[oneside, 12pt, a4paper]{article}
\usepackage{ctex} % 用於提供中文支持
\usepackage{geometry} % 用於設置頁面版式
% 設置頁面邊距
\geometry{a4paper, left=3cm, right=3cm, top=3cm, bottom=3cm}
% 設置文檔元信息
\title{\LaTeX 排版示例}
\author{凌傑}
\date{\today}
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
\subsection{引言文本}
\subsection{列表項目}
\subsection{註釋説明}
\section{圖表元素示例}
\subsection{插圖元素}
\subsection{表格元素}
\section{專業內容示例}
\subsection{定理證明}
\subsection{數學公式}
\subsection{算法描述}
\subsection{代碼高亮}
\end{document}
而編譯成 PDF 的輸出效果如圖2所示:
在上述示例中,除了之前介紹過的文檔結構定義部分之外(可理解為文檔的全局設置區),我們將用於組織文檔內容的命令都放在了\begin{document} ... \end{document}這個環境定義內。在 \(\LaTeX\) 語言中,文檔內容的定義必須放在這個名為document的環境內,否則編譯器會報錯。這是因為document環境是 \(\LaTeX\)
而在document環境內,我們將文章分成了“正文樣式示例”、“圖表元素示例”和“專業內容示例”三個部分,每個部分都由一個一級標題(\section命令)來定義。每個一級標題下又分別定義了若干個二級標題(\subsection命令),它們共同組成了這篇文章的章節層級。
另外,如果我們在這裏需要調整各章節的標題樣式,可通過加載titlesec宏包。例如,通過下面這段代碼,我們可以將使用\section命令定義的一級標題設置為大號粗體:
% 如果是中文文檔,建議先加載 ctex 宏包
\usepackage{titlesec}
\titleformat{\section}{\Large\bfseries}{\thesection}{1em}{}
% 在 \begin{document} ... \end{document} 之前添加上述代碼
請注意,我們在對專業文檔進行排版時,務必要注意整體排版風格的一致性,原則上不宜隨意混用多種風格,或進行過多的局部細節調整。尤其titlesec宏包與ctex、hyperref這些宏包在搭配處理中文標題時,可能還會出現一些意想不到的問題,更需謹慎使用。如果遇到非用不可的情況,建議先查閲相關文檔,先搞清楚這些宏包的加載順序,以及它們之間的相互影響,再進行嘗試。
正文內容排版
在確定了寫作大綱之後,接下來就可以在這些既定的章節標題下面按部就班地填寫正文內容了。下面,就讓我們繼續以“\(\LaTeX\) 排版示例”這篇文章為例,來介紹如何使用 \(\LaTeX\)
正文段落
在 \(\LaTeX\)
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
這是一段正文,它沒有特殊的樣式,我們只需直接寫在章節標題下面即可。在這裏繼續添加文本,豐富一些內容以展示段落效果。
這是另一段正文,它也沒有特殊的樣式,它與上一段正文之間用空行分割即可。在這裏繼續添加文本,豐富一些內容以展示段落效果。
\subsection{引言文本}
\subsection{列表項目}
\subsection{註釋説明}
\section{圖表元素示例}
\subsection{插圖元素}
\subsection{表格元素}
\section{專業內容示例}
\subsection{定理證明}
\subsection{數學公式}
\subsection{算法描述}
\subsection{代碼高亮}
\end{document}
現在,如果我們重新編譯這段代碼,就可以看到“正文段落”這個二級標題下面已經出現了兩個普通的正文段落,如圖3所示:
值得一提的是,\(\LaTeX\) 默認是不對每個章節下的第一個正文段落進行首行縮進的,但提供中文支持的ctex宏包更改了這一默認設置,因此在中文文檔中,我們通常需要手動添加\noindent命令來取消首行縮進。例如,如果我們想取消上面第一段的首行縮進,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
\noindent 這是一段正文,它沒有特殊的樣式,我們只需直接寫在章節標題下面即可。在這裏繼續添加文本,豐富一些內容以展示段落效果。
這是另一段正文,它也沒有特殊的樣式,它與上一段正文之間用空行分割即可。在這裏繼續添加文本,豐富一些內容以展示段落效果。
%... 省略後續內容
\end{document}
另外,在普通的正文段落中,我們有時候也需要通過加粗、斜體、下劃線等樣式來突出某些重點內容,這些樣式可以分別通過\textbf{加粗強調}、\textit{斜體強調}和\underline{下劃線強調}這三個命令來實現。例如,如果我們想在上面的段落示例中添加一些強調效果,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
\noindent 這是一段正文,它沒有特殊的樣式,我們只需\textbf{直接寫在章節標題下面}即可。在這裏繼續添加文本,豐富一些內容以展示段落效果。
這是另一段正文,它也沒有特殊的樣式,它\textit{與上一段正文之間用空行分割}即可。在這裏\underline{繼續添加文本,豐富一些內容以展示段落效果}。
%... 省略後續內容
\end{document}
如果我們此刻再次編譯這段代碼,就可以看到上述段落中已經出現了加粗、斜體和下劃線三種強調效果,如圖4所示:
需要注意的是,\underline命令在中文換行時的表現並不好,所以最好避免使用它強調大段的中文文本。另外,在 \(\LaTeX\)
最後,如果我們想額外調整普通文本段落的行間距和段間距,就需要使用\setlength、\linespread命令來進行更為精細的設置。例如,如果我們想特別設置一下上述段落的行間距和段間距,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
\linespread{1.5}
\setlength{\parskip}{2em}
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
\noindent 這是一段正文,它沒有特殊的樣式,我們只需\textbf{直接寫在章節標題下面}即可。在這裏繼續添加文本,豐富一些內容以展示段落效果。
這是另一段正文,它也沒有特殊的樣式,它\textit{與上一段正文之間用空行分割}即可。在這裏\underline{繼續添加文本,豐富一些內容以展示段落效果。。
%... 省略後續內容
\end{document}
當然以上只是做個演示,我們在大多數情況下並不鼓勵讀者局部地去調整正文的行間距和段間距,因為 \(\LaTeX\) 系統會自動根據文檔內容來調整這些參數,以達到最佳的閲讀效果。如果讀者真的有這方面的需求,可以去查閲這兩個命令或setspace宏包的詳細文檔,瞭解它們的用法和注意事項。
除了強調性的文本之外,我們有時還會需要在正文中設置一些超鏈接文本元素,以便讀者可以快速跳轉到一些指定的段落、圖表或外部資源,這就需要通過加載hyperref宏包來實現。例如,如果我們想上述段落中插入一個能跳轉到 TeX Live 官方網站的超鏈接,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
\usepackage{hyperref}
% 對超鏈接進行一些基本設置
\hypersetup{
colorlinks=true, % 將超鏈接文本設置為彩色
linkcolor=blue, % 將超鏈接文本的顏色設置為藍色
citecolor=blue, % 將引用文本的顏色設置為藍色
urlcolor=blue, % 將超鏈接地址的顏色設置為藍色
pdfauthor={凌傑}, % 設置 PDF 文檔的作者信息
pdftitle={\LaTeX 排版示例} % 設置 PDF 文檔的標題信息
}
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
\noindent 這是一段正文,它沒有特殊的樣式,我們只需\textbf{直接寫在章節標題下面}即可。在這裏繼續添加文本,豐富一些內容以展示段落效果。
這是另一段正文,它也沒有特殊的樣式,它\textit{與上一段正文之間用空行分割}即可。在這裏\underline{繼續添加文本,豐富一些內容以展示段落效果}。
我們還可以在正文中插入一個能跳轉到 \href{https://www.tug.org/texlive/}{TeX Live 官方網站}的超鏈接。
%... 省略後續內容
\end{document}
如果我們此刻再次編譯這段代碼,就可以看到上述段落中已經出現了一個能跳轉到 TeX Live 的超鏈接,如圖5所示:
需要注意的是,在 \(\LaTeX\) 排版系統中,超鏈接文本在默認情況下會以紅色方框的樣式顯示,這是hyperref宏包的標準行為。如果我們希望取消該默認樣式並以彩色文字顯示,就需要在全局設置中使用\hypersetup命令設置colorlinks=true選項。另外,超鏈接文本的默認顏色是紅色,如果希望超鏈接文本能以其他顏色顯示,就需要像我們在上面所做的那樣,為其指定特定的顏色。
引言文本
在寫作過程中,我們經常會需要以引言的形式借用第三方的言論來增強文章的説服力。在 \(\LaTeX\) 語言中,我們可以通過定義一個名為quote環境來設置引言形式的文本。這種形式的文本會自動呈現出相對於其他文本進行左右縮進的排版效果。例如,如果我們想在上述文章中的“引言文本”這個二級標題下面添加一段引言,並以右對齊的方式聲明引言的出處,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
%... 省略之前的正文段落內容
\subsection{引言文本}
\noindent 下面將顯示的是一段引言文本的示例:
\begin{quote}
\textit{“\LaTeX 是一種排版系統,它使用TeX排版引擎,並遵循一套文檔類和宏包的規範,以實現文檔的自動化排版。”}
{\raggedleft -- 高德納(Donald E. Knuth) \par}
\end{quote}
%... 省略後續內容
\end{document}
在上述示例中,我們首先使用了\begin{quote} ... \end{quote}這個環境定義設置了一段引言文本。在quote環境內部,我們可以使用普通的文本命令(如\textit{}、\underline{}等)來設置這段文本的樣式。接下來,我們用\raggedleft命令將引言的來源設置成了右對齊的文本,與引言正文保持一定的間距(這裏使用\hfill命令也可以實現相同的效果)。最後,我們使用\par命令結束了\raggedleft命令的使用效果,以防它的排版效果意外影響到其他文本。
當然,quote環境通常只用於設置單一段落的引言文本,如果需要設置包含多個自然段的較長文本,quotation環境可能是更合適的選擇。例如,如果我們想繼續在之前的引言後面再引用來自維基百科的兩段文本,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
\subsection{正文段落}
% 省略之前的正文段落內容
\subsection{引言文本}
% 省略之前的引言文本內容
\noindent 下面是一個較長的引用文本示例:
\begin{quotation}
\textit{
“Leslie Lamport 在 1980 年代初期開發了 LaTeX 系統,以簡化 TeX 的使用。LaTeX 提供了一套宏和命令,使用户能夠專注於文檔內容,而無需過多關注排版細節。LaTeX 迅速成為學術界和技術文檔撰寫的標準工具,尤其在數學、計算機科學等領域得到了廣泛應用。
LaTeX 的設計理念強調結構化文檔和內容優先,這使得它在處理複雜文檔時表現出色。通過使用各種宏包,用户可以輕鬆地擴展 LaTeX 的功能,以滿足不同的排版需求。今天,LaTeX 已經發展成為一個龐大的生態系統,擁有豐富的資源和活躍的社區支持。”
}
{\raggedleft -- 維基百科(Wikipedia) \par}
\end{quotation}
%... 省略後續內容
\end{document}
現在,如果我們再次編譯這個文檔,就可以看到“引言文本”這個二級標題下面已經出現了上面所設置的那兩個引言單元,如圖6所示:
除此之外,如果讀者還想設置排版更為專業的引言文本,可能就需要通過加載csquotes、epigraph這類第三方提供的宏包來實現了。關於這方面的操作,讀者可參照它們的文檔説明來進行。我們在這裏就不再繼續展開了。
列表元素
在寫作過程中,我們有時會需要以列表的形式展示一些有序或無序的選項、步驟或要點內容。在 \(\LaTeX\) 語言中,我們可以分別通過itemize、enumerate、description這三個環境來設置相應的列表元素。例如,如果我們想在上述文章中的“列表元素”這個二級標題下面添加一個有序列表、一個無序列表以及一個描述列表,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
% 省略之前的章節
\subsection{列表項目}
\noindent 下面是一個有序列表的示例:
\begin{enumerate}
\item 第一個選項
\item 第二個選項
\item 第三個選項
\end{enumerate}
\noindent 下面是一個無序列表的示例:
\begin{itemize}
\item 第一個選項
\item 第二個選項
\item 第三個選項
\end{itemize}
\noindent 下面是一個描述列表的示例:
\begin{description}
\item[第一個選項] 這是第一個選項的描述內容
\item[第二個選項] 這是第二個選項的描述內容
\item[第三個選項] 這是第三個選項的描述內容
\end{description}
%... 省略後續內容
\end{document}
在上述示例中,我們分別使用了\begin{enumerate} ... \end{enumerate}、\begin{itemize} ... \end{itemize}、\begin{description} ... \end{description}這三個環境來設置有序列表、無序列表以及描述列表。在列表內部,我們可以使用\item命令來定義每個列表項的內容。需要注意的是,在description環境中,每個列表項的內容前面會自動加上一個描述標籤,我們可以通過\item[標籤名]命令來設置這個標籤的名稱。
如果讀者還想設置更為複雜的多層次列表,就需要通過嵌套定義另一個名為enumerate的環境來實現了。該環境在默認情況下最多允許我們嵌套定義四層列表,\(\LaTeX\)
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
% 省略之前的章節
\subsection{列表項目}
% 省略之前的列表內容
\noindent 下面是一個多層次列表的示例:
\begin{enumerate}
\item 第一個選項
\item 第二個選項
\item \begin{enumerate}
\item 第一個選項
\item 第二個選項
\item \begin{enumerate}
\item 第一個選項
\item 第二個選項
\item 第三個選項
\end{enumerate}
\end{enumerate}
\end{enumerate}
%... 省略後續內容
\end{document}
如你所見,我們在上述示例中選套定義了四個enumerate環境,分別對應三層嵌套的多層次列表。在默認情況下,\(\LaTeX\)
現在,如果我們再次編譯這個文檔,就可以看到“列表項目”這個二級標題下面已經出現了四種不同的列表單元,如圖7所示:
註釋説明
在寫作過程中,我們有時還會需要對特定的內容添加一些註釋説明,以幫助讀者更好地理解文檔內容。在 \(\LaTeX\) 語言中,我們可以通過\footnote{}命令來設置腳註,或者通過\marginpar{}命令來設置邊注。例如,如果我們想在上述文章中的“註釋説明”這個二級標題下面分別添加一段被腳註和邊注的文本,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
\marginparwidth=2cm % 設置邊注的寬度
\marginparsep=0.2cm % 設置邊注與正文的間距
% 開始組織文檔內容
\begin{document}
\section{正文樣式示例}
% 省略之前的章節
\subsection{註釋説明}
\noindent 這是一段要被腳註的文本。
\footnote{這是腳註的內容。}
\noindent 這是一段要被邊注的文本。
\marginpar{這是右側邊注內容。}
%... 省略後續內容
\end{document}
在上述示例中,我們首先使用\footnote{}命令設置了一段腳註內容。在腳註內部,我們可以使用普通的文本命令(如\textit{}、\underline{}等)來設置這段文本的樣式。接下來,我們使用\marginpar{}命令設置了一段邊注內容。在邊注內部,我們同樣可以使用普通的文本命令來設置這段文本的樣式。需要注意的是,在設置邊注之前,我們需要先在文檔的全局設置區使用\marginparwidth命令來設置邊注的寬度,並通過\marginparsep命令來設置邊注與正文的間距。
現在,如果我們再次編譯這個文檔,就可以看到“註釋説明”這個二級標題下面已經出現了上面所設置的腳註和邊注,如圖8所示:
需要提醒讀者的是,在加載了ctex宏包的中文文檔中,\marginpar命令所設置邊注的具體位置可能受版面佈局影響而出現偏移;如需更穩定的邊注佈局,使用marginnote宏包會個更好的選擇。關於這方面的操作,讀者可參照marginnote宏包的文檔説明來進行。我們在這裏就不再繼續展開了。
標題頁與目錄
在 \(\LaTeX\) 排版系統中,完成針對文檔內容的排版後,我們通常會為其添加一個標題頁(也可以理解為封面),並根據它的章節層級為其自動生成一個目錄。其中,用於生成標題頁的命令為\maketitle,而生成目錄的命令則是\tableofcontents。例如,如果我們想在上述文章中添加一個標題頁和一個目錄,就可以像下面這樣寫:
% 省略之前的文檔結構定義部分
% 開始組織文檔內容
\begin{document}
\maketitle % 添加標題頁
\tableofcontents % 添加目錄
\newpage % 添加分頁符
\section{正文樣式示例}
% 省略之前的章節
\subsection{註釋説明}
% 省略之前的註釋説明
%... 省略後續內容
\end{document}
如你所見,我們在\begin{document}命令之後,章節層級的定義之前的位置上添加了三條命令。首先,\maketitle命令用於自動根據我們之前設置的文檔元信息來生成標題頁。接下來,\tableofcontents命令則會根據\section{}、\subsection{}等命令所定義的章節層級來自動生成文檔的目錄。最後,\newpage命令用於在目錄與正文之間添加一個分頁符,以便讓正文內容從新的一頁開始。
另外在默認情況下,目錄所涉及的章節層級只有三級,如果讀者想涉及到更多或更少的章節層級,就需要在文檔的全局設置區使用\setcounter{tocdepth}{層級數}命令來設置目錄的層級深度,例如像下面這樣:
% 省略之前的文檔結構定義部分
\setcounter{tocdepth}{2} % 設置目錄的層級深度
% 開始組織文檔內容
\begin{document}
\maketitle % 添加標題頁
\tableofcontents % 添加目錄
\section{正文樣式示例}
% 省略之前的章節
\subsection{註釋説明}
% 省略之前的註釋説明
%... 省略後續內容
\end{document}
在上述示例中,我們使用\setcounter{tocdepth}{4}命令將目錄的層級深度設置為4級。現在,如果我們再次編譯這個文檔,就可以看到“正文樣式示例”這個一級標題下面已經出現了上面所設置的標題頁和目錄,如圖9所示:
筆記小結
在本篇筆記中,我們主要介紹了 \(\LaTeX\) 語言中的一些基本排版功能,包括文檔的排版結構、標題樣式、正文樣式、列表元素、註釋説明、標題頁與目錄。通過這些排版功能,我們可以方便地設置出一篇純文本文檔的排版結構、樣式以及內容。