使用 LaTeX 进行论文写作

前言

最近几个月一直在忙着跑实验,写论文,博客确实也是好久没有更新了,乘着最近论文搞得差不多了,碰巧也是在排版,来记录一下使用 LaTeX 进行论文写作的一些东西。

LaTeX 在线使用

有许多网站提供了 LaTeX 的在线练习使用,个人比较推荐 Overleaf,使用的人也比较多,不需要再下载安装。

基础知识

一个 LaTeX 文档是一个以 .tex 结尾的文本文件,可以使用任意的文本编辑器编辑,完成后你可以进行编译,转化为最常见的 PDF 格式。

我们通过一个简单的示例开始:首先在 Overleaf 上创建一个新的项目,名为 hello world,接着系统就自动创建了一个名为 main.tex 的文件并生成以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass{article}
\usepackage{graphicx} % Required for inserting images

\title{hello world}
\author{EmoryHuang}
\date{March 2023}

\begin{document}

\maketitle

\section{Introduction}

\end{document}

documentclass

1\documentclass{article} 指明文章的类型,花括号内的文本说明此文章的类型为 article,需要注意的是 \documentclass 命令必须出现在每个 LaTeX 文档的开头

除了 article 其他的类型还有 report, book 等等。

此外,我们还可以通过[]添加选项来进一步完善文档信息,例如

\documentclass[a4paper,12pt]{article}:设置纸张大小为 A4,主要文字大小为 12pt

添加宏包

2\usepackage{graphicx} 添加了一个名为 graphicx 的宏包,就和 python 中的 import xx 一样。

需要注意的是,%代表评论,之后同一行的字都不会被输出,类似地,可以使用 Ctrl+/ 来批量注释或批量取消注释。

此外,声明使用包的位置应该放置在文档的前导命令的位置,即 \documentclass{article}\begin{document} 之间,并使用 \usepackage[options]{package} 来引用包。

标题、作者、日期

4,5,6 行添加了标题、作者、日期信息,并通过第 10 行的 \maketitle 展现在文章中。

各位可以试试看在花括号内添加不同空格时的编译结果,观察实际输出结果。

1
2
3
% 下面两个编译结果是一样的
\title{hello world}
\title{hello world}

文档开始

8 行和第 14 行分别使用\begin{document}\end{document} 命令将你的文本内容包裹起来。任何在 \begin{documnet} 之前的文本都被视为前导命令,会影响整个文档。任何在 \end{document} 之后的文本都会被忽视。

章节

12 行定义了一个名为 Introduction 的章节名。

如果需要的话,你可能想将你的文档分为章(Chatpers)、节(Sections)和小节(Subsections)。下列分节命令适用于 article 类型的文档:

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

我们添加类似下面的章节:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
\documentclass{article}
\usepackage{graphicx} % Required for inserting images

\title{hello world}
\author{EmoryHuang }
\date{March 2023}

\begin{document}

\maketitle

\section{Introduction}
This is the introduction.

\section{Methods}

\subsection{Stage 1}
The first part of the methods.

\subsection{Stage 2}
The second part of the methods.

\section{Results}
Here are my results.

\end{document}

这时你的文档应该是这个样子:

如图所示,你并不需要手动添加章节号。但是如果你不想要章节号,可以使用 \section*{}

摘要

摘要同样需要使用 \begin{abstract}\end{abstract} 命令将你的内容包裹起来

1
2
3
4
5
\maketitle

\begin{abstract}
This is the abstract
\end{abstract}

段落缩进、空格、换行

LaTeX 默认每个章节第一段首行顶格,之后的段落首行缩进。如果想要段落顶格,在要顶格的段落前加 \noindent 命令即可。如果希望全局所有段落都顶格,在文档的某一位置使用 \setlength{\parindent}{0pt} 命令,之后的所有段落都会顶格。

在排版时,另起一页的方式是 \newpage

