本文内容全部来源于lshort-zh-cn.pdf,本文仅做整理备忘。目的就是加深看一遍的印象,不可能全部记住,仅为了之后遇到问题起码知道往哪找。

一、 LaTeX基本概念

最短的LaTeX 源代码示例

\documentclass{article} %指定文档使用的文档类
%导言区一般会使用\usepackage 调用宏包,以及会进行对文档的全局设置。
\begin{document}        %document 环境当中的内容是文档正文
``Hello world!'' from \LaTeX.
\end{document}
  • LaTeX 中命令以反斜线\ 开头,字母形式的LATEX 命令忽略其后的所有连续空格。如果要人为引入空格,需要在命令后面加一对花括号阻止其忽略空格, 比如\Tex\TeX{}
  • LATEX 中还包括环境,用以令一些效果在局部生效,或是生成特殊的文档元素。LATEX 环境的用法为一对命令\begin 和\end

1.文档类

\documentclass[⟨options⟩]{⟨class-name⟩}

其中⟨class-name⟩ 为文档类的名称,如LaTeX 提供的article, book, report,在其基础上派生的一些文档类如支持中文排版的ctexart / ctexbook / ctexrep,或者有其它功能的一些文档类,如moderncv / beamer 等。

article 文章格式的文档类,广泛用于科技论文、报告、说明文档等。
report 长篇报告格式的文档类,具有章节结构,用于综述、长篇论文、简单的书籍等。
book 书籍文档类,包含章节结构和前言、正文、后记等结构。
proc 基于article 文档类的一个简单的学术文档模板。
slides 幻灯格式的文档类,使用无衬线字体。
minimal 一个极其精简的文档类,只设定了纸张大小和基本字号,用作代码测试的最小工作示例(Minimal Working Example)。

可选参数⟨options⟩ 为文档类指定选项,以全局地规定一些排版的参数,如字号、纸张大小、单双面等等。比如调用article 文档类排版文章,指定纸张为A4 大小,基本字号为11pt,双面排版:\documentclass[11pt,twoside,a4paper]{article}

  • 10pt, 11pt, 12pt 指定文档的基本字号。默认为10pt
  • a4paper, letterpaper, … 指定纸张大小,默认为美式信纸letterpaper ($8:5\times 11$ 英寸)。可指定选项还包括a5paperb5paperexecutivepaper legalpaper
  • twoside, oneside 指定单面/双面排版。双面排版时,奇偶页的页眉页脚、页边距不同。article和report 默认为oneside,book 默认为twoside。
  • onecolumn, twocolumn 指定单栏/双栏排版。默认为onecolumn。
  • openright, openany 指定新的一章\chapter 是在奇数页(右侧)开始,还是直接紧跟着上一页开始。report 默认为openany,book 默认为openright。对article 无效。
  • landscape 指定横向排版。默认为纵向。
  • titlepage, notitlepage 指定标题命令\maketitle 是否生成单独的标题页。article 默认为notitlepage,report 和book 默认为titlepage。 fleqn 令行间公式左对齐。默认为居中对齐。 leqno 将公式编号放在左边。默认为右边。 draft, final 指定草稿/终稿模式。草稿模式下,断行不良的地方会在行尾添加一个黑色方块。默认为final。

2. 宏包

\usepackage[⟨options⟩]{⟨package-name⟩}
  • \usepackage 可以一次性调用多个宏包,在⟨package-name⟩ 中用逗号隔开。这种用法一般不要指定选项:
  • 宏包(包括前面所说的文档类)可能定义了许多命令和环境,或者修改了LATEX 已有的命令和环境。它们的用法说明记在相应宏包和文档类的帮助文档。在Windows 命令提示符或者Linux 终端下输入命令可查阅相应文档:texdoc ⟨pkg-name⟩

3. LaTeX用到的文件

  • .sty 宏包文件。宏包的名称与文件名一致。
  • .cls 文档类文件。文档类名称与文件名一致。
  • .bib BIBTEX 参考文献数据库文件。
  • .bst BIBTEX 用到的参考文献格式模板。

辅助文件和日志

  • .log 排版引擎生成的日志文件,供排查错误使用。
  • .aux LATEX 生成的主辅助文件,记录交叉引用、目录、参考文献的引用等。
  • .toc LATEX 生成的目录记录文件。
  • .lof LATEX 生成的图片目录记录文件。
  • .lot LATEX 生成的表格目录记录文件。
  • .bbl BIBTEX 生成的参考文献记录文件。
  • .blg BIBTEX 生成的日志文件。
  • .idx LATEX 生成的供makeindex 处理的索引记录文件。
  • .ind makeindex 处理.idx 生成的用于排版的格式化索引文件。
  • .ilg makeindex 生成的日志文件。
  • .out hyperref 宏包生成的PDF 书签记录文件。

4.文件的组织方式

LaTeX 提供了命令\include用来在源代码里插入文件:

\include{⟨filename⟩}
  • ⟨filename⟩为文件名,如果和要编译的主文件不在一个目录中,则要加上相对或绝对路径

  • ⟨filename⟩ 可以不带扩展名,此时默认扩展名为.tex。

  • \include 在读入⟨filename⟩ 之前会另起一页。有的时候我们并不需要这样,而是用\input命令,它纯粹是把文件里的内容插入:

    \input{⟨filename⟩}
    
  • LaTeX 提供了一个\includeonly 命令来组织文件,用于导言区,指定只载入某些文件:\includeonly{⟨filename1⟩,⟨filename2⟩,…}, 导言区使用了\includeonly 后,正文中不在其列表范围的\include命令不会起效。

5 .只编译排查错误, 不生成文件

介绍一个实用的工具宏包syntonly。加载这个宏包后,在导言区使用\syntaxonly命令,可令LATEX 编译后不生成DVI 或者PDF 文档,只排查错误,编译速度会快不少:

\usepackage{syntonly}
\syntaxonly
  • 如果想生成文档,则用% 注释掉\syntaxonly命令即可。

