Latex排版學習筆記(3)——latex基礎教程

Lavi_qq_2910138025發表於2020-04-05

優雅的 LaTeX

有很多 Geeks 或者 LaTeX’s Fanatical Fans 過分地強調了 LaTeX 的一些並非重點的特性,以至於很多初學者會覺得 LaTeX 很神祕很複雜,從而引發了初學者的畏難情緒甚至是負面情緒。儘管這些 Fans 說得並沒有錯,我是說在事實上,但是他們的表達方式和內心態度卻間接阻礙了 LaTeX 的發展,我想這也是和他們的初衷相悖的。

我曾經也受到過這些言論的影響,但幸運的事,至今為止我已經越過了這些障礙,並更加堅信了他們所言(LaTeX 的優點)的正確性。因此我想以我自己的方式,向更多的人介紹 LaTeX —— 這個優雅,但有著自己高傲,卻絕不復雜甚至神祕的東西

歡迎從校內轉移過來的同學們,因為校內的技術原因,文章無法在校內繼續更新。儘管非我之故,但還是給各位同學說聲抱歉。同時,歡迎各位來到我的部落格。: )

你將從這裡看到

  1. (幾乎是)最簡潔的 (La)TeX 編輯器——TeXworks——的基本使用方法;
  2. 如何使用 (Xe)LaTeX 進行簡單的中英混排
  3. 簡單的文章組織結構;
  4. 如何用 (Xe)LaTeX 進行數學公式的排版;
  5. 如何在 (Xe)LaTeX 的文件中插入圖片/表格;
  6. 如何進行簡單的版面設定;
  7. 幾個最常見的帶有 TeX 的單詞的含義;
  8. 出現問題應當如何處理/怎樣聰明地提出你的問題——怎樣從這裡畢業。

你不會從這裡看到

  1. 如何安裝 TeX 發行
  2. 特殊需求(特殊巨集包)的解決方法;
  3. 關於若干 TeX 發行的好壞比較;
  4. 關於各種 TeX 編輯器的好壞比較;
  5. 過多的廢話。

你應當如何閱讀本文

事實上本文在行文過程中,會有相當多的提示幫助你以正確的方式閱讀。因此有必要在此先介紹一下最常用的一些標記。

  1. 斜體:使用斜體 意味著如果忽略掉這些文字,你可能在邏輯 上很難理解後面某處的知識;
  2. 粗體:使用粗體意味如果忽略掉這些文字,你可能在TeX 的概念上很難理解後面某處的知識;
  3. 粗斜體:使用粗斜體 基本是最重要的部分,是上述兩種情況的合併;
  4. 引用:使用引用,

    表明這些文字在你第一次閱讀本文的時候不需要 瞭解,其中的內容可能過於深奧,或者過於瑣碎。對於第一次接觸 TeX 的你(如果你是 TeX 資深使用者當然不在此列),如果瞭解到這些內容可能會使你困惑,並且不會從實際上增加你對 TeX 的領悟以及對 TeX 的好感。

關於編輯器的簡單介紹

流行的 TeX 發行,比如 CTeX 和 TeX Live, 都自帶有一些用於編輯文件的編輯器。這些編輯器差異還是很大的,從簡單的 TeXworks 到複雜的 WinEdt, 各種各樣。但是不管是什麼樣的編輯器,他們都是用來編輯純文字的而已(.tex 就是純文字),換言之他們只是 Windows 自帶的記事本程式的加強版而已,他們本身並不是 TeX 系統的一部分

所謂 TeX 發行,也叫 TeX 發行版、TeX 系統或者 TeX 套裝,指的是包括 TeX 系統的各種可執行程式,以及他們執行時需要的一些輔助程式和巨集包文件的集合。

國內的同學安裝 CTeX 套裝的比較多,CTeX 套裝自帶的編輯器,除了大家熟知的 WinEdt,還有 TeXworks。而 TeX Live 則只是自帶了 TeXworks 而已。

本文只介紹 TeXworks 編輯器的使用。原因有二:

  • WinEdt 過於繁瑣,很多功能用不上,反而給新手增加學習成本;
  • TeXworks 是 TeX Live 自帶的編輯器,而 TeX Live 是跨平臺的,各個作業系統都可以使用;
  • 不管是用 TeX Live 還是 CTeX 套裝又或是 MiKTeX(Windows 平臺上另一個 TeX 系統),都有 TeXworks。

啟動 TeXworks

啟動 TeXworks 很簡單,不論你安裝的是 CTeX 套裝還是 TeX Live, 你都可以在 Windows 啟動對話方塊中輸入 texworks 按回車。具體步驟是:

  • 按下鍵盤上的 Windows 徽標鍵,同時按下 R 鍵 —— <Win> + R;
  • 鍵入 texworks
  • 回車。

