《LaTeX Notes》


《LaTeX Notes》

1. TeX家族

第一章參考:網站

1.1 TeX - LaTeX

TeX 是高德納(Donald Ervin Knuth,1938 年 1 月 10 日 -)教授憤世嫉俗(大霧;追求完美)做出來的排版引擎,同時也是該引擎使用的標記語言(Markup Lang)的名稱。

所謂的引擎,是指能夠實現斷行、分頁等操作的程序(請注意這並不是定義);
所謂的標記語言,是指一種將控制命令和文本結合起來的格式,它的主體是其中的文本而控制命令則實現一些特殊效果(同樣請注意這並不是定義)。

而 LaTeX 則是 L. Lamport (1941 年 2 月 7 日 — ) 教授開發的基於 TeX 的排版系統。
實際上 LaTeX 利用 TeX 的控制命令,定義了許多新的控制命令並封裝成一個可執行文件。
這個可執行文件會去解釋 LaTeX 新定義的命令成為 TeX 的控制命令,並最終交由 TeX 引擎進行排版。

實際上,LaTeX 是基於一個叫做 plain TeX 的格式的。
plain TeX 是高德納教授為了方便用戶,自己基於原始的 TeX 定義的格式,但實際上 plain TeX 的命令仍然十分晦澀。
至於原始的 TeX 直接使用的人就更少了,因此 plain TeX 格式逐漸就成為了 TeX 格式的同義詞,盡管他們事實上是不同的。

因此在 TeX - LaTeX 組合中:

  • 最終進行斷行、分頁等操作的,是 TeX 引擎;

  • LaTeX 實際上是一個工具,它將用戶按照它的格式編寫的文檔解釋成 TeX 引擎能理解的形式並交付給 TeX 引擎處理,再將最終結果返回給用戶。

1.2 pdfTeX - pdfLaTeX

TeX 系統生成的文件是 dvi 格式,雖然可以用其他程序將其轉換為例如 pdf 等更為常見的格式,但是畢竟不方便。

dvi 格式是為了排版而產生的,它本身並不支持所謂的“交叉引用”,pdfTeX 直接輸出 pdf 格式的文檔,這也是 pdfTeX 相對 TeX 進步(易用性方面)的地方。

為了解決這個問題,Hàn Thế Thành 博士在他的博士論文中提出了 pdfTeX 這個對 TeX 引擎的擴展。
二者最主要的差別就是 pdfTeX 直接輸出 pdf 格式文檔,而 TeX 引擎則輸出 dvi 格式的文檔。

pdfLaTeX 這個程序的主要工作依舊是將 LaTeX 格式的文檔進行解釋,不過此次是將解釋之后的結果交付給 pdfTeX 引擎處理。

1.3 XeTeX - XeLaTeX

高德納教授在實現 TeX 的當初並沒有考慮到中日韓等字符的處理,而只支持 ASCII 字符
ASCII 字符簡單理解,就是在半角模式下你的鍵盤能直接輸出的字符。

但是,這並不是說中日韓字符就無法使用 TeX 引擎排版。
事實上, TeX 將每個字符用一個框包括起來(這被稱為盒子),然后將一個個的盒子按照一定規則排列起來,因而 TeX 的算法理論上適用於任何字符。

在 XeTeX 出現之前,為了能讓 TeX 系統排版中文,國人曾使用了 天元、CCT、CJK 等手段處理中文。
其中 天元和 CCT 現在已經基本不用,CJK 因為使用時間長且效果相對較好,現在還有人使用。

不同於 CJK 等方式使用 TeX 和 pdfTeX 這兩個不直接支持 Unicode 字符的引擎,XeTeX 引擎直接支持 Unicode 字符。
也就是說現在不使用 CJK 也能排版中日韓文的文檔了,並且這種方式要比之前的方式更加優秀。

XeLaTeX 和 XeTeX 的關系與 pdfLaTeX 和 pdfTeX 的關系類似,這里不再贅述。

使用 XeTeX 引擎需要使用 UTF-8 編碼。

