前言:排版工具与书写工具的讨论
LaTeX是一种“非所见即所得”的排版系统,用户需要输入特定的代码,保存在后缀为.tex的文件中,通过编译得到所需的pdf文件,例如以下代码:
1 | \documentclass{article} |
最后输出的结果是一个pdf文件,内容是”Hello, world!“。
如何理解“非所见即所得”呢?在这里举个“所见即所得”的例子:Word。Word的界面就是一张A4纸,输入的时候是什么样子,最后呈现出来就是什么样子。这给了我们极高的自由度,也非常容易上手,但是有如下问题: - 对于对细节不敏感的用户,Word的排版常常会在细节存在问题,比如两段话之间行间距不同、字体不同、标题样式不同等; - 对于撰写论文的用户,Word的标题、章节、图表、参考文献等无法自动标号,也很难在正文中引用; - 对于有公式输入需求的用户,Word自带的公式不稳定,而公式插件效果常常不好。
相比之下,使用LaTeX进行排版,就像是在铺好的轨道上驾驶火车一样。使用LaTeX没有办法像Word一样非常自由,但是可以保证规范性,这使得LaTeX非常适合用于论文的排版。在学习的过程中,也将会感受到这一点。
无论是LaTeX还是Word,其归根结底都只是排版工具,用Word也可以排出LaTeX的效果,用LaTeX也可以排出Word的效果。另外,笔者最建议的书写工具是Markdown,其书写的过程中可以不在意排版,也支持使用LaTeX语法输入公式,与LaTeX之间的转换非常方便。
利用LaTeX编写文档
文档类型
TeX有多种文档类型可选,笔者较常用的有如下几种类型:
- 对于英文,可以用
book
、article
和beamer
; - 对于中文,可以用
ctexbook
、ctexart
和ctexbeamer
,这些类型自带了对中文的支持。
不同的文件类型,编写的过程中也会有一定的差异,如果直接修改文件类型的话,甚至会报错。以下统一选用ctexart
。在编辑框第一行,输入如下内容来设置文件类型:
1 | \documentclass{ctexart} |
另外,一般也可以在\documentclass
处设置基本参数,笔者通常设置默认字体大小为12pt,纸张大小为A4,单面打印。需要将第一行的内容替换为:
1 | \documentclass[12pt, a4paper, oneside]{ctexart} |
文件的正文部分需要放入document环境中,在document环境外的部分不会出现在文件中。
1 | \documentclass[12pt, a4paper, oneside]{ctexart} |
宏包
为了完成一些功能(如定理环境),还需要在导言区,也即document环境之前加载宏包。加载宏包的代码是\usepackage{}
。本份教程中,与数学公式与定理环境相关的宏包为amsmath
、amsthm
、amssymb
,用于插入图片的宏包为graphicx
,代码如下:
1 | \usepackage{amsmath, amsthm, amssymb, graphicx} |
另外,在加载宏包时还可以设置基本参数,如使用超链接宏包hyperref
,可以设置引用的颜色为黑色等,代码如下:
1 | \usepackage[bookmarks=true, colorlinks, citecolor=blue, linkcolor=black]{hyperref} |
标题
标题可以用\title{}
设置,作者可以用\author
设置,日期可以用\date{}
设置,这些都需要放在导言区。为了在文档中显示标题信息,需要使用\maketitle
。例如:
1 | \documentclass[12pt, a4paper, oneside]{ctexart} |
正文
正文可以直接在document环境中书写,没有必要加入空格来缩进,因为文档默认会进行首行缩进。相邻的两行在编译时仍然会视为同一段。在LaTeX中,另起一段的方式是使用一行相隔,例如:
1 | 我是第一段. |
这样编译出来就是两个段落。在正文部分,多余的空格、回车等等都会被自动忽略,这保证了全文排版不会突然多出一行或者多出一个空格。另外,另起一页的方式是:
1 | \newpage |
笔者在编写文档时,为了保证美观,通常将中文标点符号替换为英文标点符号(需要注意的是英文标点符号后面还有一个空格),这比较适合数学类型的文档。
在正文中,还可以设置局部的特殊字体:
字体 | 命令 |
---|---|
直立 | |
意大利 | |
倾斜 | |
小型大写 | |
加宽加粗 |
章节
对于ctexart
文件类型,章节可以用\section{}
和\subsection{}
命令来标记,例如:
1 | \documentclass[12pt, a4paper, oneside]{ctexart} |
目录
在有了章节的结构之后,使用\tableofcontents
命令就可以在指定位置生成目录。通常带有目录的文件需要编译两次,因为需要先在目录中生成.toc文件,再据此生成目录。
1 | \documentclass[12pt, a4paper, oneside]{ctexart} |
图片
插入图片需要使用graphicx
宏包,建议使用如下方式:
1 | \begin{figure}[htbp] |
其中,[htbp]
的作用是自动选择插入图片的最优位置,\centering
设置让图片居中,[width=8cm]
设置了图片的宽度为8cm,\caption{}
用于设置图片的标题。
表格
LaTeX中表格的插入较为麻烦,可以直接使用Create LaTeX tables online – TablesGenerator.com来生成。建议使用如下方式:
1 | \begin{table}[htbp] |
列表
LaTeX中的列表环境包含无序列表itemize
、有序列表enumerate
和描述description
,以enumerate
为例,用法如下:
1 | \begin{enumerate} |
另外,也可以自定义\item
的样式:
1 | \begin{enumerate} |
定理环境
定理环境需要使用amsthm
宏包,首先在导言区加入:
1 | \newtheorem{theorem}{定理}[section] |
其中{theorem}
是环境的名称,{定理}
设置了该环境显示的名称是“定理”,[section]
的作用是让theorem
环境在每个section中单独编号。在正文中,用如下方式来加入一条定理:
1 | \begin{theorem}[定理名称] |
其中[定理名称]
不是必须的。另外,我们还可以建立新的环境,如果要让新的环境和theorem
环境一起计数的话,可以用如下方式:
1 | \newtheorem{theorem}{定理}[section] |
另外,定理的证明可以直接用proof
环境。
页面
最开始选择文件类型时,我们设置的页面大小是a4paper,除此之外,我们也可以修改页面大小为b5paper等等。
一般情况下,LaTeX默认的页边距很大,为了让每一页显示的内容更多一些,我们可以使用geometry
宏包,并在导言区加入以下代码:
1 | \usepackage{geometry} |
另外,为了设置行间距,可以使用如下代码:
1 | \linespread{1.5} |
页码
默认的页码编码方式是阿拉伯数字,用户也可以自己设置为小写罗马数字:
1 | \pagenumbering{roman} |
另外,aiph
表示小写字母,Aiph
表示大写字母,Roman
表示大写罗马数字,arabic
表示默认的阿拉伯数字。如果要设置页码的话,可以用如下代码来设置页码从0开始:
1 | \setcounter{page}{0} |
数学公式的输入方式
行内公式
行内公式通常使用$..$
来输入,这通常被称为公式环境,例如:
1 | 若$a>0$, $b>0$, 则$a+b>0$. |
若
公式环境通常使用特殊的字体,并且默认为斜体。需要注意的是,只要是公式,就需要放入公式环境中。如果需要在行内公式中展现出行间公式的效果,可以在前面加入\displaystyle
,例如
1 | 设$\displaystyle\lim_{n\to\infty}x_n=x$. |
设
行间公式
行间公式需要用\[..\]
或者$$..$$
来输入,推荐使用\[..\]
,输入方式如下:
1 | 若$a>0$, $b>0$, 则 |
若
关于具体的输入方式,可以参考在线LaTeX公式编辑器-编辑器 (latexlive.com),在这里只列举一些需要注意的。
上下标
上标可以用^
输入,例如a^n
,效果为 a^n
;下标可以用_
来输入,例如a_1
,效果为 a_1
。上下标只会读取第一个字符,如果上下标的内容较多的话,需要改成^{}
或_{}
。
分式
分式可以用\dfrac{}{}
来输入,例如\dfrac{a}{b}
,效果为
。为了在行间、分子、分母或者指数上输入较小的分式,可以改用\frac{}{}
,例如a^\frac{1}{n}
,效果为
括号
括号可以直接用(..)
输入,但是需要注意的是,有时候括号内的内容高度较大,需要改用\left(..\right)
。例如\left(1+\dfrac{1}{n}\right)^n
,效果是
在中间需要隔开时,可以用\left(..\middle|..\right)
。
另外,输入大括号{}时需要用\{..\}
,其中\
起到了转义作用。
加粗
对于加粗的公式,建议使用bm
宏包,并且用命令\bm{}
来加粗,这可以保留公式的斜体。
大括号
在这里可以使用cases
环境,可以用于分段函数或者方程组,例如
1 | $$ |
效果为
多行公式
多行公式通常使用aligned
环境,例如
1 | $$ |
效果为
矩阵和行列式
矩阵可以用bmatrix
环境和pmatrix
环境,分别为方括号和圆括号,例如
1 | $$ |
$。如果要输入行列式的话,可以使用vmatrix
环境,用法同上。
常用数学公式和符号
在latex中,字符 #、$、%、&、~、^、n、_、{、} 的含义特殊,不能直接表示
符号 | 命令 | 符号 | 命令 | 符号 | 命令 |
---|---|---|---|---|---|
$ | $ | % | % | { | { |
_ | _ | } | } | # | # |
& | & | ^ | ^{} | ~ | ~{} |
\ |
公式中常用到的希腊字母
符号 | 命令 | 符号 | 命令 | 符号 | 命令 |
---|---|---|---|---|---|
o O | |||||
各种运算符号
符号 | 命令 | 符号 | 命令 | 符号 | 命令 |
---|---|---|---|---|---|
() | |||||
< | > | ||||
符号 | 命令 | 符号 | 命令 | 符号 | 命令 |
---|---|---|---|---|---|
mod | |||||
sin | cos | ||||
tan | cot | sec | |||
csc | lg | ln |
字形字体设置
命令 | 实例 | 说明 |
---|---|---|
斜体加上文本框 | ||
添加文本框 | ||
字体加粗 | ||
斜体再加粗 | ||
A {A} | A |
加大字体 |
A {A} | A |
缩小字体 |
公式中常出现的式子样式
命令 | 实例 | 说明 |
---|---|---|
a^{b} | 上标(单字符可以省略{}) | |
a_{b} | 下标(单字符可以省略{}) | |
a_{bb} | 下标(多字符,不可省略{}) | |
开平方 | ||
开5次根号,根号下多个字符时用{} | ||
左右都有上下标 | ||
{}^{12}_{6} | 上下标都在左边 | |
分数 | ||
1+ | 分数,字体逐级变小 | |
1+ | 分数,字号为独立公式的大小 | |
组合数 | ||
组合数 | ||
组合数 | ||
下面字符大,上面字符小 | ||
{a b+c} | 上下符号等大 | |
{a b+c} | 上下符号等大,带括号 | |
_{i=a}^{b}c_i | 求和公式 |
|
_{i=a}^{b}c_i | limits和nolimits是否压缩 | |
_{i=a}^{b}c_i | 求积公式 | |
_{i=a}^{b}_c_i | limits和nolimits是否压缩 | |
_{a}^{b}f(x)dx | 求积分 | |
_{a}^{b}f(x)dx | limits和nolimits是否压缩 | |
二重积分 | ||
三重积分 | ||
积分形式 | ||
可自行调整 | ||
可自行调整 | ||
长度固定,适用单字符 | ||
长度不固定,适用多字符 | ||
长度不固定,适用多字符 | ||
{a} | 单个字母上面加上横线 | |
向量,单个字母 | ||
向量,多个字母 | ||
向量,多个字母 | ||
波浪线,单个字母 | ||
波浪线,多个字符 | ||
点 | ||
尖帽 | ||
大尖帽 | ||
声调 | ||
声调 | ||
声调 | ||
声调 | ||
声调 | ||
声调 | ||
(a^b) | 括号 | |
(a^b) | 括号,可变大小 | |
{a^b} | 括号 | |
a^b | 括号,可变大小 | |
[a^b] | 括号 | |
括号,可变大小 | ||
a^b | 括号 | |
a^b | 括号 | |
多个字母上面加横线 | ||
^{n} | 括号在上面 | |
_{n} | 括号在下面 | |
a b | 一个m的宽度 | |
a <!--qquad--> b | 两个m的宽度 | |
a : b | 1/3个m的宽度 | |
a : b | 2/7个m的宽度 | |
a , b | 1/6个m的宽度 | |
ab | 没有空格 | |
a ! b | 缩进1/6个m的宽度 |
公式中括号的应用,可以用一系列命令 (, , , ) 改变括号大小,例如
\Bigg( \bigg( \Big( \big((x) \big) \Big) \bigg) \Bigg)也可以用自动模式自动调节大小
”开辟一个环境,可以换行。
在单行文本中,不是只能写一行公式,而是整个公式占用一行,这里用到了
cases 环境,把多个情况放在一个公式中,每个情况用\换行
}x2-y2>55
还可以把括号放在左边,只需要换一下“影子括号”位置就可以了。
在 equation 环境中添加 array
环境,就可以实现数组或者表格的形式,其中每个元素用 & 分隔,
。公式中如果有中文,就要用或者装载,否则不能正常输出中文。
\left\{
表示一个左大括号,它会自动调整大小以适应其后的内容。通常,\left\{
配合 \right\}
使用,\right\}
表示相应的右大括号,以确保左右括号大小一致且适应所包裹内容的大小。.表示不显示右边的大括号。
表示数组、表格等环境,{ccc|c}表示表格格式,比如有几列等等。