此外,多个连续空格在 LaTeX 中被视为一个空格。多个连续空行被视为一个空行。空行的主要功能是开始一个新的段落。通常来说,LaTeX 忽略空行和其他空白字符,两个反斜杠(\\)可以被用来换行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
\documentclass{article}
\usepackage{graphicx} % Required for inserting images

\title{hello world}
\author{EmoryHuang}
\date{March 2023}

\begin{document}

\maketitle

\begin{abstract}
This is the abstract
\end{abstract}

\section{Introduction}
This is the first paragraph.

This is the second paragraph.

\section{Methods}

\subsection{Stage 1}
The first part of the methods.

\noindent The first part of the methods.

\subsection{Stage 2}
Multiple consecutive spaces are treated as one space in LaTeX.

\section{Results}
Here are my results.

\end{document}

有序列表和无序列表

LaTeX 中同样支持有序列表和无序列表:

  • 有序列表:\begin{itemize}\end{itemize}
  • 无序列表:\begin{enumerate}\end{enumerate}
1
2
3
4
5
6
7
8
9
\begin{enumerate}
\item First thing
\item Second thing
\begin{itemize}
\item A sub-thing
\item Another sub-thing
\end{itemize}
\item Third thing
\end{enumerate}

字体

中文支持

如果你需要中文,可以使用 CTeX 宏包。只需要在文档的前导命令部分添加:

1
\usepackage[UTF8]{ctex}

字体效果

1
2
3
4
5
6
7
8
\textit{words in italics}
\textsl{words slanted}
\textsc{words in smallcaps}
\textbf{words in bold}
\texttt{words in teletype}
\textsf{sans serif words}
\textrm{roman words}
\underline{underlined words}

字体大小

1
2
3
4
5
6
7
8
9
normal size words
{\tiny tiny words}
{\scriptsize scriptsize words}
{\footnotesize footnotesize words}
{\small small words}
{\large large words}
{\Large Large words}
{\LARGE LARGE words}
{\huge huge words}

数学公式

关于使用 LaTeX 写数学公式的部分这里就不再详细介绍了,如果你想了解更多可以去看我的另一篇文章 使用 LaTeX 写数学公式 或者也可以在 这里 进行查询。

表格

目前有许多生成 LaTeX 表格的在线工具,这里推荐一个:

我们只需要把在 Excel 里面创建好的表格直接粘贴到里面就行。

尽管这样很方方便,但个人建议还是应当对表格的语法有所了解,以便做出针对性修改。

下面还是通过一个示例来说明:

1
2
3
4
5
6
7
8
9
10
11
12
\begin{table}[]
\begin{tabular}{llr}
\hline
\multicolumn{2}{c}{Item} & \\ \cline{1-2}
Animal & Description & Price (\$) \\ \hline
Gnat & per gram & 13.65 \\
& each & 0.01 \\
Gnu & stuffed & 92.50 \\
Emu & stuffed & 33.33 \\
Armadillo & frozen & 8.99 \\ \hline
\end{tabular}
\end{table}

1
\begin{tabular}{...}

一般来说,我们需要再定义表格时的花括号中指定表格的列及其对齐方式:

  • l,r,c 分别表示左、右、居中对齐
  • | 表示列的竖线

例如,{lll} 会生成一个三列的表格,并且保存向左对齐,没有显式的竖线;{|l|l|r|} 会生成一个三列表格,前两列左对齐,最后一列右对齐,并且相邻两列之间有显式的竖线。

在表格中一般存在以下标记:

  • & 用于分割列;
  • \\ 用于换行;
  • \hline 表示插入一个贯穿所有列的横着的分割线;
  • \cline{1-2} 会在第一列和第二列插入一个横着的分割线。

个人更喜欢使用 booktabs 来写表格,感觉整体上会更美观,间距也更舒服。

你只需要把 \hline\cline 替换成 \toprule\midrulecmidrule\bottomrule 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\usepackage{booktabs}

