LaTeX 简介
课上抄的
LaTeX 是:
- 一个以排版文章以及数学公式为目标的计算机程序
- 充当了文档设计者和排版者
- 与 Word 等所见即所得的方式有着巨大区别
- 强制使用者声明文档的逻辑结构,避免版式错误
LaTeX 与 Word 区别
- Word 所遵循的思想是“所见即所得”,输出的文档效果与屏幕上显示一致, LateX 所遵循的思想是“所想即所得”,它有非常强大的功能,但入门学习要难于 Word,用 LaTeX 编写页面与最终得到的 pdf 有着较大的区别
- 从美学观点来看,由于 LaTeX 强大的排版功能,尤其是强大的数学公式编辑功能,使得 LaTeX 排版出来的文档美观性一般强于 Word,这点在科技文档中尤为明显。此外,在编辑一份含大量公式的文档时,LaTeX 的稳定性高于 Word。
- 完成一篇篇幅较长,含有很多插图,表格和公式的论文后,一旦论文需要修改,Word 在排版上会发生巨大的工作量,而 LaTeX 的工作量则要小得多。
- 大部分国内外杂志,要求寄去的文章按 LateX 格式排版,国内越来越多的学校开始鼓励毕业论文采用 LaTeX 编写。
编译器、IDE 及 参考书
重度使用推荐 TeX Live 和 TeXStudio。轻度使用可以使用在线编辑器 Overleaf。
参考书推荐:一份不太简短的LaTeX教程.pdf。
另外推荐我编写的:LaTeX常见语法,去掉了该文中复杂的部分,推荐快速入门。
配置环境可见 配置 LaTeX 开发环境。
在 tex 代码的开头使用如下注释可指定 xelatex 进行编译。
1 | % !TEX program = xelatex |
Hello, world
1 | \documentclass{article} % 源文件第一行必须是介个 |
更多 documentclass
可以自己查询。
在接下来的学习中,可以使用 Bing/Google 到的模板。
你好,LaTeX
原生 LaTeX 不支持中文。需要引入包。课程使用的是 CJK
。但是在我的 TeXstudio 编译不过??????
引入包的格式是在 begin{document}
后使用 \usepackage[option]{packagename}
1 | \documentclass{article} |
于是我采用了另一个 ctex
包。ctex
用法可见官方文档。
1 | \documentclass{article} |
自带的六种字体见下表:
命令 | 字体 |
---|---|
\songti |
宋体 |
\heiti |
黑体 |
\fangsong |
仿宋 |
\kaishu |
楷书 |
\lishu |
隶书 |
\youyuan |
幼圆 |
字号 \zihao
、字距 \ziju
等特殊格式请查阅 ctex 官方文档。
文档基本符号
空格、回车
转义的字词后,空格不起作用,除了使用 \space
,还可以使用"\ "
(不含引号,最常用)、\,
、\;
、\:
。
MathJax 的写法:\space
、\\;
、"\\ "
(不含引号)。
换行使用 \endline
、\\
,也可以使用两个回车。一个回车没有用。(MathJax 中得 \\\\
)
连续换行使用 \\ \\
会编译不过,需要使用一个 ~
以占位:\\~\\
。
注释
- 单行注释:直接加入
%
即可; - 多行注释:
1 | \usepackage{verbatim} |
特殊符号
\LaTeX
即能打出 $\rm\LaTeX$ 的官方图标。~
在 LaTeX 为空白符,如果想要显示这个字符,请使用\textasciitilde
(非数学环境中)或\sim
(数学环境中)%
注释_
为下标,如果想要显示这个字符,请使用\_
进行转义。如果你有很多的_
需要打,可以使用\usepackage{underscore}
,在非数学模式下使用_
时就无需转义啦。
文档格式
文字格式
- 粗体:
\textbf{}
; - 斜体:
\emph{}
; - 下划线:
\underline{}
(这是唯一一个数学公式外能用的数学公式功能)。
可以进行叠加: \textbf{\emph{\underline{Hello}}}
。
下划线处理大段文字时,不能自动换行(大概是数学公式并不需要换行)。
需要引入 ulem
宏包,并将 \underline
改为 \ulem
。
如果中文包使用的是 CJK
,需要将引入的宏包改为 CJKulem
。
段落格式
分页:\newpage
、\clearpage
;
使用 \noindent
以去掉首行缩进,使用 \indent
以加入首行缩进。
左对齐:\begin{flushleft}
(默认,所以不常用)
右对齐:\begin{flushright}
居中:\begin{center}
章节格式
- 通用:
\part{}
、\paragraph{}
、\subparagraph{}
、 \section{}
、\subsection{}
、\subsubsection{}
关联编号(即1.1.1
)。- 在
book
类中,\section
以上还有一级更高的 :\chapter{}
。 \section*{}
不参与自动编号。
页面间距格式
1 | \usepackage{geometry} |
分栏
此部分源码及 PDF 见:https://github.com/lyh543/UESTC_LaTeX_Template/blob/master/Course_Thesis_others/心理学漫谈
1 | \begin{multicols}{2} % 双栏控制 |
文档信息及标题
\title{}
:标题。\author{}
:作者信息,以及邮件信息等等。如需换行,可在大括号中使用换行。\date{2017\\December}
:日期
以上命令可放全局变量位置或文档正文位置。
然后在正文里调用一句 \maketitle
产生标题及以上信息。
引用参考文献
LaTeX 的引用原理是给每个文献写一个好记的名字,然后引用的时候直接引用名字。
编译的时候自动对文献进行标号,并将引用处和文献根据名字绑定,然后标号。最后名字是不会呈现在文档里的。好评。
了解了原理以后,基本也是无脑抄板子。不需要额外的库。
1 | \documentclass{article} % 源文件第一行必须是介个 |