1.4 CTeX - MiKTeX - TeX Live

之前介紹了 TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX 等,他們都是 TeX 家族的一部分。

但是作為一個能夠使用的 TeX 系統,僅僅有他們還是不夠的。

CTeX, MiKTeX, TeX Live 都是被稱為“發行”的軟件合集。
他們包括了上述各種引擎的可執行程序,以及一些文檔類、模板、字體文件、輔助程序等等。

其中 CTeX 是建立在 MiKTeX 的基礎之上的。

2. 入門

2.1 Hello, World!

% hello_world.tex
\documentclass{article}
\begin{document}
Hello, World!
\end{document}

在TeXstudio編譯后,文件夾里會自動生成pdf。
也可以手動在終端編譯:xelatex hello_world生成pdf。.tex后綴可忽略。

2.2 語法和結構

語法

LaTeX源文件的語句分為3種:

  1. 命令command,又分為普通命令和環境environment

  2. 數據,即普通內容

  3. 注釋comment,以%起始

普通命令以\起始,大多只有一行;環境包含配對的起始和結尾聲明,一般是多行。二者可以互相嵌套。

回到原程序:

% hello_world.tex 注釋
\documentclass{article} %普通命令
\begin{document} % 環境的起始聲明
Hello, World! % 數據
\end{document} % 環境的結尾聲明

物理結構

LaTeX文檔的結構可以分為:

  1. 物理結構:源文件的組織形式,包括序言preamble和正文;

  2. 邏輯結構:最終輸出文檔的結構,包括標題、目錄、章節等。

序言:用以完成一些設置,如指定文檔類型,引入宏包,定義命令、環境等。
正文:文檔的實際內容。

基本結構:

\documentclass[options]{class} % 文檔類聲明
\usepackage[options]{package} % 引入宏包
...
\begin{document} % 正文
...
\end{document}

常用的文檔類documentclass有3種:

  1. article

  2. report

  3. book

基本選項有:

1

宏包的意義類似於include和import,引入除LaTeX核心基本功能外的其他豐富功能。

邏輯結構

基本結構如下:

\title{LaTeX Notes} % 標題
\author{Alpha Huang} % 作者
\data{\today} % 日期
\maketitle % 必須放最后

在3種常用文檔類中,article和report可以有摘要,book沒有。
摘要用法:

\begin{abstract}
...
\end{abstract}

LaTeX提供了7種層次結構,高級結構可以包含若干低級結構。
report和book支持所有層次,article不含chapter結構。
層次結構如下:

\part{...} % level -1
\chapter{...} % level 0
\section{...} % level 1
\subsection{...} % level 2
\subsubsection{..} % level 3
\paragraph{...} % level 4
\subparagraph{...} % level 5

我們也可以生成目錄,還可以指定目錄深度。
舉例:

\seccounter{tocdepth}{2} % 設定深度2,即最多細化到subsection 注意該命令在前
\tableofcontents % 產生目錄

初次使用目錄,或層次結構發生變化時,需要執行兩次編譯,才能獲得正確結果。
之所以這樣設計,是因為當時內存不夠,需要分布執行。

如果不想讓特定的層次出現,我們可以加上星號再命令:

\chapter*{...} % level 0
\section*{...} % level 1
\subsection*{...} % level 2
\subsubsection*{..} % level 3

類似地,插圖和表格的目錄也可以生成:

\listoffigures
\listoftables

也需要編譯兩次。

2.3 文字

文檔內容可以分為:

  1. 文本模式:缺省工作方式

  2. 數學模式:需要特殊命令或環境

字符輸入

特殊字符輸入,需要在前面加一個\

\# \$ \^ \& \_ \{ \} \~ \%

\本身要用以下方式:

\textbackslash

因為\\是換行符。

下面2表給出了特殊符號和預定義字符串,以及注音符號的輸入方法:

2

其中\XeTeX, \XeLaTeX命令需要metalogo宏包,\MF, \MP命令需要mflogo宏包,\AmS命令需要texnames宏包。