6.澄清几个概念

  • 引擎 全称为排版引擎,是编译源代码并生成文档的程序,如pdfTeX、XeTeX 等。有时也称为编译器。

  • 格式 是定义了一组命令的代码集。LaTeX 就是最广泛应用的一个格式,高德纳本人还编写了一个简单的plain TeX 格式,没有定义诸如\documentclass 和\section 等等命令。

  • 编译命令 是实际调用的、结合了引擎和格式的命令。如xelatex 命令是结合XeTeX 引擎和LaTeX 格式的一个编译命令。

  • TEX 引擎、格式及其对应的编译命令

    • **latex **虽然名为latex 命令,底层调用的引擎其实是pdfTEX。该命令生成dvi(Device Independent格式的文档,用dvipdfmx 命令可以将其转为pdf。
    • **pdflatex **底层调用的引擎也是pdfTeX,可以直接生成pdf 格式的文档。
    • xelatex 底层调用的引擎是XeTeX,支持UTF-8 编码和TrueType / OpenType 字体。当前较为方便的中文排版解决方案基于xelatex。
    • **lualatex **底层调用的引擎是LuaTEX,这个引擎在pdfTEX 引擎基础上发展而来,除了支持UTF-8 编码和TrueType / OpenType 字体外,还支持通过Lua 语言扩展TEX 的功能。lualatex 编译命令下的中文排版支持需要借助luatex-ja 宏包。

二、用LaTex排版文字

1.语言文字和编码

  • ASCII 编码 每个字节为八位(8-bit)
  • 扩展编码 在ASCII 之后,各种语言文字都发展了自己的编码,比如西欧语言的Latin-1,日本的Shift- JIS,中国大陆的GB2312-80 和GBK 等
  • UTF-8 编码 Unicode 是一个多国字符的集合,覆盖了几乎全球范围内的语言文字。UTF-8 是Unicode 的一套编码方案,一个字符可以由一个到四个字节编码,其中单字节字符兼容ASCII 编码。
    • latex 命令及pdflatex 命令下可以使用inputenc 宏包支持UTF-8 编码:\usepackage[utf8]{inputenc}
    • xelatex 和lualatex 命令原生支持UTF-8 编码将.tex源代码保存为UTF-8 编码,并借助fontspec 宏包调用适当的字体,就可以在源代码中输入任意语言的文字

2. 排版中文

  • xeCJK宏包

    \documentclass{article}
    \usepackage{xeCJK}
    \setCJKmainfont{SimSun}
    \begin{document}
    中文\LaTeX{}排版。
    \end{document}
    
  • ctex宏包和文档类, ctex宏包和文档类是对CJK xeCJK等宏包的进一步封装。ctex文档类包括ctexart / ctexrep/ ctexbook,是对LaTeX 的三个标准文档类的封装

    \documentclass{ctexart}
    \begin{document}
    中文\LaTeX{}排版。
    \end{document}
    

3. LaTeX 中的字符

  • 空格 空格键和Tab 键输入的空白字符视为“空格”。连续的若干个空白字符视为一个空格。一行开头的空格忽略不计。

  • 分段 行末的回车视为一个空格;但连续两个回车,也就是空行,会将文字分段。多个空行被视为一个空行。也可以在行末使用\par 命令分段。

    将LaTeX命令输出为文本。

    A \verb|\par| command also starts a new line.
    

    编译后得到

    A \par command also starts a new line.

  • 注释 用% 字符作为注释。在这个字符之后直到行末,所有的字符都被忽略,行末的回车也不引入空格。

  • 特殊字符 # $ % & { } _ ^ ~ \ 这些字符在LaTeX 里有特殊用途, 如果想要输入以上符号,需要使用以下带反斜线的形式输入:\# \$ \% \& \{ \} \_ \^ \^{} \~{} \textbackslash

  • 反斜杠 \\ 被直接定义成了手动换行的命令,输入反斜杠就只好用\textbackslash

  • 连字 西文排版中经常会出现连字(Ligatures),常见的有ff / fi / fl / ffi / ffl

    It's difficult to find \ldots .\\
    It's dif{}f{}icult to f{}ind \ldots .
    
  • 标点符号 中文的标点符号(绝大多数为非ASCII 字符)使用中文输入法输入即可,一般不需要过多留意。而在英文标点符号上,有许多需要留意的地方。

    • 引号LaTeX 的单引号‘ ’ 和‘ 输入;双引号“ ” ` 和’’ 输入

    • 连字号和破折号连字号(hyphen)、短破折号(en-dash)和长破折号(em-dash)。它们分别有不同的用途:连字号- 用来组成复合词;短破折号– 用来连接数字表示范围;长破折号— 用来连接单词,与中文语境中的破折号用法类似。

    • 省略号LaTeX 提供了命令\ldots 来生成省略号,相对于直接输入三个点的方式更为合理。\ldots\dots 是两个等效的命令。

    • 波浪号 西文中较少将波浪号作为标点符号使用,通常使用中文的全角波浪号(~)。

  • 特殊西文符号与重音

  • 其它符号

  • LaTeX 标志

4. 文字强调

  • 下划线,一个单词的话\underline{underlined}, 多个单词或需要换行的话用ulem宏包的\uline命令。
  • 斜体\emph 命令用来将文字变为斜体以示强调。如果在本身已经用\emph 命令强调的文字内部嵌套使用\emph 命令,内部则使用直立体文字

5.断行和断页

  • 单词间距和断行, 断行的位置尽可能选取在两个单词之间,也就是用户在源文件中输入的“空格”, 我们可以使用字符~ 在合适的位置插入一个不会断行的空格(高德纳称之为tie,“带子”),通常用在英文人名、图表名称等场景

  • 手动断行和断页

    \\[⟨length⟩]
    \newline
    
    • \\ 可以带可选参数⟨length⟩,用于在换行处向下增加垂直间距, 而\newline不带可选参数
    • \\ 也在表格、公式等地方用于分行,而\newline只用于文本段落中。
    \newpage
    \clearpage
    
    • 在双栏排版中\newpage只起到另起一栏的作用
    • 涉及到浮动体的排版上行为不同
    \linebreak[⟨n⟩] \nolinebreak[⟨n⟩]
    \pagebreak[⟨n⟩] \nopagebreak[⟨n⟩]
    

    以上命令都带一个可选参数,用数字⟨n⟩ 代表适合/不适合的程度,取值范围为0-4,不带 可选参数时,缺省为4。比如\linebreak[3] 意味着此处在断行时优先考虑;\nopagebreak\nopagebreak[4] 意味着禁止在此处断页。以上命令适合给出优先考虑断行断页/禁止断行断页的位置,但不适合直接拿来断行或断页,使用\newline 或\newpage 等是更好的选择>

  • 断词 对于绝大部分单词,LaTeX 能够找到合适的断词位置,在断开的行尾加上连字符-。如果一些单词没能自动断词,我们可以在单词内手动使用\- 命令指定断词的位置

三、文档元素

1. 章节和目录

1.1 章节标题

\chapter{⟨title⟩} \section{⟨title⟩} \subsection{⟨title⟩}
\subsubsection{⟨title⟩} \paragraph{⟨title⟩} \subparagraph{⟨title⟩}
  • \chapter 只在book 和report 文档类有定义
  • \part 命令,用来将整个文档分割为大的分块,但不影响\chapter \section 等的编号。
  • 带可选参数的变体:\section[⟨short title⟩]{⟨title⟩} 标题使用⟨title⟩ 参数,在目录和页眉页脚中使用⟨short title⟩ 参数;
  • 带星号的变体:\section*{⟨title⟩} 标题不带编号,也不生成目录项和页眉页脚。
  • article 文档类默认带编号的层级为\section / \subsection / \subsubsection 三级;
  • report/book 文档类默认带编号的层级为\chapter / \section / \subsection 三级
  • 标准文档类并未提供为\section 等章节命令定制格式的功能,这一功能由titlesec宏包提供

1.2 目录

\tableofcontents
  • \tableofcontents 生成的章节默认不写入目录(\section*\chapter*),可使用tocbibind 等宏包修改设置。
  • 正确生成目录项,一般需要编译两次源代码。
  • 有时我们使用了\chapter* 或\section* 这样不生成目录项的章节标题命令,而又想手动生成该章节的目录项,可以在标题命令后面使用\addcontentsline{toc}{⟨level⟩}{⟨title⟩}
  • titletoctocloft 等宏包提供了具体定制目录项格式的功能

1.3 文档结构的划分

  • \appendix 命令将正文和附录分开,使用\appendix后,最高一级章节改为使用拉丁字母编号,从A 开始。

  • \frontmatter 前言部分,页码为小写罗马字母格式;其后的\chapter 不编号。

  • \mainmatter 正文部分,页码为阿拉伯数字格式,从1 开始计数;其后的章节编号正常。

  • \backmatter 后记部分,页码格式不变,继续正常计数;其后的\chapter 不编号。

  • book 文档类的文档结构示例。

    \documentclass[...]{book}
    % 导言区,加载宏包和各项设置,包括参考文献、索引等
    \usepackage{...}
    \usepackage{makeidx}
    \makeindex
    \bibliographystyle{...}
    \begin{document}
    \frontmatter
    \maketitle % 标题页
    \include{preface} % 前言章节preface.tex
    \tableofcontents
    \mainmatter
    \include{chapter1} % 第一章chapter1.tex
    \include{chapter2} % 第二章chapter2.tex
    ...
    \appendix
    \include{appendixA} % 附录A appendixA.tex
    ...
    \backmatter
    \include{prologue} % 后记prologue.tex
    \bibliography{...} % 利用BibTeX 工具生成参考文献
    \printindex % 利用makeindex 工具生成索引
    \end{document}
    

2. 标题页

\title{⟨title⟩} \author{⟨author⟩} \date{⟨date⟩}
  • 前两个命令是必须的(不用\title 会报错;不用\author 会警告),\date 命令可选。

  • 提供了一个\today 命令自动生成当前日期,\date 默认使用\today

  • \title\author 等命令内可以使用\thanks 命令生成标题页的脚注,用\and 隔开多个人名

    \title{Test title}
    \author{ Mary\thanks{E-mail:*****@***.com}
    \and Ted\thanks{Corresponding author}
    \and Louis}
    \date{\today}
    

生成一个简单的标题页

\maketitle
  • article 文档类的标题默认不单独成页,而report 和book 默认单独成页。可在\documentclass 命令调用文档类时指定titlepage / notitlepage 选项以修改默认的行为。

3. 交叉引用

在能够被交叉引用的地方,如章节、公式、图表、定理等位置使用\label命令:

\label{⟨label-name⟩}

之后可以在别处使用\ref \pageref 命令,分别生成交叉引用的编号和页码

\ref{⟨label-name⟩} \pageref{⟨label-name⟩}
  • 为了生成正确的交叉引用,一般也需要多次编译源代码。
  • \label 命令可用于记录各种类型的交叉引用,使用位置分别为:
    • 章节标题 在章节标题命令\section 等之后紧接着使用。 行间公式 单行公式在公式内任意位置使用;多行公式在每一行公式的任意位置使用。 有序列表 在enumerate 环境的每个\item 命令之后、下一个\item 命令之前任意位置使用。 图表标题 在图表标题命令\caption 之后紧接着使用。 定理环境 在定理环境内部任意位置使用。
  • 在使用不记编号的命令形式(\section*\caption*、带可选参数的\item 命令等)时不 要使用\label 命令,否则生成的引用编号不正确。

4. 脚注和边注

使用\footnote 命令可以在页面底部生成一个脚注

\footnote{⟨footnote⟩}
  • 有些情况下(比如在表格环境、各种盒子内)使用\footnote 并不能正确生成脚注。我们可以分两步进行,先使用\footnotemark 为脚注计数,再在合适的位置用\footnotetext 生成脚注。比如:

使用\marginpar 命令可在边栏位置生成边注

\marginpar[⟨left-margin⟩]{⟨right-margin⟩}
  • 如果只给定了⟨right-margin⟩,那么边注在奇偶数页文字相同;如果同时给定了⟨left-margin⟩,则偶数页使用⟨left-margin⟩ 的文字。
\marginpar{\footnotesize 边注较窄,不要写过多文字,最好设置较小的字号。}

5. 特殊环境

5.1 列表

了基本的有序和无序列表环境enumerate itemize,两者的用法很类似,都用\item 标明每个列表项。enumerate 环境会自动对列表项编号。

\begin{enumerate}
\item\end{enumerate}
  • 其中\item 可带一个可选参数,将有序列表的计数或者无序列表的符号替换成自定义的符号。列表可以嵌套使用,最多嵌套四层。

    %示例代码
    \begin{enumerate}
        \item An item.
        \begin{enumerate}
            \item A nested item.\label{itref}
            \item[*] A starred item.
        \end{enumerate}
        \item Reference(\ref{itref}).
    \end{enumerate}
      
    \begin{itemize}
        \item An item.
        \begin{itemize}
            \item A nested item.
            \item[+] A `plus' item.
            \item Another item.
        \end{itemize}
        \item Go back to upper level.
    \end{itemize}
    

关键字环境description 的用法与以上两者类似,不同的是\item 后的可选参数用来写关键字,以粗体显示,一般是必填的:

\begin{description}
	\item[⟨item title⟩]\end{description}
  • 各级无序列表的符号由命令\labelitemi 到\labelitemiv 定义,可以简单地重新定义它们:
%示例代码
\renewcommand{\labelitemi}{\ddag}
\renewcommand{\labelitemii}{\dag}
\begin{itemize}
    \item First item
    \begin{itemize}
        \item Subitem
        \item Subitem
    \end{itemize}
    \item Second item
\end{itemize}
  • 有序列表的符号由命令\labelenumi 到\labelenumiv 定义,重新定义这些命令需要用到计数器相关命令:

    %示例代码
    \renewcommand{\labelenumi}%
    {\Alph{enumi}>}
    \begin{enumerate}
        \item First item
        \item Second item
    \end{enumerate}
    
  • 默认的列表间距比较宽,LaTeX 本身也未提供方便的定制功能,可用enumitem宏包定制各 种列表间距。enumitem宏包还提供了对列表标签、引用等的定制。有兴趣的读者可参考其帮助 文档。

5.2对齐环境

center、flushleft 和flushright 环境分别用于生成居中、左对齐和右对齐的文本环境。

\begin{center}\end{center}
\begin{flushleft}\end{flushleft}
\begin{flushright}\end{flushright}
%示例代码
\begin{center}
Centered text using a
\verb|center| environment.
\end{center}
\begin{flushleft}
Left-aligned text using a
\verb|flushleft| environment.
\end{flushleft}
\begin{flushright}
Right-aligned text using a
\verb|flushright| environment.
\end{flushright}

除此之外,还可以用以下命令直接改变文字的对齐方式:

\centering \raggedright \raggedleft
%示例代码
\centering
Centered text paragraph.
\raggedright
Left-aligned text paragraph.
\raggedleft
Right-aligned text paragraph.
  • center 等环境会在上下文产生一个额外间距,而\centering 等命令不产生,只是改变对齐方式。比如在浮动体环境table 或figure 内实现居中对齐,用\centering 命令即可,没必要再用center 环境。

5.3 引用环境

  • quote用于引用较短的文字,首行不缩进;quotation用于引用若干段文字,首行缩进。
  • 引用环境较一般文字有额外的左右缩进。
  • verse 用于排版诗歌,与quotation 恰好相反,verse 是首行悬挂缩进的。

5.4 代码环境

代码环境verbatim,它以等宽字体排版代码,回车和空格也分别起到换行和空位的作用;带星号的版本更进一步将空格显示成␣。

要排版简短的代码或关键字,可使用\verb 命令:

\verbdelim⟩code⟩⟨delim⟩
⟨delim⟩ 标明代码的分界位置,前后必须一致,除字母、空格或星号外,可任意选择使得不与代码本身冲突,习惯上使用 符号。
  • \verb 命令对符号的处理比较复杂,一般不能用在其它命令的参数里,否则多半会出错。
  • verbatim 宏包优化了verbatim 环境的内部命令,并提供了\verbatiminput 命令用来直接 读入文件生成代码环境。fancyvrb 宏包提供了可定制格式的Verbatim 环境;listings 宏包更进一 步,可生成关键字高亮的代码环境,支持各种程序设计语言的语法和关键字。详情请参考各自的 帮助文档。

6. 表格

\begin{tabular}{⟨column-spec⟩}
⟨item1⟩ & ⟨item2⟩ & … \\
\hline
⟨item1⟩ & ⟨item2⟩ & … \\
\end{tabular}

⟨column-spec⟩ 是列格式标记,在接下来的内容将仔细介绍;& 用来分隔单元格;\\用来换行;\hline 用来在行与行之间绘制横线。

  • 直接使用tabular 环境的话,会和周围的文字混排, 通常情况下我们不这么用,tabular 环境一般会放置在table 浮动体环境中,并用\caption 命令加标题。

  • 列格式

    • 表格中每行的单元格数目不能多于列格式里l/c/r/p 的总数(可以少于这个总数),否则出错。

    • @ 格式可在单元格前后插入任意的文本,但同时它也消除了单元格前后额外添加的间距。@ 格式可以适当使用以充当“竖线”。特别地,@{} 可直接用来消除单元格前后的间距

      \begin{tabular}{@{} r@{:}lr @{}}
      
    • 提供了简便的将格式参数重复的写法*{⟨n⟩}{⟨column-spec⟩},比如以下两种 写法是等效的:

      \begin{tabular}{|c|c|c|c|c|p{4em}|p{4em}|}
      \begin{tabular}{|*{5}{c|}*{2}{p{4em}|}}
      
    • array 宏包提供了辅助格式> 和<,用于给列格式前后加上修饰命令

      \begin{tabular}{>{\itshape}r<{*}l}%示例将某行意大利斜体。并在后面加上*号
      \begin{tabular}{>{\centering\arraybackslash}p{9em}} %示例在p环境中居中对齐
      
    • array 宏包还提供了类似p 格式的m 格式和b格式,三者分别在垂直方向上靠顶端对齐、居 中以及底端对齐。

      %示例代码
      \newcommand\txt
      {a b c d e f g h i}
      \begin{tabular}{cp{2em}m{2em}b{2em}}
      \hline
      pos & \txt & \txt & \txt \\
      \hline
      \end{tabular}
      
  • 列宽

    • tabularx 宏包为我们提供了方便的解决方案, 提供了X 列格式,类似p 列格式,不过 会根据表格宽度自动计算列宽,多个X 列格式平均分配列宽

      \begin{tabularx}{14em}%
      {|*{4}{>{\centering\arraybackslash}X|}}
      \hline
      A & B & C & D \\ \hline
      a & b & c & d \\ \hline
      \end{tabularx}
      
  • 横线

    • 绘制表格线的\hline 命令。另外\cline{⟨i⟩-⟨j⟩} 用来绘制跨越部分单元格的横线:

      %示例代码
      \begin{tabular}{|c|c|c|}
      	\hline
          4 & 9 & 2 \\ \cline{2-3}
          3 & 5 & 7 \\ \cline{1-1}
          8 & 1 & 6 \\ \hline
      \end{tabular}
      
    • 在科技论文排版中广泛应用的表格形式是三线表,形式干净简明。三线表由booktabs 宏包 支持,它提供了\toprule\midrule\bottomrule 命令用以排版三线表的三条线,以及和 \cline 对应的\cmidrule。除此之外,最好不要用其它横线以及竖线

      %示例代码
      \begin{tabular}{cccc}
          \toprule
              & \multicolumn{3}{c}{Numbers} \\
              \cmidrule{2-4}
              & 1 & 2 & 3 \\
              \midrule
              Alphabet & A & B & C \\
              Roman & I & II& III \\
          \bottomrule
      \end{tabular}
      
  • 合并单元格

    \multicolumn{⟨n⟩}{⟨column-spec⟩}{⟨item⟩}
    

    ⟨n⟩ 为要合并的列数,⟨column-spec⟩ 为合并单元格后的列格式,只允许出现一个l/c/rp 格式。如果合并前的单元格前后带表格线|,合并后的列格式也要带| 以使得表格的竖线一致。

    %示例代码
    \begin{tabular}{|c|c|c|}
    \hline
    1 & 2 & Center \\ \hline
    \multicolumn{2}{|c|}{3} &
    \multicolumn{1}{r|}{Right} \\ \hline
    4 & \multicolumn{2}{c|}{C} \\ \hline
    \end{tabular}
    
    • \multicolumn{1}{⟨column-spec⟩}{⟨item⟩} 的命令可以用来修改某一个单元格的列格式。

    • 纵向合并单元格需要用到multirow 宏包提供的\multirow 命令:\multirow{⟨n⟩}{⟨width⟩}{⟨item⟩}

      %示例代码
      \begin{tabular}{ccc}
      \hline
      \multirow{2}{*}{Item} &
      \multicolumn{2}{c}{Value} \\
      \cline{2-3}
      & First & Second \\ \hline
      A & 1 & 2 \\ \hline
      \end{tabular}
      
  • 嵌套表格

    在单元格中嵌套一个小表格可以起到“拆分单元格”的效果

    • 注意要用\multicolumn 命令配合@{} 格式把单元格的额外边距去掉,使得嵌套的表格线能和外层的表格线正确相连:
    %示例代码
    \begin{tabular}{|c|c|c|}
        \hline
        a & b & c \\ \hline
        a & \multicolumn{1}{@{}c@{}|}
            {\begin{tabular}{c|c}
                e & f \\ \hline
                e & f \\
            \end{tabular}}
        		& c \\ \hline
        a & b & c \\ \hline
    \end{tabular}
    
    • 如果不需要为“拆分的单元格”画线,并且只在垂直方向“拆分”的话,makecell 宏包提供的\makecell 命令是一个简单的解决方案:

      \begin{tabular}{|c|c|}
          \hline
          a & \makecell{d1 \\ d2} \\
          \hline
          b & c \\
          \hline
      \end{tabular}
      
  • 行距控制

    • 修改参数\arraystretch 可以得到行距更加宽松的表格
    \renewcommand\arraystretch{1.8}
    \begin{tabular}{|c|}
        \hline
        Really loose \\ \hline
        tabular rows.\\ \hline
    \end{tabular}
    
    • 另一种增加间距的办法是给换行命令\ 添加可选参数,在这一行下面加额外的间距,适合用于在行间不加横线的表格:

      \begin{tabular}{c}
          \hline
          Head lines \\[6pt]
          tabular lines \\
          tabular lines \\ \hline
      \end{tabular}
      

      但是这种换行方式的存在导致了一个缺陷——表格的首个单元格不能直接使用中括号[],否则\\ 往往会将下一行的中括号当作自己的可选参数,因而出错。如果要使用中括号,应当放在花括号{} 里面。或者也可以选择将换行命令写成\\[0pt]

7. 图片

  • 需要由graphicx 宏包辅助支持

  • 使用latex + dvipdfmx 编译命令时,调用graphicx 宏包时要指定dvipdfmx 选项6;而使用pdflatex 或xelatex 命令编译时不需要。

  • 各种编译方式支持的主流图片格式

\includegraphics[⟨options⟩]{⟨filename⟩}
  • 另外graphicx 宏包还提供了\graphicspath 命令,用于声明一个或多个图片文件存放的目录,使用这些目录里的图片时可不用写路径:

    % 假设主要的图片放在figures 子目录下,标志放在logo 子目录下
    \graphicspath{ {figures/} {logo/} }
    
  • \includegraphics 命令的可选参数⟨options⟩ 支持⟨key⟩=⟨value⟩ 形式赋值

8. 盒子

​ 盒子是LATEX 排版的基础单元,虽然解释上去有些抽象:每一行是一个盒子,里面的文字从左到右依次排列;每一页也是一个盒子,各行文字从上到下依次排布……颇有一些活字印刷术的味道。不管如何,LATEX 提供了一些命令让我们生成一些有特定用途的盒子。

8.1 水平盒子

\mbox{}
\makebox[⟨width⟩][⟨align⟩]{}
  • \mbox生成一个基本的水平盒子,内容只有一行,不允许分段(除非嵌套其它盒子,比如后文的垂直盒子)。外表看上去,\mbox 的内容与正常的文本无二,不过断行时文字不会从盒子里断开。

  • \makebox 更进一步,可以加上可选参数用于控制盒子的宽度⟨width⟩,以及内容的对齐方式⟨align⟩,可选居中c(默认值)、左对齐l、右对齐r 和分散对齐s

    %示例代码
    |\mbox{Test some words.}|\\
    |\makebox[10em]{Test some words.}|\\
    |\makebox[10em][l]{Test some words.}|\\
    |\makebox[10em][r]{Test some words.}|\\
    |\makebox[10em][s]{Test some words.}|
    

8.2带框的水平盒子

\fbox 和\framebox 让我们可以为水平盒子添加边框。使用的语法与\mbox 和\makebox一模一样

\fbox{}
\framebox[⟨width⟩][⟨align⟩]{}

可以通过\setlength 命令(见5.2.1 小节)调节边框的宽度\fboxrule 和内边距\fboxsep.

%示例代码
\framebox[10em][r]{Test box}\\[1ex]
\setlength{\fboxrule}{1.6pt}
\setlength{\fboxsep}{1em}
\framebox[10em][r]{Test box}

8.3 垂直盒子

\parbox[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}{}
\begin{minipage}[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}\end{minipage}

其中⟨align⟩ 为盒子和周围文字的对齐情况(类似tabular 环境);⟨height⟩ ⟨inner-align⟩设置盒子的高度和内容的对齐方式,类似水平盒子\makebox 的设置,不过⟨inner-align⟩ 接受的参数是顶部t、底部b、居中c 和分散对齐s

%示例代码
三字经:\parbox[t]{3em}%
{人之初性本善性相近习相远}
\quad
千字文:
\begin{minipage}[b][8ex][t]{4em}
天地玄黄宇宙洪荒
\end{minipage}
  • 如果在minipage 里使用\footnote 命令,生成的脚注会出现在盒子底部,编号是独立的,并且使用小写字母编号。而在\parbox 里无法正常使用\footnote 命令,只能在盒子里使用\footnotemark,在盒子外使用\footnotetext。

8.4 标尺盒子

\rule 命令用来画一个实心的矩形盒子,也可适当调整以用来画线(标尺)

\rule[⟨raise⟩]{⟨width⟩}{⟨height⟩}
%示例代码
Black \rule{12pt}{4pt} box.
Upper \rule[4pt]{6pt}{8pt} and
lower \rule[-4pt]{6pt}{8pt} box.
A \rule[-.4pt]{3em}{.4pt} line.

9. 浮动体

LaTeX 预定义了两类浮动体环境figure 和table,令大块的内容可以脱离上下文,放置在合适的位置。

\begin{table}[⟨placement⟩]
…
\end{table}

⟨placement⟩ 参数提供了一些符号用来表示浮动体允许排版的位置,如hbp 允许浮动体排版在当前位置、底部或者单独成页。table figure 浮动体的默认设置为tbp

  • 排版位置的选取与参数里符号的顺序无关,LATEX 总是以h-t-b-p 的优先级顺序决定浮动体位置。也就是说[!htp] 和[ph!t] 没有区别
  • 限制包括浮动体个数(除单独成页外,默认每页不超过3 个浮动体,其中顶部不超过2 个,底部不超过1 个)以及浮动体空间占页面的百分比(默认顶部不超过70%,底部不超过30%)
  • 双栏排版环境下,LATEX 提供了table* figure* 环境用来排版跨栏的浮动体, 用法与table figure 一样,不同之处为双栏的⟨placement⟩ 参数只能用tp 两个位置。
  • \clearpage 命令会在另起一页之前,先将所有推迟处理的浮动体排版成页,此时htbp 等位置限制被完全忽略。
  • float 宏包为浮动体提供了H 位置参数,不与htbp 及! 混用。使用H 位置参数时,会取消浮动机制,将浮动体视为一般的盒子插入当前位置。这在一些特殊情况下很有用(如使用multicol宏包排版分栏内容的时候),但尺寸过大的浮动体可能使得分页比较困难。

9.1 浮动体的标题

图表等浮动体提供了\caption 命令加标题,并且自动给浮动体编号

\caption{}%带编号
\caption*{}%不带编号
\caption[…]{}%在目录里使用短标题
  • \caption命令之后还可以紧跟\label 命令标记交叉引用。
  • \caption 生成的标题形如“Figure 1: …”(figure 环境)或“Table 1: …”(table 环境)。可通过修改\figurename \tablename 的内容来修改标题的前缀。标题样式的定制功能由caption 宏包提供,
  • table 和figure 两种浮动体分别有各自的生成目录的命令:\listoftables\listoffigures 它们类似\tableofcontents 生成单独的章节。

9.2 并排和子图表

%一个标题
\begin{figure}[htbp]
    \centering
    \includegraphics[width=...]{...}
    \qquad
    \includegraphics[width=...]{...} \\[..pt]
    \includegraphics[width=...]{...}
    \caption{...}
\end{figure}
%多个标题
\begin{figure}[htbp]
    \centering
    \begin{minipage}{...}
        \centering
        \includegraphics[width=...]{...}
        \caption{...}
    \end{minipage}
    \qquad
    \begin{minipage}{...}
        \centering
        \includegraphics[width=...]{...}
        \caption{...}
    \end{minipage}
\end{figure}
%小标题,用到subfig 宏包的功能
\begin{figure}[htbp]
    \centering
    \subfloat[...]{\label{sub-fig-1}% 为子图加交叉引用
        \begin{minipage}{...}
            \centering
            \includegraphics[width=...]{...}
        \end{minipage}
    }
    \qquad
    \subfloat[...]{ %
        \begin{minipage}{...}
            \centering
            \includegraphics[width=...]{...}
        \end{minipage}
    }
    \caption{...}
\end{figure}

四、排版数学公式

1. AMS宏集

AMS 宏集合是美国数学学会(AmericanMathematical Society) 提供的对LaTeX 原生的数学公式排版的扩展,其核心是amsmath 宏包,对多行公式的排版提供了有力的支持。此外,amsfonts 宏包以及基于它的amssymb 宏包提供了丰富的数学符号;amsthm 宏包扩展了LATEX 定理证明格式。

2.公式排版基础

  • 行内公式由一对$符号包裹
  • 单独成行的行间公式在LaTeX 里由equation 环境包裹, equation 环境为公式自动生成一个编号,这个编号可以用\label 和\ref 生成交叉引用。
  • amsmath\eqref 命令甚至为引用自动加上圆括号;还可以用\tag 命令手动修改公式的编号,或者用\notag 命令取消为公式编号(与之基本等效的命令是\nonumber)。
  • 需要直接使用不带编号的行间公式,则将公式用命令\[\] 包裹1,与之等效的是displaymath 环境。有的人更喜欢equation* 环境.
  • 行间公式的对齐、编号位置等性质由文档类选项控制,文档类的fleqn 选项令行间公式左对齐;leqno 选项令编号放在公式左边。
  • 数学模式
    • 数学模式中输入的空格被忽略。数学符号的间距默认由符号的性质(关系符号、运算符等)决定。需要人为引入间距时,使用\quad\qquad 等命令。
    • 不允许有空行(分段)。行间公式中也无法用\\ 命令手动换行。
    • 所有的字母被当作数学公式中的变量处理,字母间距与文本模式不一致,也无法生成单词之间的空格。如果想在数学公式中输入正体的文本,简单情况下可用\mathrm命令。或者用amsmath 提供的\text 命令.

3. 数学符号

  • 一般符号 $\alpha$(\alpha)、$\beta$ (\beta) 、$\Gamma$ (\Gamma)、$\Delta$ (\Delta) 、$\infty$ (\infty),$\dots$ (\dots) 、$\cdots$ (\cdots)、$\vdots$(\vdots)、$\ddots$(\ddots)

    • \ldots 和\dots 是完全等效的,它们既能用在公式中,也用来在文本里作为省略号
  • 指数、上下标和导数

    • ^_ 标明上下标。注意上下标的内容(子公式)一般需要用花括号包裹,否则上下标只对后面的一个符号起作用。
    • 导数符号’() 是一类特殊的上标
  • 分式和根式

    • 分式使用\frac{分子}{分母} 来书写
    • amsmath 提供了方便的命令\dfrac\tfrac,令用户能够在行内使用正常大小的分式,或是反过来。
    • 一般的根式使用\sqrt{...};表示n 次方根时写成\sqrt[n]{...}
    • 特殊的分式形式,如二项式结构,由amsmath 宏包的\binom 命令生成:$\binom{n}{k} =\binom{n-1}{k}-\binom{n-1}{k-1}$
  • 关系符

    • 直接输入的=,>,<
    • 不等号$\ne$ (\ne)、大于等于号$\ge$ (\ge) 和小于等于号$\le$ (\le)、约等号$\approx$ (\approx)、等价$\equiv$(\equiv)、正比$\propto$ (\propto)、相似$\sim$(\sim) 等等
    • 自定义二元关系符的命令\stackrel,用于将一个符号叠加在原有的二元关系符之上:$f_n(x) \stackrel{*}{\approx} 1$
  • 算符

    • +、-、*、=直接键盘输入

    • 乘号$\times$ (\times)、除号$\div$ (\div)、点乘$\cdot$(\cdot)、加减号$\pm$(\pm) / $\mp$ (\mp)

    • $\nabla$ (\nabla) 、$\partial$ (\partial)

    • 算符的函数名称一览。

    • 求模表达式\pmod\bmod 命令

    • amsmath 允许用户用\DeclareMathOperator 定义自己的算符,其中带星号的命令定义带上下限的算符:

      \DeclareMathOperator{\argh}{argh}
      \DeclareMathOperator*{\nut}{Nut}
      
  • 巨算符

    • $\int$(\int)、$\sum$(\sum)、$\oint$(\oint),$\prod$(\prod)

    • 巨算符在行内公式和行间公式的大小和形状有区别

    • 巨算符的上下标位置可由\limits\nolimits 控制,前者令巨算符类似lim 或求和算符$\sum$,上下标位于上下方;后者令巨算符类似积分号,上下标位于右上方和右下方。$\sum \limits_{x=1}^n$、$\sum \nolimits_{x=1}^n$

    • amsmath 宏包还提供了\substack,能够在下限位置书写多行表达式;subarray 环境更进 一步,令多行表达式可选择居中(c) 或左对齐(l):

      %示例代码
      \[
      \sum_{\substack{0\le i\le n \\
      j\in \mathbb{R}}}
      P(i,j) = Q(n)
      \]
      \[
      \sum_{\begin{subarray}{l}
          0\le i\le n \\
          j\in \mathbb{R}
      \end{subarray}}
      P(i,j) = Q(n)
      \]
      
  • 数学重音和上下括号

    • $\dot{r}$(\dot{r})、$\ddot{r}$ (\ddot{r})、$\vec{r}$ (\vec{r}) 、$\hat{\mathbf{e}}$ (\hat{\mathbf{e}})

    • 使用时要注意重音符号的作用区域,一般应当对某个符号而不是“符号加下标”使用重音
    • 包括直接画线的\overline \underline 命令,宽重音符号\widehat、表示向量的箭头\overrightarrow
    • \overbrace \underbrace 命令用来生成上/下括号,各自可带一个上/下标公式。
  • 箭头

    • $\rightarrow$ \rightarrow (或\to)、$\leftarrow$ \leftarrow( 或\gets)
    • amsmath 的\xleftarrow\xrightarrow 命令提供了长度可以伸展的箭头,并且可以为 箭头增加上下标:$c\xrightarrow[x<y]{abc}d $ ( c\xrightarrow[x<y]{a*b*c}d )
  • 括号和定界符

    • 小括号()、中括号[]、大括号{}(\{\})、尖括号⟨⟩ (\langle \rangle
    • \left\right 命令可令括号(定界符)的大小可变,在行间公式中常用。
    • \left\right 必须成对使用。需要使用单个定界符时,另一个定界符写成\left. \right.
    • 我们还可以用\big\Big\bigg\Bigg等命令生成固定大小的定界符。更常用的形式是类似\left\bigl\biggl 等,以及类似\right \bigr\biggr 等(\bigl\bigr 不必成对出现)。
    • \left \right 分界符包裹的公式块是不允许断行的,也不允许在多行公式里跨行使用 ,而\big\bigg 等命令不受限制。

4.多行公式

  • 长公式折行

    • 通常来讲应当避免写出超过一行而需要折行的长公式。如果一定要折行的话,习惯上优先在等号之前折行,其次在加号、减号之前,再次在乘号、除号之前。其它位置应当避免折行。

    • amsmath 宏包的multline 环境提供了书写折行长公式的方便环境。它允许用\\ 折行,将公式编号放在最后一行。多行公式的首行左对齐,末行右对齐,其余行居中。

      \begin{multline}
      a + b + c + d + e + f
      + g + h + i \\
      = j + k + l + m + n\\
      = o + p + q + r + s\\
      = t + u + v + x + z
      \end{multline}
      
    • multline* 环境排版不带编号的折行长公式。

  • 多行公式

    • 目前最常用的是align 环境,它将公式用& 隔为两部分并对齐。分隔符通常放在等号左边

    • align 环境会给每行公式都编号。我们仍然可以用\notag 去掉某行的编号

    • 为了对齐加号,我们将分隔符放在等号右边,这时需要给等号后添加一对括号{} 以产生正常的间距

      \begin{align}
      a 	={} & b + c \\
      	={} & d + e + f + g + h + i
      		+ j + k + l \notag \\
      		& + m + n + o \\
      	={} & p + q + r + s
      \end{align}
      
    • align 还能够对齐多组公式,除等号前的& 之外,公式之间也用& 分隔:

      \begin{align}
          a &=1 & b &=2 & c &=3 \\
          d &=-1 & e &=-2 & f &=-5
      \end{align}
      
    • 如果我们不需要按等号对齐,只需罗列数个公式,gather 将是一个很好用的环境:

      \begin{gather}
      a = b + c \\
      d = e + f + g \\
      h + i = j + k \notag \\
      l + m = n
      \end{gather}
      
  • 公用编号的多行公式

    • amsmath 宏包提供了诸如alignedgathered 等环境,与equation 环境套用

5. 数组和矩阵

为了排版二维数组,LATEX 提供了array 环境,用法与tabular 环境极为类似,也需要定义列格式,并用\\ 换行。数组可作为一个公式块,在外套用\left\right 等定界符:

  • amsmath 提供的cases 环境比array环境更轻松地完成下面的效果。
%使用array
\[ |x| = \left\{
\begin{array}{rl}
-x & \text{if } x < 0,\\
0 & \text{if } x = 0,\\
x & \text{if } x > 0.
\end{array} \right. \]

%使用case
\[ |x| =
\begin{cases}
-x & \text{if } x < 0,\\
0 & \text{if } x = 0,\\
x & \text{if } x > 0.
\end{cases} \]
  • amsmath 宏包还直接提供了多种排版矩阵的环境,包括不带定界符的matrix,以及带各种定界符的矩阵pmatrix(()、bmatrix([)、Bmatrix({)、vmatrix($ $)、Vmatrix($|$)
    \[%示例代码
    \begin{matrix}
    1 & 2 \\ 3 & 4
    \end{matrix} \qquad
    \begin{bmatrix}
    x_{11} & x_{12} & \ldots & x_{1n}\\
    x_{21} & x_{22} & \ldots & x_{2n}\\
    \vdots & \vdots & \ddots & \vdots\\
    x_{n1} & x_{n2} & \ldots & x_{nn}\\
    \end{bmatrix}
    \]
    

6.公式中的间距

  • 注意微元里的d 用的是直立体:$\int_a^b f(x)\mathrm{d}x \qquad \int_a^b f(x)\,\mathrm{d}x$( \int_a^b f(x)\mathrm{d}x \qquad \int_a^b f(x)\,\mathrm{d}x)
  • amsmath 提供二重积分\iint、三重积分\iiint

7. 数学符号的字体控制

  • 数学字母字体 $\mathcal{R} \quad \mathfrak{R} \quad \mathbb{R}$ (\mathcal{R} \quad \mathfrak{R} \quad \mathbb{R})

  • 数学符号的尺寸

    • 行间公式的分式内,分子分母使用行内公式尺寸,巨算符采用行内尺寸的形式。

      \[%示例代码
      P = \frac
      {\sum_{i=1}^n (x_i- x)(y_i- y)}
      {\displaystyle \left[
      \sum_{i=1}^n (x_i-x)^2
      \sum_{i=1}^n (y_i-y)^2
      \right]^{1/2} }
      \]
      
  • 加粗的数学符号

    • amsmath 提供了一个\boldsymbol 命令(由调用的amsbsy 宏包提供),用于打破\boldmath的限制,在公式内部将一部分符号切换为粗体。
    • LaTeX工具宏集之一的bm 宏包可以用\bm 命令生成“伪粗体”,一定程度上解决了不带粗体版本的符号的问题。

8. 定理环境

\newtheorem{⟨theorem environment⟩}{⟨title⟩}[⟨section-level⟩]
\newtheorem{⟨theorem environment⟩}[⟨counter⟩]{⟨title⟩}
  • ⟨theorem environment⟩ 为定理环境的名称。原始的LaTeX 里没有现成的定理环境,不加定义而直接使用很可能会出错。⟨title⟩ 是定理环境的标题(“定理”,“公理”等)。
  • ⟨section level⟩ 为章节级别,如chapter、section 等,定理序号成为章节的下一级序号;
  • ⟨counter⟩ 为用\newcounter 自定义的计数器名称,定理序号由这个计数器管理。
%示例代码
\newtheorem{mythm}{My Theorem}[section]
\begin{mythm}\label{thm:light}
The light speed in vacuum
is $299,792,458\,\mathrm{m/s}$.
\end{mythm}
\begin{mythm}[Energy-momentum relation]
The relationship of energy,
momentum and mass is
\[E^2 = m_0^2 c^4 + p^2 c^2\]
where $c$ is the light speed
described in theorem \ref{thm:light}.
\end{mythm}

默认的定理环境格式为粗体标签、斜体正文、定理名用小括号包裹,如果需要修改格式,则要依赖其它的宏包,如amsthm、ntheorem 等等。

  • amsthm 提供了\theoremstyle 命令支持定理格式的切换,在用\newtheorem 命令定义定理环境之前使用。amsthm 预定义了三种格式用于\theoremstyleplain 和LaTeX 原始的格式一致;definition 使用粗体标签、正体内容;remark 使用斜体标签、正体内容。
%定义的jury 环境与law 环境共用编号,mar 环境不编号:
\theoremstyle{definition} \newtheorem{law}{Law}
\theoremstyle{plain} \newtheorem{jury}[law]{Jury}
\theoremstyle{remark} \newtheorem*{mar}{Margaret}
  • amsthm 还支持使用\newtheoremstyle 命令自定义定理格式,更为方便使用的是ntheorem 宏包。感兴趣的读者可参阅它们的帮助文档。

amsthm 还提供了一个proof 环境用于排版定理的证明过程。proof 环境末尾自动加上一个证毕符号

  • 如果行末是一个不带编号的公式, 符号会另起一行,这时可使用\qedhere 命令将符号放在公式末尾:

  • 证毕符号本身被定义在命令\qedsymbol 中,如果有使用实心符号作为证毕符号的需求,需要自行用\renewcommand 命令修改

    %示例代码
    \renewcommand{\qedsymbol}{\rule{1ex}{1.5ex}}
    \begin{proof}
    For simplicity, we use
    \[
    E=mc^2 \qedhere
    \]
    \end{proof}
    

9. 符号表

  • 蓝色的命令依赖amsmath 宏包(非amssymb 宏包);

  • 带有角标ℓ 的符号命令依赖latexsym 宏包。

文本/数学模式通用符号

希腊字母

二元关系符

二元运算符

巨算符

数学重音符号

箭头

作为重音的箭头符号

定界符

用于行间公式的大定界符

其他符号

AMS 希腊字母和希伯来字母

AMS 二元关系符

AMS 二元运算符

AMS 箭头

AMS 反义二元关系符和箭头

AMS 定界符

AMS 其它符号

五、排版样式设定

1. 字体和字号

字体命令

字号命令

标准文档类中的字号大小

  • \fontsize{⟨size⟩}{⟨base line-skip⟩}设定任意大小的字号
  • 如果想要让它在局部生效,需要用花括号分组

  • 切换字体编码要用到fontenc 宏包:\usepackage[T1]{fontenc},LaTeX 默认使用兼容plain TEX 的OT1 编码

  • 更改字体

    \setmainfont[⟨font features⟩]{⟨font name⟩}
    \setsansfont[⟨font features⟩]{⟨font name⟩}
    \setmonofont[⟨font features⟩]{⟨font name⟩}
    
    • ⟨font name⟩ 使用字体的文件名(带扩展名)或者字体的英文名称。⟨font features⟩ 用来手动配置对应的粗体或斜体,比如为Windows 下的无衬线字体Arial 配置粗体和斜体

      \setsansfont[BoldFont={Arial Bold}, ItalicFont={Arial Italic}]{Arial}
      
  • 更改中文字体

    • xeCJK 宏包使用了和fontspec 宏包非常类似的语法设置中文字体
    \setCJKmainfont[⟨font features⟩]{⟨font name⟩}
    \setCJKsansfont[⟨font features⟩]{⟨font name⟩}
    \setCJKmonofont[⟨font features⟩]{⟨font name⟩}
    

2. 段落格式和间距

2.1 长度和长度变量

长度单位

  • 可伸缩的“弹性长度”,如12pt plus 2pt minus 3pt 表示基础长度为12pt,可以伸展到14pt ,也可以收缩到9pt。

  • 长度的数值还可以用长度变量本身或其倍数来表达,如2.5\parindent 等

  • LaTeX 预定义了大量的长度变量用于控制版面格式。如页面宽度和高度、首行缩进、段落间距等。如果需要自定义长度变量,需使用\newlength命令,长度变量可以用\setlength 赋值,或用\addtolength 增加长度:

    \newlength{\⟨length command⟩}
    \setlength{\⟨length command⟩}{⟨length⟩}
    \addtolength{\⟨length command⟩}{⟨length⟩}
    

2.2 行距

\linespread{⟨factor⟩}

  • 其中⟨factor⟩ 作用于基础行距而不是字号。缺省的基础行距是1.2 倍字号大小

  • 使用\linespread{1.5} 意味着最终行距为1.8 倍的字号大小。

  • 想要局部地改变某个段落的行距,需要用\selectfont 命令使\linespread 命令的改动立即生效:

    %示例代码
    {\linespread{2.0}\selectfont
    The baseline skip is set to be
    twice the normal baseline skip.
    Pay attention to the \verb|\par|
    command at the end. \par}
    
  • 字号的改变是即时生效的,而行距的改变直到文字分段时才生效。

2.3 段落格式

以下长度分别为段落的左缩进、右缩进和首行缩进:

\setlength{\leftskip}{⟨length⟩}
\setlength{\rightskip}{⟨length⟩}
\setlength{\parindent}{⟨length⟩}
  • 它们和设置行距的命令一样,在分段时生效。

  • 如果你在某一段不想使用缩进,可使用某一段开头使用\noindent 命令。

  • 相反地,\indent 命令强制开启一段首行缩进的段落。多个\indent 命令可以累加缩进量。

  • 默认在\chapter、\section 等章节标题命令之后的第一段不缩进, 如果不习惯这种设定,可以调用indentfirst 宏包,令第一段的首行缩进照常。

  • %段落间的垂直间距为\parskip,如设置段落间距在0.8ex 到1.5ex 变动:
    \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
    

2.4 水平间距

如果需要在文中手动插入额外的水平间距,可使用\hspace 命令

This\hspace{1.5cm}is a space of 1.5 cm.
  • \hspace 命令生成的水平间距如果位于一行的开头或末尾,则有可能因为断行而被“吞掉”。可使用\hspace* 命令代替\hspace 命令得到不会因断行而消失的水平间距。
  • 命令\stretch{⟨n⟩} 生成一个特殊弹性长度,参数⟨n⟩ 为权重。它的基础长度为0pt,但可以无限延伸,直到占满可用的空间。如果同一行内出现多个\stretch{⟨n⟩},这一行的所有可用空间将按每个\stretch 命令给定的权重⟨n⟩ 进行分配。
  • \quad\qquad 命令, 分别相当于\hspace{1em} \hspace{2em}

2.5 垂直间距

A paragraph.

\vspace{2ex}
Another paragraph.
  • `vspace 命令生成的垂直间距在一页的顶端或底端可能被“吞掉”,类似\hspace 在一行的开头和末尾那样。对应地,\vspace* 命令产生不会因断页而消失的垂直间距。\vspace 也可用\stretch `设置无限延伸的垂直长度。
  • 在段落内的两行之间增加垂直间距,一般通过给断行命令\\ 加可选参数,如\\[6pt]\\*[6pt]\vspace 也可以在段落内使用,区别在于\vspace 只引入垂直间距而不断行:

  • LaTeX 还提供了\bigskip, \medskip, \smallskip 来增加预定义长度的垂直间距。

3. 页面和分栏

3.1 利用geometry 宏包设置页面参数

  • geometry 宏包的调用方式类似于graphicx,在latex + dvipdfmx 命令下需要指定选项 dvipdfm (注意这里不是dvipdfmx);pdflatex 和xelatex 编译命令下不需要。

    \usepackage{geometry}
    \geometry{⟨geometry-settings⟩}
    %或者
    \usepackage[⟨geometry-settings⟩]{geometry}
    
    • 其中⟨geometry-settings⟩ 多以⟨key⟩=⟨value⟩ 的形式组织。

    • 比如符合Microsoft Word 习惯的页面设定是A4 纸张,上下边距1 英寸,左右边距1.25 英寸

      \usepackage[left=1.25in,right=1.25in,%
      top=1in,bottom=1in]{geometry}
      % or like this:
      \usepackage[hmargin=1.25in,vmargin=1in]{geometry}
      
    • 习惯上奇数页右边、偶数页左边留出较多的页边距,而书脊一侧的奇数页左边、偶数页右边页边距较少

      \usepackage[inner=1in,outer=1.25in]{geometry}
      

3.2 页面内容垂直对齐

令页面在垂直方向向顶部对齐/ 分散对齐

\raggedbottom
\flushbottom

3.3 分栏

\onecolumn
\twocolumn[⟨one-column top material⟩]
  • \twocolumn 支持带一个可选参数,用于排版双栏之上的一部分单栏内容。
  • 切换单/双栏排版时总是会另起一页(\clearpage)
  • 在双栏模式下使用\newpage 会换栏而不是换页;\clearpage 则能够换页。
  • 双栏排版时每一栏的宽度为\columnwidth,它由\textwidth 减去\columnsep 的差除以2 得到。两栏之间还有一道竖线,宽度为\columnseprule,默认为零,也就是看不到竖线。

一个比较好用的分栏解决方案是multicol,它提供了简单的multicols 环境(注意不要写成multicol 环境)自动产生分栏,如以下环境将内容分为3 栏:

\begin{multicols}{3}
...
\end{multicols}
  • multicol 宏包能够在一页之中切换单栏/多栏,也能处理跨页的分栏且各栏的高度分布平 衡。
  • 在multicols 环境中无法正常使用table figure 等浮动体环境,它会直接让浮动体丢失。multicols 环境中只能用跨栏的table*figure* 环境,或者用float 宏包提供的H 参数固定浮动体的位置。

4. 页眉和页脚

  • 命令\pagestyle 来修改页眉页脚的样式\pagestyle{⟨page-style⟩}

  • 命令\thispagestyle 只影响当页的页眉页脚样式:\thispagestyle{⟨page-style⟩}

  • ⟨page-style⟩ 参数为样式的名称

    • article 文档类,twoside 选项偶数页为页码和节标题,奇数页为小节标题和页码;
    • article 文档类,oneside 选项页眉为节标题和页码;
    • book/report 文档类,twoside 选项偶数页为页码和章标题,奇数页为节标题和页码;
    • book/report 文档类,oneside 选项页眉为章标题和页码。
  • \pagenumbering 命令令我们能够改变页眉页脚中的页码样式:

    \pagenumbering{⟨style⟩}

    • ⟨style⟩ 为页码样式,默认为arabic(阿拉伯数字),还可修改为roman(小写罗马数字)、Roman(大写罗马数字)等。注意使用\pagenumbering 命令后会将页码重置为1。
  • 对于headings 或者myheadings 样式,LATEX 允许用户使用命令手动修改页眉上面的内容,

    • \markright{⟨right-mark⟩}
      \markboth{⟨left-mark⟩}{⟨right-mark⟩}
      
    • ⟨left-mark⟩ ⟨right-mark⟩ 的内容分别预期出现在左页(偶数页)和右页(奇数页)
  • 默认将页眉的内容都转为大写字母。如果你不喜欢这样,可以尝试以下代码

    \renewcommand\chaptermark[1]{\markboth{Chapter \thechapter\quad #1}{}}
    \renewcommand\sectionmark[1]{\markright{\thesection\quad #1}}
    
    • 以上代码适用于report/book 文档类。对于article 文档类,与两个页眉相关的命令分别为\sectionmark \subsectionmark
  • fancyhdr 宏包

    \pagestyle{fancy}
    
    \fancyhf[⟨position⟩]{}
    \fancyhead[⟨position⟩]{}
    \fancyfoot[⟨position⟩]{}
    
    • ⟨position⟩ 为L(左)/C(中)/R(右)以及与O(奇数页)/E(偶数页)字母的组合。

    • \fancyhf 用于同时定义页眉和页脚,习惯上使用\fancyhf{} 来清空页眉页脚的设置。

    • fancyhdr 还支持用\fancypagestyle 为自定义的页眉页脚样式命名,或者重新定义已有的样式如plain 等:

      % 自定义myfancy 样式
      \fancypagestyle{myfancy}{ %
      \fancyhf{}
      \fancyhead{...}
      \fancyfoot{...}
      }
      % 使用样式
      \pagestyle{myfancy}
      
    • %fancyhdr 基础用法的一个示例,效果为将章节标题放在和headings 一致的位置,但使用加粗格式;页码都放在页脚正中;修改横线宽度,“去掉”页脚的横线。
      % 在导言区使用此代码
      \usepackage{fancyhdr}
      \pagestyle{fancy}
      \renewcommand{\chaptermark}[1]{\markboth{#1}{}}
      \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
      \fancyhf{}
      \fancyfoot[C]{\bfseries\thepage}
      \fancyhead[LO]{\bfseries\rightmark}
      \fancyhead[RE]{\bfseries\leftmark}
      \renewcommand{\headrulewidth}{0.4pt} % 注意不用\setlength
      \renewcommand{\footrulewidth}{0pt}
      

六、特色工具和功能

1. 参考文献和BIBTEX 工具

%基本的使用
\cite{⟨citation⟩}

\begin{thebibliography}{⟨widest label⟩}
\bibitem[⟨item number⟩]{⟨citation⟩} ...
\end{thebibliography}
  • ⟨citation⟩ 为引用的参考文献的标签,类似\ref 里的参数;
  • \cite 带一个可选参数,为引用的编号后加上额外的内容,如\cite[page 22]{Paper2013} 可能得到形如[13, page 22] 这样的引用。
  • ⟨item number⟩ 自定义参考文献的序号,如果省略,则按自然排序给定序号。
  • ⟨widest label⟩ 用以限制参考文献序号的宽度,如99 意味着不超过两位数字。

BiBTeX 数据库手册链接

  • BiBTeX 数据库以.bib 作为扩展名,其内容是若干个文献条目
    • **article **学术论文,必需字段有author, title, journal, year; 可选字段包括volume, number,pages, doi 等;
    • **book **书籍,必需字段有author/editor, title, publisher, year; 可选字段包括volume/number,series, address 等;
    • **incollection **论文集中的一篇,必需字段有author, title, booktitle, publisher, year; 可选字段包括editor, volume/number, chapter, pages, address 等;
    • **inbook **书中的一章,必需字段有author/editor, title, chapter/pages, publisher, year; 可选字段包括volume/number, series, address 等。
    • **inproceedings ** An article in a conference proceedings. Required fields:author, title, booktitle, year. Optional fields: editor, volume or number, series, pages, address, month, organization, publisher,note.
    • **manual ** Technical documentation. Required fi eld: title. Optional fi elds:author, organization, address, edition, month, year, note.
    • **mastersthesis ** A Master’s thesis. Required fields: author, title, school,year. Optional fields: type, address, month, note.
    • **misc **Use this type when nothing else fi ts. Required fi elds: none. Optional fields: author, title, howpublished, month, year, note.
    • **phdthesis **A PhD thesis. Required fields: author, title, school, year. Optional fields: type, address, month, note.
    • **proceedings ** The proceedings of a conference. Required fi elds: title, year.Optional fields: editor, volume or number, series, address, month, organization, publisher, note.
    • **techreport ** A report published by a school or other institution, usually numbered within a series. Required fields: author, title, institution, year. Optional fields: type, number, address, month, note.
    • **unpublished ** A document having an author and title, but not formally published. Required fields: author, title, note. Optional fi elds: month, year.

BiBTeX 样式

使用样式文件的方法

\bibliographystyle{⟨bst-name⟩}
  • ⟨bst-name⟩ 为.bst 样式文件的名称,不要带.bst 扩展名。
  • \nocite{⟨citation⟩} 命令列出未被\cite引用的文献, 而\nocite{*} 则让所有未被引用的文献都列出。
  • 在需要列出参考文献的位置\bibliography{⟨bib-name⟩}
    • 其中⟨bib-name⟩ 是BiBTeX 数据库的文件名,不要带.bib 扩展名。

natbib 宏包

使用人名——年份的引用方式,形如(Axford et al., 2013)

\citep{⟨citation⟩}
\citet{⟨citation⟩}
  • 分别生成 (Axford et al., 2013) 和Axford et al. (2013)
  • natbib 提供了与LATEX 预定义样式相对应的几个样式,包括plainnat、abbrvnat 和unsrtnat
  • natbib 宏包同样也支持数字引用,并且支持将引用的序号压缩,例如\usepackage[numbers,sort&compress]{natbib},连续引用多篇文献时,会生成形如(3-7) 的引用而不是(3,4, 5, 6, 7)。

biblatex 宏包

biblatex 宏包是一套基于LaTeX 宏命令的参考文献解决方案,提供了便捷的格式控制和强大的排序、分类、筛选、多文献表等功能

2. 索引和makeindex 工具

  • 第一步,在LATEX 源代码的导言区调用makeidx 宏包,并使用\makeindex 命令开启索引的收集:

    \usepackage{makeidx}
    \makeindex
    
  • 第二步,在正文中需要索引的地方使用\index 命令。\index 命令的参数写法详见下一小节;并在需要输出索引的地方(如所有章节之后)使用\printindex 命令。

    \index{⟨index entry⟩}
    

    • %示例代码
      Test index.
      \index{Test@\textsf{""Test}|(textbf}
      \index{Test@\textsf{""Test}!sub@"|sub"||see{Test}}
      \newpage
      Test index.
      \index{Test@\textsf{""Test}|)textbf}
      
  • 第三步,编译过程:

3. 使用颜色

color 宏包或者xcolor 宏包提供了对颜色的支持,给PDF 输出生成颜色的特殊指令。

\color[⟨color-mode⟩]{⟨code⟩}
\color{⟨color-name⟩}
  • color 宏包支持rgb、cmyk 和gray 模型, xcolor 支持更多的模型如hsb 等。
\large\sffamily
{\color[gray]{0.6} 60\% 灰色} \\
{\color[rgb]{0,1,1} 青色}
{\color{red} 红色} \\
{\color{blue} 蓝色}

  • xcolor 还支持将颜色通过表达式混合或互补
\large\sffamily
{\color{red!40} 40\% 红色}\\
{\color{blue}蓝色
\color{blue!50!black}蓝黑
\color{black}黑色}\\
{\color{-red}红色的互补色}
  • 自定义颜色名称

    \definecolor{⟨color-name⟩}{⟨color-mode⟩}{⟨code⟩}
    
  • 原始的\color 命令类似于字体命令\bfseries它使之后排版的内容全部变成指定的颜色,所以直接使用时通常要加花括号分组.

带颜色的文本和盒子

  • 输入带颜色的文本可以用类似\textbf 的命令:

    \textcolor[⟨color-mode⟩]{⟨code⟩}{⟨text⟩}
    \textcolor{⟨color-name⟩}{⟨text⟩}
    
  • 以下命令构造一个带背景色的盒子,⟨material⟩ 为盒子中的内容:

    \colorbox[⟨color-mode⟩]{⟨code⟩}{⟨material⟩}
    \colorbox{⟨color-name⟩}{⟨material⟩
    
  • 以下命令构造一个带背景色和有色边框的盒子,⟨fcode⟩ 或⟨fcolor-name⟩ 用于设置边框颜色:

    \fcolorbox[⟨color-mode⟩]{⟨fcode⟩}{⟨code⟩}{⟨material⟩}
    \fcolorbox{⟨fcolor-name⟩}{⟨color-name⟩}{⟨material⟩}
    
    %示例代码
    \sffamily
    文字用\textcolor{red}{红色}强调\\
    \colorbox[gray]{0.95}{浅灰色背景} \\
    \fcolorbox{blue}{yellow}{ %
    \textcolor{blue}{蓝色边框+文字,%
    黄色背景}
    }
    

4.使用超链接

hyperref 宏包

  • 为减少可能的冲突,习惯上将hyperref 宏包放在其它宏包之后调用。
%配置参数
\hypersetup{⟨option1⟩,⟨option2⟩={value},…}
\usepackage[⟨option1⟩,⟨option2⟩={value},…]{hyperref}

超链接

\url{⟨url⟩}
\nolinkurl{⟨url⟩}
  • \url 和\nolinkurl 都生成可以点击的URL,区别是前者有彩色,后者没有。在\url 命令中作为参数的URL 里,可直接输入如%、& 这样的特殊符号。
\href{⟨url⟩}{⟨text⟩}
  • 使用hyperref 宏包后,文档中所有的引用、参考文献、索引等等都转换为超链接
  • 用户也可对某个\label 命令定义的标签⟨label⟩ 作超链接(注意这里的⟨label⟩ 虽然是可选参数的形式, 但通常是必填的2)\hyperref[⟨label⟩]{⟨text⟩}
  • 默认的超链接在文字外边加上一个带颜色的边框(在打印PDF 时边框不会打印),可指定colorlinks 参数修改为将文字本身加上颜色,或修改pdfborder 参数调整边框宽度以“去掉”边框;hidelinks 参数则令超链接既不变色也不加边框。

PDF 书签

\pdfbookmark[⟨level⟩]{⟨bookmark⟩}{⟨anchor⟩}
  • ⟨bookmark⟩ 为书签名称,⟨anchor⟩ 为书签项使用的锚点(类似交叉引用的标签)。可选参数⟨level⟩为书签的层级,默认为0。

  • 对于未被处理的命令或数学公式,就要在章节标题中使用如下命令,分别提供LaTeX 代码和PDF 书签可用的纯文本:

    \texorpdfstring{⟨LATEX code⟩}{⟨PDF bookmark text⟩}
    %\texorpdfstring{⟨LATEX code⟩}{⟨PDF bookmark text⟩}
    \section{质能公式\texorpdfstring{$E=mc^2$}{E=mc\textasciicircum 2}}
    

PDF 文档属性

hyperref 宏包还提供了一些参数用于改变PDF 文档的属性,见上表。

七、绘图功能[未学习,仅浏览一遍,推荐Visio]

八、自定义LATEX 命令和功能

1. 自定义命令和环境

  • \cmd 负责输出命令的名字,包括前面的反斜杠

定义新命令

\newcommand{\⟨name⟩}[⟨num⟩]{⟨definition⟩}
  • ⟨name⟩ 是你想要建立的命令的名称(带反斜杠),

  • ⟨definition⟩ 是命令的定义。

  • ⟨num⟩ 是可选的,用于指定新命令所需的参数数目(最多9 个)。如果缺省可选参数,默认就是0,

  • 演示了如何定义一个带参数的命令。在命令的定义中,标记#1 代表指定的参数。如果想使用多个参数,可以依次使用#2、……、#9 等标记。

    \newcommand{\txsit}[1]
        {This is the \emph{#1} Short
        	Introduction to \LaTeXe}
    % in the document body:
    \begin{itemize}
        \item \txsit{not so}
        \item \txsit{very}
    \end{itemize}
    
  • LaTeX 不允许你定义一个与现有命令重名的命令。如果需要修改命令定义的话,使用\renewcommand命令。它使用与命令\newcommand 相同的语法。

  • \providecommand 命令。在命令不存在时,它相当于\newcommand ;在命令已经存在时,仍沿用存在的定义。

定义环境

\newenvironment{⟨name⟩}[⟨num⟩]{⟨before⟩}{⟨after⟩}
  • ⟨before⟩ 中的内容将在此环境包含的文本之前处理,而在⟨after⟩ 中的内容将在遇到\end{⟨name⟩} 命令时处理。

    %示例程序
    \newenvironment{king}
    {\rule{1ex}{1ex}%
    \hspace{\stretch{1}}}
    {\hspace{\stretch{1}}%
    \rule{1ex}{1ex}}
      
    \begin{king}
    My humble subjects \ldots
    \end{king}
    
  • 参数⟨num⟩ 的使用方式与\newcommand 命令相同

  • \renewenvironment改变一个现有的环境

2. 编写自己的宏包和文档类

编写简单的宏包

  • 需要以.sty 作扩展名

  • 加入一个宏包专用的命令:\ProvidesPackage{⟨package name⟩}

  • ⟨package name⟩ 需要和宏包的文件名一致

  • % Demo Package by Tobias Oetiker
    \ProvidesPackage{demopack}
    \newcommand{\tnss}{The not so Short Introduction
    to \LaTeXe}
    \newcommand{\txsit}[1]{The \emph{#1} Short
    Introduction to \LaTeXe}
    \newenvironment{king}{\begin{quote}}{\end{quote}}
    
  • 在宏包中调用其它宏包 \RequirePackage[⟨options⟩]{⟨package name⟩}

编写自己的文档类

  • 文档类以.cls 作扩展名
  • 开头使用\ProvidesClass{⟨class name⟩}
  • {⟨class name⟩} 也需要和文档类的文件名一致。
  • \LoadClass[⟨options⟩]{⟨package name⟩},调用一个基本的文档类

3. 计数器

定义和修改计数器

\newcounter{⟨counter name⟩}[⟨parent counter name⟩]
  • ⟨counter name⟩ 为计数器的名称。计数器可以有上下级的关系,可选参数⟨parent countername⟩ 定义为⟨counter name⟩ 的上级计数器。
\setcounter{⟨counter name⟩}{⟨number⟩}
\addtocounter{⟨counter name⟩}{⟨number⟩}
\stepcounter{⟨counter name⟩}
  • \setcounter 将数值设为⟨number⟩
  • \addtocounter将数值加上⟨number⟩
  • \stepcounter 将数值加一,并将所有下级计数器归零。

计数器的输出格式

  • 计数器⟨counter⟩ 的输出格式由\the⟨counter⟩ 表示,比如\thechapter, \theequation

  • \renewcommand\theequation{\Alph{equation}}修改计数器格式

    • 这些命令只能用于计数器,不能直接用于数字

    • 计数器的输出格式还可以利用其它字符,甚至其它计数器的输出格式与之组合\renewcommand\thesubsection{\thesection.\arabic{subsection}}

LaTeX 中的计数器

  • 所有章节命令\chapter、\section 等分别对应计数器chapter、section 等等,而且有上下级的关系。而计数器part 是独立的。
  • 有序列表enumerate 的各级计数器为enumi, enumii, enumiii, enumiv,也有上下级的关系。
  • 图表浮动体的计数器就是table 和figure;公式的计数器为equation。这些计数器在article文档类中是独立的,而在book 和report 中以chapter 为上级计数器。
  • 页码、脚注的计数器分别是page 和footnote。
%示例,把页码修改成大写罗马字母,左右加横线,或是给脚注加上方括号:
\renewcommand\thepage{--~\Roman{page}~--}
\renewcommand\thefootnote{[\arabic{footnote}]}
  • secnumdepth计数器控制章节编号的深度,如果章节的层级大于secnumdepth,那么章节的标题、在目录和页眉页脚的标题都不编号(照常生成目录和页眉页脚),章节计数器也不计数。
    • 可以用\setcounter 命令设置secnumdepth 为较大的数使得层级比较深的章节也编号,如设置为4 令\paragraph 也编号;或者设置一个较小的数以取消编号,如设置为-1 令\chapter 不编号。
    • secnumdepth 计数器在article 文档类里默认为3 (subsubsection 一级);在report 和book文档类里默认为2 (subsection 一级)
  • tocdepth计数器控制目录的深度。如果章节的层级大于tocdepth,那么章节将不会自动写入目录项。默认值同secnumdepth。

4. LaTeX 可定制的一些命令和参数

  • 标题名称/前后缀等。表中所有的LaTeX 命令都可以用\renewcommand 来修改

  • 长度。前文在叙述各种排版元素时已经涉及到一些。表中所有的长度命令可用\setlength 来修改。大多数控制页面尺寸的长度参数在图5.1 给出,此处不再赘述。