如果這樣打不開 TeXworks,你可能需要從開始選單找到 TeXworks 圖示以啟動;或者進入 TeX 系統的安裝目錄找到 TeXworks。

啟動之後,TeXworks 的介面,會預設佔據你螢幕的左半邊,右半邊留空。效果如下圖:

圖中空白的部分,就是輸入編輯文字的編輯框;在編輯框的右下角,顯示有三個按鈕,最左邊的是換行符模式,中間是編碼模式,右邊標示當前游標所在位置;編輯框的上方是工具欄,工具欄的右半部分使大家熟悉的功能(新建、開啟、儲存、撤消、恢復、剪下、複製、黏貼、查詢、替換),工具欄的左邊則是編譯按鈕 (TeXworks 也稱其為「排版工具」);工具欄在往上,則是選單欄,此處按下不表。

Windows,Unix 等作業系統對待「換行符」是有不同的。索性 TeXworks 為我們做了足夠的提示,方面我們的選擇(點選一下那個按鈕就知道了)。一般而言,保持預設即可。

字元(包括英文字元和中文字元)在計算機中,經過編碼以二進位制的形式儲存在計算機中。如果編輯器編碼和計算機內部編碼不一致,則會導致所謂「亂碼」的現象。TeXworks 預設使用 UTF8 編碼,在我們的文件中不需要進行任何更改,而對於一些其他的文件可能需要按照要求更改編碼。

排版工具

TeXworks 為我們預設了若干排版工具(pdfTeX, pdfLaTeX, XeTeX, XeLaTeX 等),他們分別代表什麼實在太過複雜並且也不是當前需要講明白的。本文中需要用到的排版工具主要是 XeLaTeX,關於這些工具的介紹,可以參看後文。當你對 TeX 系統相當熟悉之後,也可以不適用 TeXworks 預設的工具,自己配置排版工具。

TeXworks 預設的排版工具是 pdfLaTeX,如果你希望更改這個預設值,可以在編輯 - 首選項 - 排版 - 處理工具 - 預設中修改。

第一篇文件

Hello, world!

在編輯框中,輸入如下內容:

helloworld.tex
1
2
3
4
5
\documentclass{article}
%這裡是導言區
\begin{document}
Hello, world!
\end{document}

將文件儲存在你希望的位置,然後在排版工具的下拉選框中選中 XeLaTeX 後,按下綠色的編譯按鈕。一會兒,如果沒有意外,螢幕的右邊就會出現編譯之後結果。如下圖:

請注意,在 Windows 平臺上,TeX 涉及到的檔案(包括 .tex.jpg 等各類檔案),最好都不要包含中文名字,或者包含空格。否則,可能引起意想不到的問題。

很容易發現,輸入進編輯框的五行文字,在最終輸出的 pdf 檔中只顯示了 1 行。事實上,交付 TeX 處理的文件內容,並不會全部輸出。

此處的第一行 \documentclass{article} 中包含了一個控制序列(或稱命令/標記)。所謂控制序列,是以反斜槓\開頭,以第一個空格或非字母 的字元結束的一串文字,他們並不被輸出,但是他們會影響輸出文件的效果。這裡的控制序列是 documentclass,它後面緊跟著的 {article} 代表這個控制序列有一個必要的引數,該引數的值為 article。這個控制序列的作用,是呼叫名為 “article” 的文件類。

請注意,TeX 對控制序列的大小寫是敏感的

部分控制序列還有被方括號[]包括的可選引數。

所謂文件類,即是 TeX 系統預設的(或是使用者自定的)一些格式的集合。不同的文件類在輸出效果上會有差別。

此處的第二行以 % 開頭。在 TeX 風格的文件中,從 “%” 開始,到該行末尾的所有字元,都會被 TeX 系統無視,只作為供人類閱讀的註釋。除非在 “%” 前加上反斜槓來取消這一特性,例如

1
今年的淨利潤為20\%, 比去年高。

此處 “%” 被當做正常的百分號處理,其後的文字也將被正常輸出。

其後出現了控制序列 begin,這個控制序列總是與 end 成對出現。這兩個控制序列以及他們中間的內容被稱為「環境」;他們之後的第一個必要引數總是一致的,被稱為環境名。

只有在 “document” 環境中的內容,才會被正常輸出到文件中去或是作為控制序列對文件產生影響。也就是說,在 \end{document} 之後插入任何內容都是無效的。

\begin{document} 與 \documentclass{article} 之間的部分被稱為導言區。導言區中的控制序列,通常會影響到整個輸出文件。

比如,我們通常在導言區設定頁面大小、頁首頁尾樣式、章節標題樣式等等。

實現中英文混排