更多符號參見:網站

LaTeX中由3種划線:

  1. 短划線hypen:用來連接單詞
  2. 中划線en-dash:用來連接數字 重復2次短划線得到
  3. 長划線em-dash:中文破折號 重復3次短划線得到

重復1次短划線是數學減號,形似中划線。

字體樣式和大小

拉丁文字體主要有3大類:

  1. 襯線字體roman, serif 類似於中文宋體等,邊緣有修飾

  2. 無襯線字體sansserif 類似於中文黑體

  3. 等寬字體monospace, typewriter

字體:

  1. 粗體bold

  2. 半粗體medium weight

  3. 斜體italic

  4. 偽斜體oblique, slanted 僅傾斜不修飾,用於無襯線字體

  5. 小型大寫字母small caps

3

字體強調命令:\emph
如果周圍文字是正體,那么強調結果就是斜體;反之就是正體。

下划線命令:\underline
但它不能正確斷字。
ulem宏包改進了斷字,還增加了刪除線、波浪號等功能。

5

但ulem宏包把\emph重定義為下划線。為此,我們可以改回去:

\usepackage[normalem]{ulem}

LaTeX會根據正文字體大小來調整:標題、章節、上下標、腳注等字號。
我們可以用下表命令來調整字體的相對尺寸:

4

比如,當使用\tiny命令時,若正文大小是10pt,則tiny字號就是5pt。

換行、換頁和斷字

LaTeX會自動換行。
我們可以用\\\newline命令強制換行,用\newpage命令來強制換頁。

LaTeX也會自動斷字hyphenate,使字間距分布均勻。
在英文文章的排版中,hyphenation是很重要的,特別是當行尾的單詞很長的時候,如果不作斷字,把單詞都放在當前行就顯得擠,新起一行就顯得松。
有時我們需要指明斷字位置。比如我們指明'BASIC'不能斷開,而blarblar可以只可以斷成blar-blar:

\hyphenation{BASIC, blar-blar}

2.4 長度

6

最后一列都是相對單位,

LaTeX定義了一系列宏變量,方便排版對象的尺寸和位置,特別是重復使用時非常方便:

\newlength{name} % 定義新變量
\setlength{name} % 設置變量值


\addtolength{name} % 增加變量的值

2.5 對齊和間距

段落對齊

段落缺省為兩端對齊fully justified,以下3個環境可以讓段落分別完成3種對齊:

7

此外還有3個命令:\raggedright, \centering, \raggedleft

縮進和段間距

正文中第一個段落,缺省不縮進首行。
我們可以用identfirst宏包,使第一段也縮進首行。
縮進距離和段落間距分別由\parindent\parskip變量控制:

\usepackage{identfirst}
...
\setlength{\parindent}{2em}
\addtolength{\parskip}{3pt}

行間距

行間距:段落中相鄰兩行基線之間的距離。
缺省使用單倍行距。
我們可以用\linespread命令來控制行距:

\linespread{1.3} % 一倍半行距
\linespread{1.6} % 兩倍行距

注意,該命令不僅改正文行距,同時也會把目錄、腳注、圖表標題等行距統統改了。
如果只想改正文行距,可以用setspace宏包的行距命令:

\usepackage{setspace}
...
\singlespacing % 單倍行距
\onehalfspacing % 1.5倍行距
\doublespacing % 雙倍行距
\setstretch{1.25} % 任意行距

如果想修改局部文字的行距,可以使用由該宏包提供的環境:

8

2.6 特殊段落

摘錄

LaTeX中由3種摘錄環境:

  1. quote:兩端都縮進

  2. quotation:兩端都縮進且首行縮進

  3. verse:兩端都縮進且第二行起縮進

原文打印

文檔中命令和源代碼通常使用等寬字體,即原文打印。
正文中插入少量等寬文字,可采用 \verb命令;
大段原文打印,采用verbatim環境較好。其帶星號版本可標出空格:

9

腳注

腳注可以使用\footnote命令。

如果要改變編號形式,可采取如圖命令:

10

footnote是一種counter。
我們還會遇到其他計數器,它們都有同樣的方法修改顯示格式:

11

邊注

P26.

注釋

小段文字用百分號,大段文字用verbatim宏包的comment環境:

\begin{comment}
...
\end{comment}

2.7 列表

基本列表

LaTeX有3種基本列表:

12

其他列表

上述列表的缺省行間距較大,如果要節省空間,可以考慮paralist宏包:

13

定制列表

P29.

2.8 盒子

P29-P30.

2.9 交叉引用

我們可以設置一個標簽,引用其編號或頁碼。例:

14

第一次編譯會失敗,第二次才成功。

3. 字體

字體有3個層次:

  1. 編碼層,涉及字符集和字符編碼。

  2. 格式層,如字形的定義描述方法和字體文件存儲格式。

  3. 顯示層。

之所以這么復雜,是因為TeX設計之初,編碼、字符集和字體格式都很少。

本章內容參見P33-41。

4. 數學

為了使用AMS-LaTeX提供的數學功能,我們需要在文檔的序言部分加載amsmath宏包:

\usepackage{amsmath}

4.1 數學模式

LaTeX的數學模式有2種:

  1. 行間inline:在正文中插入

  2. 獨立display:獨立排列,有或無編號

簡單輸入方法:

15

無編號獨立公式建議用\[...\],因為$$...$$與AMS-LaTeX有沖突。

4.2 基本元素

希臘字母

16

注意,如果希臘字母是大寫的,其命令首字母也是大寫的。

上下標和根號

17

分數

命令是\frac
它會根據環境自動調整字號。比如在行間較小,在獨立公式中較大。
可以使用\dfrac\tfrac命令,強制其字號同獨立公式或行間公式:

18

運算符

\(+ - * / =\)等可以直接輸入,其他的需要特殊命令:

19

20

其中\quad是空格。
這些符號的上下標在行間公式中會被壓縮,以適應行高。
\limits\nolimits可以顯式地壓縮上下標,看例子。

更多的參見:網站

如果要追求完美,自己定義格式,那么可以這么操作:

21

對於多重積分,多個\int顯然太寬了。
正確的方法是:\iint, \iiint, \idotsint等。

箭頭

22

數學注音和標注

23

24

分隔符

25

其中,調整分隔符的方法是\big, \Big, \bigg等命令。

省略號

dots:位置較低的省略號,一般用於有下標的序列。
cdots:位置正常居中的省略號。

空白間距

26

4.3 矩陣

可以用array環境來生成矩陣。
它提供了外部對齊和列對齊控制參數。

外部對齊:整個矩陣和周圍對象的縱向關系,有3種:

  1. 居中:缺省,c

  2. 居頂:t

  3. 居底:b

列對齊也是3種,分別是:

  1. 居中:c

  2. 居左:l

  3. 居右:r

&\\分別用來分隔行和列。

27

amsmath宏包的pmatrix, bmatrix, Bmatrix等環境,可以在矩陣兩邊加上各種分隔符,注意沒有對齊方式參數:

28

最后的smallmatrix是行間矩陣。

4.4 多行公式

長公式

長公式就是一行寫不下的公式,既可以不考慮對齊(multline環境):

29

也可以考慮對齊(split環境):

30

公式組

同理,既可以考慮對齊(gather環境),也可以考慮對齊(align環境):

31

帶星號版本不生成編號。

分支公式

cases環境:

32

4.5 定理和證明

我們首先定義定理、定義等環境:

33

然后再使用這些環境:

34

4.6 數學字體

以下是常用數學字體:

35

\mathbb\mathfrak需要amsfonts宏包,\mathscr需要mathrsfs宏包。

5. 插圖

5.1 圖形概述

LaTeX支持點陣圖像格式JPEG和PNG,也支持矢量格式EPS和PDF。
矢量圖可以無限縮放而輸出質量不變,並且所占空間較小。