\begin{table}[]
\begin{tabular}{llr}
\toprule
\multicolumn{2}{c}{Item} & \\ \cmidrule{1-2}
Animal & Description & Price (\$) \\ \midrule
Gnat & per gram & 13.65 \\
& each & 0.01 \\
Gnu & stuffed & 92.50 \\
Emu & stuffed & 33.33 \\
Armadillo & frozen & 8.99 \\ \bottomrule
\end{tabular}
\end{table}

图片

单张图片

在导入图片之前,我们需要引入 graphicx 包

1
2
3
4
5
6
7
8
\usepackage{graphicx}

\begin{figure}[htbp]
\centering
\includegraphics[scale=0.2]{Figure 1.png}
\caption{A simple example.}
\label{fig:fig1}
\end{figure}

[htbp] 是位置参数:

  • h 表示把图表近似地放置在这里(如果能放得下);
  • t 表示放在在页面顶端;
  • b 表示放在在页面的底端;
  • p 表示另起一页放置图表。

\centering 将图片放置在页面的中央。如果没有该命令会默认左对齐。

\includegraphics{...} 命令可以自动将图放置到你的文档中,花括号中写入图片的相对位置。

[scale=0.2] 是可选参数,scale 能够将图片按比例缩小。当然你也可以使用 width=5cm 来控制。

\caption{...} 命令定义了图片的标题,同样的,你不需要手动写入编号。

\label{fig:fig1} 命令创建了一个可以供引用的标签。

多张图片

多张图片也是类似的,需要导入 subfigure 包,并使用 \subfigure

1
2
3
4
5
6
7
8
9
10
11
12
\usepackage{graphicx}
\usepackage{subfigure}

\begin{figure}[tb]
\centering
\subfigure[subfigure 1]{
\includegraphics[scale=0.2]{Figure 1.png}}
\subfigure[subfigure 2]{
\includegraphics[scale=0.2]{Figure 1.png}}
\caption{An example of subfigure}
\label{fig:fig2}
\end{figure}

引用

在论文写作过程中,我们经常会使用引用,当然在 LaTeX 中也非常方便。例如,在前面的例子中,我们在插入图片时为其定义了一个标签 fig:fig1,之后,我们就可以在任何地方引用它:

1
2
% use \ref{...}
As shown in Figure \ref{fig:fig1}

当然,不只是图片,应用场景同样还有表格、公式等,只要你使用 \label{...} 创建标签并使用 \ref{...} 引用即可。

文献

在引用参考文献之前,我们通常都会常见一个 bibTex 文献库用来引用,它通常是长这个样子的,包含标题、作者、会议、年份等信息:

1
2
3
4
5
6
7
8
9
10
11
12
% my_example.bib
@inproceedings{huang2023example,
title = {this is title},
booktitle = {Proceedings of the 28th {{ACM SIGKDD Conference}} on {{Knowledge Discovery}} and {{Data Mining}}},
author = {Zhang, San and Li, Si},
year = {2022},
pages = {1463--1471},
publisher = {{ACM}},
address = {{Washington DC USA}},
doi = {...},
isbn = {...}
}

在创建了自己的文献库之后,就可以在正文中使用 \cite{...} 引用,花括号中的内容为 Citation Key,在这里是 huang2023example,和我们在文献库中的第一相同。

1
2
3
4
5
6
According to \cite{huang2023example}

...

\bibliographystyle{ACM-Reference-Format}
\bibliography{my_example}

在列举最后的参考文献时,只需要使用 \bibliographystyle{...} 定义样式并使用 \bibliography{...} 连接到你的文献库即可。

论文写作

上面介绍了那么多其实只是了解一个使用大概而已,真正写论文的时候我们肯定还是需要使用对应期刊的模版,这里以 ACM 模版为例,你可以在这里下载:https://www.acm.org/publications/proceedings-template。

下载完成之后,进入 samples 文件夹,里面提供了很多模版以及对应的 PDF 阅览文件,这里我们常用的其实就是两个:

  • sample-acmsmall:单列模版
  • sample-sigconf:双列模版

找到你需要的 .tex 文件,直接放到编辑器编辑即可。

参考文献