關於 LaTeX 的中文支援,首先要說的是:在現在,一切教你使用 CJK 巨集包的模板、人、網頁、書,都是糟糕的、有害的、惱人的、邪惡的和應該摒棄的。

除掉成功生成第一個文件,實現中文輸出(或者說是中英文混排)恐怕是困擾中國的 TeX 使用者的第二個普遍問題。眾所周知,TeX 系統是高教授開發的,當初並沒有考慮到亞洲文字的問題。因此早期的 TeX 系統並不能直接支援中文,必須要用其他工具先處理一下(或者是一些巨集包之類的)。

但是現在,XeTeX 原生支援 Unicode,並且可以方便地呼叫系統字型。可以說解決了困擾中國 TeX 使用者多年的大問題。至此,我們只需要使用幾個簡單的巨集包,就能完成中文支援了。所謂巨集包,就是一系列控制序列的合集。這些控制序列太常用,以至於人們會覺得每次將他們寫在導言區太過繁瑣,於是將他們打包放在同一個檔案中,成為所謂的巨集包(臺灣方面稱之為「巨集套件」)。\usepackage{·}可以用來呼叫巨集包。

除去中文支援,中文的版式處理和標點禁則也是不小的挑戰。好在由吳凌雲和江疆牽頭,現在主要由劉海洋、李清和我維護的 CTeX 巨集集一次性解決了這些問題。CTeX 巨集集的優勢在於,它適用於多種編譯方式;在內部處理好了中文和中文版式的支援,隱藏了這些細節;並且,提供了不少中文使用者需要的功能介面。我們來看如何使用 CTeX 巨集集來處理中英文混排的文件。

請注意,CTeX 巨集集和 CTeX 套裝是兩個不同的東西。CTeX 巨集集本質是 LaTeX 巨集的集合,包含若干文件類(.cls 檔案)和巨集包(.sty 檔案)。CTeX 套裝是一個 TeX 系統。

新版 CTeX 巨集集的預設能夠自動檢測使用者的作業系統,併為之配置合適的字型檔。對於 Windows 使用者、Mac OS X 使用者和 Linux 使用者,都無需做任何配置,就能使用 CTeX 巨集集來排版中文。[2015-05-20 更新]

在 TeXworks 編輯框中輸入以下內容,以 UTF-8 編碼儲存,使用 XeLaTeX 編譯

EC-mix.tex
1
2
3
4
\documentclass[UTF8]{ctexart}
\begin{document}
你好,world!
\end{document}

如果沒有意外,你將會看到類似下圖的輸出結果。

相較於之前的例子,這份程式碼只有細微的差異:

  1. 文件類從 article 變為 ctexart
  2. 增加了文件類選項 UTF8

你也可以直接使用 xeCJK 巨集包來支援中英文混排。不過大多數情況是不推薦這樣做的。因此,如果你能抑制住你小小的好奇心,可以暫時略過這一段,回頭再看不遲。:)

在 TeXworks 編輯框中輸入以下內容,儲存,使用 XeLaTeX 編譯:

xeCJK-demo.tex
1
2
3
4
5
6
7
\documentclass{article}
\usepackage{xeCJK} %呼叫 xeCJK 巨集包
\setCJKmainfont{SimSun} %設定 CJK 主字型為 SimSun (宋體)
\begin{document}
你好,world!
\end{document}
>

如果一切順利,你將會在螢幕右邊的視窗,看見類似下圖的輸出結果。

除了 “document” 環境中同時出現了中文和英文,和最原始的 Hello, world! 不同點在於,導言區中多出了兩條控制序列。他們的作用我已經用註釋標出了。

\setCJKmainfont{·}是定義在 “xeCJK” 巨集包中的控制序列,它可以用來設定 CJK 主字型。

如果你的 TeX 系統提示找不到字型,請按以下提示操作。

Mac OS X 使用者請參照這篇部落格 中的方法,使用系統自帶的字型冊程式來檢視系統字型。

非 Mac OS X 使用者請按照如下步驟開啟系統命令列(*nix系統請開啟終端):

  • 按下<win> + R
  • 鍵入cmd, 回車。

在系統命令列中輸入如下命令:

fc-list :lang=zh-cn > C:\font_zh-cn.txt

(相信使用 *nix 的你,一定知道如何修改上述命令達到你想要的效果)

開啟 C 盤根目錄下的 C:\font_zh-cn.txt 純文字文件,裡面的內容就是你當前系統可用的全部中文字型,形如:

每一個小黑框之間的內容,就對應著一個可用的字型。這些小黑框實際上是換行符,但是由於 Windows 系統的原因,他們沒有被正常顯示。如果看著不爽,你可以嘗試用 TeXworks 開啟這個檔案檢視(放心,能夠開啟的)。以下是我用 gVim 開啟的效果:

其中的每一行,都代表著一個可用的字型。其形式如下:

<字型檔案路徑>: <字型標示名1>, <字型表示名2>:Style=<字型型別>

我們可以看到圖中的倒數第四行

C:/WINDOWS/fonts/simsun.ttc: 宋體,SimSun:style=Regular

出現了之前文件裡呼叫的字型SimSun,此處表明該字型有兩個表示名:宋體SimSun,我們在\setCJKmainfont{·}中填入任意一個都有同樣的效果。

因此,如果之前的文件無法編譯通過,請在你的作業系統字型中,選取一個自己喜歡的,將它的字型表示名填入到\setCJKmainfont{·}中去。

組織你的文章

由於新的中英混排方法的引入,這裡對於每一個效果提供兩份程式碼(如果有必要)。如果沒有特別的需求,應當使用新方法。

作者、標題、日期

儲存並用 XeLaTeX 編譯如下文件,檢視效果:

1
2
3
4
5
6
7
8
\documentclass[UTF8]{ctexart}
\title{你好,world!}
\author{Liam}
\date{\today}
\begin{document}
\maketitle
你好,world!
\end{document}

導言區複雜了很多,但和之前的文件主要的區別只有一處:定義了標題、作者、日期。

在 document 環境中,除了原本的你好,world!,還多了一個控制序列 maketitle。這個控制序列能將在導言區中定義的標題、作者、日期 按照預定的格式展現出來。

使用titling巨集包可以修改上述預設格式。參考TeXdoc.

章節和段落