對於示意圖,我們應首選矢量格式;
對於包含大量自然色彩的圖片(如照片),我們應首選JPEG;
人工點陣圖像首選PNG。

有下面4種驅動:

  1. dvips:只支持EPS。

  2. pdflatex:支持JPEG,PNG和PDF,不支持EPS。
    LaTeX宏包:epstopdf和pst-pdf可以實時地將EPS轉成PDF,但有bug,建議事先轉成PDF。

  3. dvipdfm(x):dvipdfm也不支持EPS,但可以實時調用Ghostscipt將EPS轉為PDF。dvipdfmx對圖形格式的支持增強,並且支持BMP。

  4. xdvipdfmx:XeLaTeX的缺省驅動,基本都支持。

最常用的分辨率單位:像素/英寸pixels per inch, PPI。
比如,有一副\(100 \times 150\)像素的點陣圖片,分辨率為100PPI。
在輸出時,其缺省尺寸就是\(100/100 \quad in \times 150/100 \quad in\)
如果強制輸出為\(2in \times 3in\),那么實際分辨率就會降至50PPI。

當圖形分辨率和輸出分辨率不一致時,就涉及降采樣和上采樣。
插值算法中,Lanczos算法效果最好,但速度慢。

圖形分辨率適可而止,太大體積也大。
對於屏幕閱讀,72PPI即可;
考慮到放大,150PPI足夠;
高質量打印,需要300PPI。

如果要在LaTeX文檔中嵌入一幅圖形,通欄情況下寬度為4.8-5.4in。
如果只是屏幕閱讀,400px足夠。
若要放大閱讀或打印,分別需要800px和1600px。

5.2 插入圖形

范圍框

由於歷史原因,LaTeX編譯程序不能提取JPEG,PNG等點陣圖形的尺寸信息。
因此,在處理它們時,引擎需要范圍框bounding box

對於矢量圖形,尺寸就沒有太大意義了。
但對於EPS,有個缺省尺寸還是比較方便的,這就是它的范圍框。

范圍框格式:左上角坐標+右下角坐標,見下例。

有了范圍框,LaTeX在編譯源文件時,就只需要為插圖預留空間:輸出的.dvi只記錄圖形尺寸和文件名,而不記錄具體圖片:由驅動負責。
因此,沒有范圍框,LaTeX就會報錯。

dvipdfm附帶的ebb程序可以檢查JPEG和PNG,生成范圍框文件:同名.bb。
但用ebb生成范圍框有個缺點:它懶得理會真正的分辨率,直接用100PPI計算。

基本命令

插圖命令基本用法如下:

\usepackage[dvipdfm]{graphicx} % 宏包是graphicx,驅動是dvipdfm
\includegraphics[bb=0 0 300 200]{fig.png}

使用latex,pdflatex和xelatex時,缺省驅動分別是dvips,pdftex和xetex,因此可以不加該選項。

使用pdflatex和xelatex不要加范圍框參數。

圖形操作

\includegraphics命令有一些參數選項,用於縮放等操作:

36

說明:

  1. 若不設置任何尺寸參數,latex將按范圍框處理,pdflatex按缺省輸出尺寸處理。

  2. scale盡量不要用。

  3. XeTeX目前不支持裁剪。

37

38

文件名和路徑

39

第一行指定后綴,讓編譯程序自行查找;
第二行指出后綴都是EPS;
后三行設置缺省搜索路徑,分別是絕對、相對和多個路徑。

路徑不能有空格。

figure環境

figure環境可以調整插圖的位置。
這種自動調整位置的環境,我們稱之為浮動環境float

40

htbp就是插圖的位置選項,分別代表:here, top, bottom, float page。

\centering是讓插圖居中,\caption用來設置標題。
一定要注意,\label應放在標題之后,否則引用的將是一個結構對象。

插入多幅圖形

如果需要共享標題,那么我們要用到figure環境中的\includegraphics命令,並且用兩次:

41

如果標題各異,那么就要在figure環境中使用兩個minipage環境:

42

其中,\hspace調整兩個minipage之間的距離。3個\centering中,第一個是讓整體居中。