摘要和关键字
摘要可以用自带的,但是关键字需要自己写。
1 | \begin{abstract} |
如果你正在中文环境上写英文文章,你就会遇到啼笑皆非的情况和我一样:英文摘要上方写着大大的汉字“摘要”!
遇到这种情况,你只需要在摘要前加一行代码:
1 | \renewcommand{\abstractname}{Your Abstract Name} |
就可以把你的摘要标题变为 Your Abstract Name
了。
数学公式
正式学 LaTeX 之前我就开始写数学公式了,所有内容我就放在另外一篇博客了。
表格
创建表格,除了自己编辑,还可以使用生成工具,如:
https://tablesgenerator.com/
https://github.com/krlmlr/Excel2LaTeX
创建表格
使用 \begin{tabular}
\end{tabular}
和 &
\\
即可创建表格。
和数学矩阵一样,在 \begin{tabular}
后加入 {clcr}
即可说明每一列的对齐方式(c
居中,l
左对齐、r
右对齐)。
1 | \begin{tabular}{cl} |

给表格加边框
可以看到,如不加说明,LaTeX 表格是不带边框的。
如果要对一整行添加水平边框,在行间(或第一行前,最后一行后,下同)使用 \hline
命令即可。
注意最后一行加边框时,最后一行必须换行 \\
。
如需部分列添加水平边框(如想在第 i 列到第 j 列加入边框),将 \hline
换为 \cline{i-j}
的形式即可。
如果只有一列,则需使用 \cline{i-i}
。
如果需要添加多个间断的水平边框,连续使用多个命令(如 \cline{1-2}\cline{4-4}
即可。
对于竖直边框,在表格 \begin
的 clr
部分加入 |
即可,如 \begin{tabular}{|c|l|rr|}
。
如果需要间断的数值边框,书上说的 \vline
,但是貌似不可用,会歪的。
1 | \begin{tabular}{|c|lr|} |

合并单元格
这一段会比较硬核,于是再分三个小段讲。
合并水平单元格
这是最简单的。格式为 \multicolumn{2}{|c|}{ef}
。
- 第一个
{2}
为要合并的水平单元格数量; - 第二个
{|c|}
表示该单元格的对齐方式和列边框(会覆盖掉上面的列边框设置); - 第三个
{ef}
为文本格式。
注意合并单元格以后,该行的 &
数较其他行会少一些。
测试的时候不要把每一行的同两列都合并了,不然合并了还是没效果。(逃
合并竖直单元格
合并竖直单元格还需要调宏包 \usepackage{multirow}
。
调用格式为(在合并的第一行写) \multirow{2}{*}{ab}
。
{2}
和 {ab}
和上述的意思相近,注意这里的 {*}
是需要无脑抄的参数,没有会报错。
另外,\cline
和 \hline
设置不会被覆盖,需要自己调整(要不就会出现单元格被穿过去的情况)。
同时合并行和列
虽然理论实现非常简单,就是上述两个语句的嵌套,但是因为细节太多太多,这才是最硬核的部分。
- 仍然需要在合并的第一行调用。
- 必须
\multicolumn
在外,\multirow
在内,如\multicolumn{2}{c|}{ \multirow{2}{*}{gh} }
。不然会报错。 - 合并的后面几行需要写
\multicolumn
,数量和列对齐格式和第一行的\multicolumn
相同,内容留空{}
。
最后是以上几个例子的综合实例。
1 | \begin{tabular}{|c|c|c|c|} |

美观地插入表格
上面是“如何创建一个表格”,这一部分是“如何将表格美观的插入文档”。
如下是无脑抄板子:
1 | \begin{table}[!hbp] % 有关[!hbp],详见:插入浮动体 |
有关 [!hbp]
等,详见:插入浮动体。
对表格进行缩放 防止超宽
遇到超宽的表格,我们可以使用 \begin{adjustbox}...\end{adjustbox}
对其进行缩放。
1 | \documentclass{article} |

标准三线表格
1 | \begin{table}[!htbp] |

另外,[Table Generator] 也支持标准三线表格,只需将 Default Table Style
改为 Booktabs Table Style
。
tabular* 表格
tabular* 在兼容 tabular 的语法上,又增加了功能。
一是必须指定表格的总宽度,二是可以将所有列在设定的表格宽度中均匀展开(即让表格横向均匀展开,不留横向空位)。
不需要新的宏包。
1 | \begin{tabular*}{10cm}{lll} |
这是没有横向展开的。把第一行的 {lll}
改为 {@{\extracolsep{\fill}}lll}
即可横向展开。下面是两个对比图。


tabularx 表格
tabularx 也可以实现对表格总宽度的设定。
1 | \begin{tabularx}{8cm}{llX} |

文档内容元素
这部分的内容,Markdown 也有,但是 LaTeX 可以调各种参数,功能强大。相对应的,命令也会比较长。
Markdown 真香
水平横线
Markdown 里的预览:
LaTeX 版本:
1 | \rule[raise-height]{width}{thickness} |
分条目命令
无标号
Markdown 里的预览:
- a
- b
LaTeX 版本:
1 | \begin{itemize} |
[*]
可以不要(即默认使用黑点),或者换成其他的符号 +
-
等。
数字标号
Markdown 里的预览:
- a
- b
LaTeX 版本:
1 | \usepackage{enumerate} |
也可以使用其他的标号,修改 [1.]
部分即可。
文字描述
1 | \begin{description} |

插入图片
1 | \includegraphics{file.pdf} % 按图片原尺寸插入图片 file.pdf |
插入的图片可以是 pdf
、png
等格式。对于矢量图,不能插入 svg
,推荐打印成 pdf 后剪裁成图片,就可以插入了。
美观的插入图片
依旧是抄板子。
1 | \begin{figure}[H] |
- 有关这段代码的详细解释,详见:插入浮动体。
插入子图
可自行排列。由于情况较复杂,可见 https://blog.csdn.net/a6822342/article/details/80533135
插入浮动体
表格的 \table
和图片的 \figure
等都算是浮动体,他们有类似的语法体系。
下面以插入图片为例:
1 | \begin{figure}[H] |
关于 [!hbp]
的解释如下(默认为 [tbp]
):
- ! 严格按照说明放置,即使看起来不好。(请谨慎的使用)
- h (here) 浮动体尽量放在代码对应的位置上。这主要用于小浮动体
- t (top) 尽量放在页面顶部
- b (bottom) 尽量放在页面底部
- p (page) 放在一专门页面,仅含一个浮动体
- H (Here) 使得浮动体严格地放在代码对应的位置上
- 需要
\usepackage{float}
H
的好处是照片不会和下面的文字错位,但坏处是如果页面放不下,图片会放在在下一页开头,但当前页会有大量空白。
- 需要
- 上述字母的顺序不重要($LaTeX$ 用固定的算法摆放浮动体,中括号的内容仅决定 $LaTeX$ 是否跳过该方法。参考)
如果把 \caption{标题名称}
写在 \includegraphics
之前,则得到的图片的标题在图片的上面。
\label{fig1}
是这个图片的标签,在别的地方那个引用这个图片的话,用 \ref{fig1}
就可以了。(注意:\label
必须放在 \caption
命令的后面,如果放在其他的地方,则插图的计数器就会出错)
插入代码
1 | \begin{lstlisting}[caption={一段C代码}, label={lst:code-example}, captionpos=t, language=c] |
使用 LaTeX 制作幻灯片
什么是 beamer?
beamer 是 LaTeX 的一个文档类,和 article、 book 一样;beamer 主要是写幻灯片用的,目前表现最好的书写幻灯片的宏包之一;采用 LaTeX 命令来组织幻灯片,用 frame
命令生成单页幻灯片(Slide
)。
Hello, World!
先跑一下,看下什么效果。
如果编译不过,请参照文末解决。
1 | \documentclass[red]{beamer} |
需要说明的几点:
\usetheme{}
显然是用来换主题的。可供选择的有:Madrid
、Warsaw
、CambridgeUS
;\begin{frame}
\end{frame}
是 beamer 里面重要的概念,每一个frame
定义了一张 Page。
bug 及可能的解决方法
无法编译/更新宏包
这里仅列举 beamer 编译不成功的例子,其他宏包是类似的。
使用 beamer 编译不能成功, 可能是使用的 beamer, pgf, xcolor 宏包需要更新,更新地址为:
当然也可以使用 LaTeX 发行版提供的宏包管理工具beamer 更新地址: http://sourceforge.net/projects/latex-beamer/
pgf 更新地址: http://sourceforge.net/projects/pgf/
xcolor 更新地址: http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor/具体更新步骤如下:
(1) 下载: 下载最新的
beamer
,pgf
,xcolor
包;
(2) 安装: 找到 TeX 的安装目录texmf
, 放到下面的地方即可:texmf/tex/latex/beamer
,texmf/tex/latex/pgf
,texmf/tex/latex/xcolor
这里有一个细节要注意一下: 如果texmf/tex/latex/
目录下原来有beamer
,pgf
等文件夹, 宜先删除原有的旧文件夹, 再粘贴新文件。(直接覆盖的话,可能会因为文件名不同,使旧文件没有被删除。)