儲存並用 XeLaTeX 編譯如下文件,檢視效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
\documentclass[UTF8]{ctexart}
\title{你好,world!}
\author{Liam}
\date{\today}
\begin{document}
\maketitle
\section{你好中國}
中國在East Asia.
\subsection{Hello Beijing}
北京是capital of China.
\subsubsection{Hello Dongcheng District}
\paragraph{Tian'anmen Square}
is in the center of Beijing
\subparagraph{Chairman Mao}
is in the center of 天安門廣場。
\subsection{Hello 山東}
\paragraph{山東大學} is one of the best university in 山東。
\end{document}

在文件類 article/ctexart 中,定義了五個控制序列來調整行文組織結構。他們分別是

  • \section{·}
  • \subsection{·}
  • \subsubsection{·}
  • \paragraph{·}
  • \subparagraph{·}

report/ctexrep中,還有\chapter{·};在文件類book/ctexbook中,還定義了\part{·}

插入目錄

在上一節的文件中,找到 \maketitle,在它的下面插入控制序列 \tableofcontents,儲存並用 XeLaTeX 編譯兩次,觀察效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\documentclass[UTF8]{ctexart}
\title{你好,world!}
\author{Liam}
\date{\today}
\begin{document}
\maketitle
\tableofcontents
\section{你好中國}
中國在East Asia.
\subsection{Hello Beijing}
北京是capital of China.
\subsubsection{Hello Dongcheng District}
\paragraph{Tian'anmen Square}
is in the center of Beijing
\subparagraph{Chairman Mao}
is in the center of 天安門廣場。
\subsection{Hello 山東}
\paragraph{山東大學} is one of the best university in 山東。
\end{document}

試試交換 \maketitle 和 \tableofcontents 的順序,看看會發生什麼,想想為什麼。

請注意,在「你好中國」這一節中,兩次「中國在East Asia.」中夾有一個空行,但輸出卻只有一個換行並沒有空行。這是因為 LaTeX 將一個換行當做是一個簡單的空格來處理,如果需要換行另起一段,則需要用兩個換行(一個空行)來實現。

插入數學公式

首先恭喜你看到這裡。如果前面的幾個文件你都認真編譯過了,那麼你已經可以勝任許多文件的排版工作。下面我們進入 LaTeX 最為犀利的部分。

這部分的演示中,為了節省篇幅,將取消導言區中中文支援的部分。在實際使用中,你只需要將導言區中的相關部分加上,就可以同時使用中文,並編寫數學公式了——這並不衝突。

為了使用 AMS-LaTeX 提供的數學功能,我們需要在導言區載入 amsmath 巨集包:

1
\usepackage{amsmath}

數學模式

LaTeX 的數學模式有兩種:行內模式 (inline) 和行間模式 (display)。前者在正文的行文中,插入數學公式;後者獨立排列單獨成行,並自動居中。

在行文中,使用 $ ... $ 可以插入行內公式,使用 \[ ... \] 可以插入行間公式,如果需要對行間公式進行編號,則可以使用 equation 環境:

1
2
3
\begin{equation}
...
\end{equation}

行內公式也可以使用 \(...\) 或者 \begin{math} ... \end{math} 來插入,但略顯麻煩。
無編號的行間公式也可以使用 \begin{displaymath} ... \end{displaymath} 或者 \begin{equation*} ... \end{equation*} 來插入,但略顯麻煩。(equation* 中的 * 表示環境不編號)
也有 plainTeX 風格的 $$ ... $$ 來插入不編號的行間公式。但是在 LaTeX 中這樣做會改變行文的預設行間距,不推薦。請參考我的回答

上下標

示例程式碼(請儲存後,使用 XeLaTeX 編譯,檢視效果):

1
2
3
4
5
6
7
8
9
10
11
\documentclass{article}
\usepackage{amsmath}
\begin{document}
Einstein 's $E=mc^2$.

\[ E=mc^2. \]

\begin{equation}
E=mc^2.
\end{equation}
\end{document}

在這裡提一下關於公式標點使用的規範。行內公式和行間公式對標點的要求是不同的:行內公式的標點,應該放在數學模式的限定符之外,而行間公式則應該放在數學模式限定符之內。

在數學模式中,需要表示上標,可以使用 ^ 來實現(下標則是 _)。它預設只作用於之後的一個字元,如果想對連續的幾個字元起作用,請將這些字元用花括號 {} 括起來,例如:

1
\[ z = r\cdot e^{2\pi i}. \]

根式與分式

根式用 \sqrt{·} 來表示,分式用 \frac{·}{·} 來表示(第一個引數為分子,第二個為分母)。

示例程式碼(請儲存後,使用 XeLaTeX 編譯,檢視效果):

1
2
3
4
5
6
7
8
9
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$\sqrt{x}$, $\frac{1}{2}$.

\[ \sqrt{x}, \]

\[ \frac{1}{2}. \]
\end{document}

可以發現,在行間公式和行內公式中,分式的輸出效果是有差異的。如果要強制行內模式的分式顯示為行間模式的大小,可以使用 \dfrac, 反之可以使用 \tfrac

在行內寫分式,你可能會喜歡 xfrac 巨集包提供的 \sfrac 命令的效果。

排版繁分式,你應該使用 \cfrac 命令。

運算子

一些小的運算子,可以在數學模式下直接輸入;另一些需要用控制序列生成,如

1
2
\[ \pm\; \times \; \div\; \cdot\; \cap\; \cup\;
\geq\; \leq\; \neq\; \approx \; \equiv \]

連加、連乘、極限、積分等大型運算子分別用 \sum\prod\lim\int生成。他們的上下標在行內公式中被壓縮,以適應行高。我們可以用 \limits 和 \nolimits 來強制顯式地指定是否壓縮這些上下標。例如:

1
2
3
4
$ \sum_{i=1}^n i\quad \prod_{i=1}^n $
$ \sum\limits _{i=1}^n i\quad \prod\limits _{i=1}^n $
\[ \lim_{x\to0}x^2 \quad \int_a^b x^2 dx \]
\[ \lim\nolimits _{x\to0}x^2\quad \int\nolimits_a^b x^2 dx \]

多重積分可以使用 \iint\iiint\iiiint\idotsint 等命令輸入。

1
\[ \iint\quad \iiint\quad \iiiint\quad \idotsint \]

定界符(括號等)

各種括號用 ()[]\{\}\langle\rangle 等命令表示;注意花括號通常用來輸入命令和環境的引數,所以在數學公式中它們前面要加 \。因為 LaTeX 中 | 和 \| 的應用過於隨意,amsmath 巨集包推薦用 \lvert\rvert和 \lVert\rVert 取而代之。

為了調整這些分隔符的大小,amsmath巨集包推薦使用 \big\Big\bigg\Bigg 等一系列命令放在上述括號前面調整大小。

1
2
3
4
5
6
7
8
9
\[ \Biggl(\biggl(\Bigl(\bigl((x)\bigr)\Bigr)\biggr)\Biggr) \]
\[ \Biggl[\biggl[\Bigl[\bigl[[x]\bigr]\Bigr]\biggr]\Biggr] \]
\[ \Biggl \{\biggl \{\Bigl \{\bigl \{\{x\}\bigr \}\Bigr \}\biggr \}\Biggr\} \]
\[ \Biggl\langle\biggl\langle\Bigl\langle\bigl\langle\langle x
\rangle\bigr\rangle\Bigr\rangle\biggr\rangle\Biggr\rangle \]
\[ \Biggl\lvert\biggl\lvert\Bigl\lvert\bigl\lvert\lvert x
\rvert\bigr\rvert\Bigr\rvert\biggr\rvert\Biggr\rvert \]
\[ \Biggl\lVert\biggl\lVert\Bigl\lVert\bigl\lVert\lVert x
\rVert\bigr\rVert\Bigr\rVert\biggr\rVert\Biggr\rVert \]

省略號

省略號用 \dots\cdots\vdots\ddots 等命令表示。\dots 和 \cdots 的縱向位置不同,前者一般用於有下標的序列。

1
2
\[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad
\vdots\quad \ddots \]

矩陣

amsmath 的 pmatrixbmatrixBmatrixvmatrixVmatrix 等環境可以在矩陣兩邊加上各種分隔符。

1
2
3
4
5
\[ \begin{pmatrix} a&b\\c&d \end{pmatrix} \quad
\begin{bmatrix} a&b\\c&d \end{bmatrix} \quad
\begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad
\begin{vmatrix} a&b\\c&d \end{vmatrix} \quad
\begin{Vmatrix} a&b\\c&d \end{Vmatrix} \]

效果圖:

使用 smallmatrix 環境,可以生成行內公式的小矩陣。

1
Marry has a little matrix $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $.

效果圖:

多行公式

有的公式特別長,我們需要手動為他們換行;有幾個公式是一組,我們需要將他們放在一起;還有些類似分段函式,我們需要給它加上一個左邊的花括號。

長公式

不對齊

無須對齊的長公式可以使用 multline 環境。

1
2
3
4
\begin{multline}
x = a+b+c+{} \\
d+e+f+g
\end{multline}

效果:

如果不需要編號,可以使用 multline* 環境代替。

對齊

需要對齊的公式,可以使用 aligned 次環境來實現,它必須包含在數學環境之內。

1
2
3
4
\[\begin{aligned}
x ={}& a+b+c+{} \\
&d+e+f+g
\end{aligned}\]

效果圖:

公式組

無需對齊的公式組可以使用 gather 環境,需要對齊的公式組可以使用 align 環境。他們都帶有編號,如果不需要編號可以使用帶星花的版本。

1
2
3
4
5
6
7
8
\begin{gather}
a = b+c+d \\
x = y+z
\end{gather}
\begin{align}
a &= b+c+d \\
x &= y+z
\end{align}

效果:

請注意,不要使用 eqnarray 環境。原因可以參考:

分段函式

分段函式可以用cases次環境來實現,它必須包含在數學環境之內。

1
2
3
4
\[ y=\ begin{cases}
-x,\quad x\leq 0 \\
x,\quad x>0
\end{cases} \]

效果圖:

插入圖片和表格

圖片

關於 LaTeX 插圖,首先要說的是:「LaTeX 只支援 .eps 格式的圖檔」這個說法是錯誤的。

在 LaTeX 中插入圖片,有很多種方式。最好用的應當屬利用 graphicx 巨集包提供的 \includegraphics 命令。比如你在你的 TeX 原始檔同目錄下,有名為 a.jpg 的圖片,你可以用這樣的方式將它插入到輸出文件中:

1
2
3
4
5
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{a.jpg}
\end{document}

圖片可能很大,超過了輸出檔案的紙張大小,或者乾脆就是你自己覺得輸出的效果不爽。這時候你可以用 \includegraphics 控制序列的可選引數來控制。比如

1
\includegraphics[width = .8\textwidth]{a.jpg}

這樣圖片的寬度會被縮放至頁面寬度的百分之八十,圖片的總高度會按比例縮放。

\includegraphics 控制序列還有若干其他的可選引數可供使用,一般並用不到。感興趣的話,可以去檢視該巨集包的文件

表格

tabular 環境提供了最簡單的表格功能。它用 \hline 命令表示橫線,在列格式中用 | 表示豎線;用 & 來分列,用 \\ 來換行;每列可以採用居左、居中、居右等橫向對齊方式,分別用 lcr 來表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
\begin{tabular}{|l|c|r|}
 \hline
作業系統& 發行版& 編輯器\\
 \hline
Windows & MikTeX & TexMakerX \\
 \hline
Unix/Linux & teTeX & Kile \\
 \hline
Mac OS & MacTeX & TeXShop \\
 \hline
通用& TeX Live & TeXworks \\
 \hline
\end{tabular}

效果:

浮動體

插圖和表格通常需要佔據大塊空間,所以在文書處理軟體中我們經常需要調整他們的位置。figure 和 table 環境可以自動完成這樣的任務;這種自動調整位置的環境稱作浮動體(float)。我們以 figure 為例。

1
2
3
4
5
6
\begin{figure}[htbp]
\centering
\includegraphics{a.jpg}
\caption{有圖有真相}
\label{fig:myphoto}
\end{figure}

“htbp” 選項用來指定插圖的理想位置,這幾個字母分別代表here, top, bottom, float page,也就是就這裡、頁頂、頁尾、浮動頁(專門放浮動體的單獨頁面) 。\centering 用來使插圖居中;\caption 命令設定插圖示題,LaTeX 會自動給浮動體的標題加上編號。注意 \label 應該放在標題命令之後。

圖片和表格的各種特殊效果,限於篇幅此處無法詳敘。請檢視最後一章推薦的文件。

如果你困惑於「為什麼圖表會亂跑」或者「怎樣讓圖表不亂跑」,請看我的回答

版面設定

頁邊距

設定頁邊距,推薦使用 geometry 巨集包。可以在這裡檢視它的說明文件。

比如我希望,將紙張的長度設定為 20cm、寬度設定為 15cm、左邊距 1cm、右邊距 2cm、上邊距 3cm、下邊距 4cm,可以在導言區加上這樣幾行:

1
2
3
\usepackage{geometry}
\geometry{papersize={20cm,15cm}}
\geometry{left=1cm,right=2cm,top=3cm,bottom=4cm}

頁首頁尾

設定頁首頁尾,推薦使用 fancyhdr 巨集包。可以在這裡檢視它的說明文件。

比如我希望,在頁首左邊寫上我的名字,中間寫上今天的日期,右邊寫上我的電話;頁尾的正中寫上頁碼;頁首和正文之間有一道寬為 0.4pt 的橫線分割,可以在導言區加上如下幾行:

1
2
3
4
5
6
7
8
9
10
11
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\author}
\chead{\date}
\rhead{152xxxxxxxx}
\lfoot{}
\cfoot{\thepage}
\rfoot{}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\headwidth}{\textwidth}
\renewcommand{\footrulewidth}{0pt}

首行縮排

CTeX 巨集集已經處理好了首行縮排的問題(自然段前空兩格漢字寬度)。

不使用 CTeX 巨集集(使用 xeCJK 巨集包)的話,請遵照以下提示操作。

中國人寫文章,習慣每一段的段首都空出兩個中文漢字的長度。美國人沒有這個習慣,他們每一小節的段首都頂格。為了解決這個問題,我們可以在導言區呼叫 \usepackage{indentfirst}.

就算是這樣,首行縮排的長度,仍然不符合中國人的習慣。我們可以在導言區新增這樣的控制序列 \setlength{\parindent}{\ccwd} 來調整首行縮排的大小。這裡的 \ccwd 是當前字號下一個中文漢字的寬度。

行間距

我們可以通過 setspace巨集包提供的命令來調整行間距。比如在導言區新增如下內容,可以將行距設定為字號的 1.5 倍:

1
2
\usepackage{setspace}
\onehalfspacing

具體可以檢視該巨集包的文件

請注意用詞的差別:

  • 行距是字號的 1.5 倍;
  • 1.5 倍行距。

事實上,這不是設定 1.5 倍行距的正確方法,請參考:http://liam0205.me/2013/10/17/LaTeX-Linespace/

段間距

我們可以通過修改長度 \parskip 的值來調整段間距。例如在導言區新增以下內容

1
\addtolength{\parskip}{.4em}

則可以在原有的基礎上,增加段間距 0.4em。如果需要減小段間距,只需將該數值改為負值即可。

TeX 家族

恭喜你終於看到了這裡。如果你認真完成了上面所有的練習,並琢磨了其中的意義,相信你已經可以用 LaTeX 排版出漂亮的文件了。現在我們說一點歷史,幫助你更好地理解 TeX 這個系統。

帶有 TeX 的詞,僅僅是本文就已經提到了 TeX, LaTeX, XeLaTeX。通常中國學生面對不瞭解意思的一群形近單詞,都會有一種「本能的恐懼」(笑~)。
因此,「大神們」在為新手介紹 TeX 的時候,如果互相爭論 「XXTeX 比 YYTeX 好」或者是「XXTeX 的 YYTeX 如何如何」,往往會蹦出下面這些帶有 TeX 的詞彙:
TeX, pdfTeX, XeTeX, LuaTeX, LaTeX, pdfLaTeX, XeLaTeX …

事實上,這部分的內容太過複雜,我自己的瞭解也實在有限。所以下面這部分的內容也只能是對我瞭解到的知識的一個概括,甚至可能有些許謬誤。所以大家只需要將這部分的內容當做是一個參考就可以了。

TeX - LaTeX

TeX 是高德納(Donald Ervin Knuth,1938年1月10日 –)教授憤世嫉俗(大霧;追求完美)做出來的排版引擎,同時也是該引擎使用的標記語言(Markup Lang)的名稱。這裡所謂的引擎,是指能夠實現斷行、分頁等操作的程式(請注意這並不是定義);這裡的標記語言,是指一種將控制命令和文字結合起來的格式,它的主體是其中的文字而控制命令則實現一些特殊效果(同樣請注意這並不是定義)。

你可以在這裡找到關於 TeX 引擎的具體描述;

你可以在這裡找到關於標記語言的具體描述。

而 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 組合中,

  1. 最終進行斷行、分頁等操作的,是 TeX 引擎;
  2. LaTeX 實際上是一個工具,它將使用者按照它的格式編寫的文件解釋成 TeX 引擎能理解的形式並交付給 TeX 引擎處理,再將最終結果返回給使用者。

pdfTeX - pdfLaTeX

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

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

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

pdfTeX 的資訊可以檢視wiki.

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

XeTeX - XeLaTeX

高德納教授在實現 TeX 的當初並沒有考慮到中日韓等字元的處理,而只支援 ASCII 字元。這並不是說中日韓字元就無法使用 TeX 引擎排版了,事實上 TeX 將每個字元用一個框包括起來(這被稱為盒子)然後將一個個的盒子按照一定規則排列起來,因而 TeX 的演算法理論上適用於任何字元。ASCII 字元簡單理解,就是在半形模式下你的鍵盤能直接輸出的字元。

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

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

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

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

所謂編碼就是字元在計算機儲存時候的對應關係。例如,假設有一種編碼,將漢字「你」對應為數字「1」;「好」對應為數字「2」,則含有「你好」的純文字檔案,在計算機中儲存為「12」(讀取檔案的時候,將「12」再轉換為「你好」顯示在螢幕上或列印出來)。

UTF-8 編碼是 Unicode 編碼的一種,可以參考它的 wiki.

LuaTeX

LuaTeX 是正在開發完善的一個 TeX 引擎,相對它的前輩們還相當的不完善,這裡不贅述。

CTeX - MiKTeX - TeX Live

之前介紹了 TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX 等,他們都是 TeX 家族的一部分。但是作為一個能夠使用的 TeX 系統,僅僅有他們還是不夠的。CTeX, MiKTeX, TeX Live 都是被稱為「發行」的軟體合集。他們包括了上述各種引擎的可執行程式,以及一些文件類、模板、字型檔案、輔助程式等等。其中 CTeX 是建立在 MiKTeX 的基礎之上的。

總結

TeX - pdfTeX - XeTeX - LuaTeX 都是排版引擎,按照先程式度遞增(LuaTeX 尚未完善)。

LaTeX 是一種格式,基於 TeX 格式定義了很多更方便使用的控制命令。上述四個引擎都有對應的程式將 LaTeX 格式解釋成引擎能處理的內容。

CTeX, MiKTeX, TeX Live 都是 TeX 的發行,他們是許許多多東西的集合。

出現問題應當如何處理/怎樣聰明地提出你的問題——怎樣從這裡畢業

這篇文章原來的名字叫做慢慢愛上 LaTeX,後來行文的過程中發覺 LaTeX 實在是有太多的內容可以講述,越發地沒有把握讓大家僅僅通過這一篇短小的文章就喜歡上 LaTeX,於是改成了現在這個名字。

限於篇幅,還有我的精力,這篇文章事實上還有許多的問題沒有講明白。它僅僅是提供了一些,在你學習使用 LaTeX 可能遇到的問題的解決方案,並不完全,而且沒有教會你如何處理編譯過程中可能遇到的形形色色的錯誤。
所以這最終只能是一篇小文,而不可能成為一篇正式的文件。

因此,如果通過我這篇小文,體驗到了 LaTeX 帶給你的一些樂趣,有了對 LaTeX 的興趣(如果是這樣,我就已經能夠無比開心了~),請務必去閱讀一些正式的 LaTeX 文件。

去讀文件

關於 LaTeX 的文件有很多,其中有些內容過時地很快。所以有必要告訴大家,哪些文件應該看,那些文件不應該看。
索性,這個問題,劉海洋(milksea)前輩已經敘述得很清楚了。前段時間,我和幾個朋友,將現在看起來還未過時的文件打包上傳到了我的部落格。參考:

<//att.liam0205.me/attachment/LaTeX-useful-tools/LaTeX_Docs_2014.zip>

遇到問題怎麼辦

  1. 絕對的新手,先讀完一本入門讀物,瞭解基本的知識;
  2. 無論如何,先讀文件!絕大部分問題都是文件可以解決的;
  3. 利用 Google 搜尋你的問題;
  4. 在各個論壇或者 LaTeX 交流群裡聰明地提出你的問題。

參考:http://www.wapm.cn/smart-questions/smart-questions-zh.html

CTeX論壇提問版:http://bbs.ctex.org/forum.php?mod=forumdisplay&fid=6&page=1

原文連結:https://liam0205.me/2014/09/08/latex-introduction/

相關文章