43

如果還需要共享一個大標題,那么就需要subfig宏包的\subfloat命令:

44

上面的問題是,子標題變成了多行。
原因在於\subfloat命令缺少寬度參數。
我們的辦法是:在\subfloat中嵌套\minipage,后者可以設置寬度。

45

5.3 矢量繪圖

參見P71-74。

6. 表格

6.1 簡單表格

tabular環境提供了最簡單的表格功能。
\hline命令表示橫線,|表示豎線,l c r表示對齊方式:

46

與圖形中的figure環境類似,表格也有常用的浮動環境:table。
其標題設置、交叉引用等也是類似的。
使用table,我們可以把表格變成三線表。

如果嫌三條橫線一樣粗不好看,我們可以用booktabs宏包中的\toprule\midrule\bottomrule來表示三條橫線:

47

縱向缺省為居中對齊。

6.2 寬度控制

如果我們想控制列的寬度,只需要在對齊方式后加上列寬:

48

此時縱向對齊方式必須是居頂,內容缺省居左對齊。
我們可以用列前置命令:>{}配合\centering\raggedleft等,來實習居中或居右:

49

如要控制整個表格的寬度,則需要用tabularx宏包的同名環境。

6.3 跨行跨列

跨列直接用\multicolumn命令,跨特定列的橫線用booktabs宏包的\cmidrule命令,如圖:

1

跨行要使用multirow宏包的\multirow命令。語法相同。

6.4 數字表格

當表格中包含數字時,對齊小數點和數位是一件麻煩的事。

為此,我們可以使用warpcol宏包為tabular環境提供的對齊參數P:

50

2和5分別是小數點前、后的位數。負號可選。
\multicolumn是橫跨單元命令。之所以用橫跨,是為了保護表頭,避免其被P誤傷。

需要跨頁的長表格、需要翻轉的寬表格、彩色表格等,參見P113~。

7. 結構

7.1 長文檔

如果一篇文檔很長,我們可以分解其為多個文件,逐個編寫。

下例示范了如何在主控文檔中引用子文檔:

51

注意,每一個文件都會新起一頁。
如果不想新起,應該將\include改為\input

7.2 標題

52

注意第二章介紹的文檔類控制選項:notitlepagetitlepage,可以控制標題是否獨占一頁。

缺省情況下,article文檔類的標題和正文混居一頁,其余二者都是獨占。

7.3 目錄

參見P122。

7.4 參考文獻

Thebibliography

LaTeX中最原始的方法是:用thebibliography環境和\bibtem命令來定義參考文獻。

53

例中9是編號的寬度。如果有幾十個條目,可以改為99。

該環境一般用於末尾。在正文中,我們用\cite命令引用:

54

其他的引用效果,需要借助Natbib宏包。見參考教程10.4.3節。

BibTeX

上述方法的問題是:用戶要自己調整顯示格式,這樣做容易出錯還很麻煩。

為此,我們可以用數據庫文件:.bib記錄參考文獻條目,用樣式文件.bst設置顯示格式。普通用戶一般不需要改動樣式文件。

這樣做繼承了LaTeX內容與格式分離的思想。

每種類型的參考文獻有不同的選項,參見P125。
如圖就是上例的.bib數據:

55

編輯.bib文件可以用普通的文本編輯器,但最好用文獻管理網站(如Google Scholar)直接輸出。

下圖是4種基本樣式:

56

在使用時,我們先選定樣式,再輸出:

57

含參考文獻的文檔需要執行4次編譯操作,流程見P127。

其余內容不再贅述。

8. 布局

在LaTeX中,每一個排版對象都是一個盒子。
頁面是最大的盒子。
排版,就是要把小盒子,用空白間距粘在一起,然后放到大盒子里。
依次嵌套。
怎么優化這些大小盒子呢?

8.1 頁面尺寸

關於A B C的來歷很有趣,參見P133。

58

59

8.2 分欄

支持雙欄的選項:

\documentclass[twocolumn]{article}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM