LaTeX 论文排版
整理一下LaTeX论文排版中的基本要素。
页面布局
通常需要在使用文档时首先全局地规定一些排版参数,如字号、纸张大小、单双面等等。
比如调用 article 文档类排版文章,指定基本字号为 11pt,双面排版,纸张为
A4 大小: 1
\documentclass[10pt,twoside,a4paper]{article}
常用的参数如下:
- 指定字号,例如10pt,11pt,12pt,默认10pt
- 指定纸张大小,默认为美式信纸 letterpaper(大约 21.6 cm × 28.0 cm)。可指定选项还包括 a4paper,b5paper,executivepaper 和 legalpaper等。有关纸张大小页边距的更多细节主要通过geometry包设置,当然在这里设置也可以
- 单面/双面排版,twoside,oneside。双面排版时,奇偶页的页眉页脚、页边距不同。article和report默认为oneside,book默认为twoside。
- 指定单栏/双栏排版,onecolumn, twocolumn。默认为 onecolumn
- 指定横向排版,landscape,默认为纵向。
geometry推荐设置 1
\usepackage[left=2.5cm, right=2.5cm, top=3cm, bottom=3cm]{geometry} % 页边距设置
作为参考,A4纸张的宽度:210 mm,高度:297 mm。
标题页
需要在导言区提供基本信息 1
2
3\title{<title>} % 必选,缺失会报错
\author{<author>} % 可选,缺失会警告
\date{<date>} % 可选
作者可以有多个,不同作者之间使用\and
命令相连,并且可以使用\thanks
命令附带联系方式(联系方式会出现在脚注中)
1
2
3\author{ Mary\thanks{E-mail:****@***.com}
\and Ted\thanks{Corresponding author}
\and Louis}
日期可以直接使用当前日期(英文),也可使用任意格式来指定日期,此时显示内容与输入的是完全一致的
1
2
3
4
5\date{\today}
\date{October 1, 2020}
\date{Dec. 31, 2022}
\date{2022/12/31}
如果需要中文的日期和格式,可以使用zhnumber宏包(需要在中文文档中,否则缺字体等),使用如下
1
2
3\date{\zhtoday}
\date{\zhdate{2019/10/11}}
此时zhnumber会自动调整日期的显示格式。
使用如下命令生成标题页 1
\maketitle
注意:对于article默认不会为标题部分单独成页,report和book则会单独成页,也可以在文档类引入时通过选项titlepage/notitlepage
指定是否单独成页。
摘要
摘要环境是内置的,可以直接使用 1
2
3\begin{abstract}
...
\end{abstract}
注意,默认情况下abstract环境只在article和report中可用,摘要一般紧跟着\maketitle
使用,如果标题页单独成页,则摘要也会单独成页。
关键词的使用在不同的模板中有不同的实现,有的模板直接提供了独立命令,例如
1
2
3
4
5
6
7\begin{abstract}
The abstract goes here.
\end{abstract}
\begin{IEEEkeywords}
IEEEtran, journal, \LaTeX, paper, template.
\end{IEEEkeywords}
可以简单定义一个\keywords
命令 1
\newcommand{\keywords}[1]{\vskip 2ex\par\noindent\normalfont{\bfseries Keywords: } #1}
使用时例如 1
2
3
4\begin{abstract}
The abstract goes here.
\keywords{IEEEtran, journal, \LaTeX, paper, template}
\end{abstract}
完全不使用模板和自定义样式,也可以如下简单粗暴地实现
1
2
3
4
5
6
7
8
9
10
11\noindent
\textbf{Abstract:}
The abstract goes here.
\bigskip % 插入大的垂直间距
\noindent
\textbf{Key words:}
IEEEtran; journal; \LaTeX; paper; template.
\medskip % 插入中等的垂直间距
文档结构
一个大型文档的main.tex正文部分结构如下,各个部分的详细内容会拆分为单独的.tex文件
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
35\begin{document}
\maketitle
\frontmatter % 前言
\input{chapters/abstract.tex}
\tableofcontents
% \listoffigures
% \listoftables
\input{chapters/chapter0.tex}
\mainmatter % 正文
\input{chapters/chapter1.tex}
\input{chapters/chapter2.tex}
\input{chapters/chapter3.tex}
\input{chapters/chapter4.tex}
% 参考文献
\bibliography{bib/ustc} % 参考文献使用 BibTeX 编译
% \printbibliography % 参考文献使用 BibLaTeX 编译
\appendix % 附录
\input{chapters/complementary.tex}
\backmatter % 后记
\input{chapters/acknowledgements.tex}
\input{chapters/publications.tex}
\end{document}
其中用下面的命令将文档分成三部分 1
2
3
4
5\frontmatter % 前言
\mainmatter % 正文
\backmatter % 后记
使用下面的命令生成目录以及图表的单独目录 1
2
3
4
5\tableofcontents % 目录
\listoffigures % 图表目录
\listoftables % 表格目录
使用下面的命令划分后面的部分为附录
1 | \appendix |
此后的章节编号改用拉丁字母,从A开始。
这只是对于诸如毕业论文和书籍等大型文档的结构划分,对于一般的文档,并没有必要使用完整的文档结构,例如通常都没有前言和后记,可能有附录。
参考文献
原始方式
LaTeX提供的对参考文献的底层支持是thebibliography环境,相当于一个特殊的列表。在使用的地方立刻生成参考文献列表,每一项以\bibterm
开始,使用示例如下
1 | \documentclass{article} |
注意:
- 需要指定一个最大数目例如99,用于限制编号的最大宽度
- 每一个条目后的参数是条目标识,在正文中引用时使用,例如
\cite{knuth1984}
,可以多个同时引用,例如\cite{einstein1905,knuth1984}
- 原始方式仅介绍一下,不建议使用
Bibtex
Bibtex引擎使用如下的格式来记录参考文件数据,通常也称为Bibtex格式,从Google
Scholar或期刊/数据库的网站上都能够导出 BIBTEX 文献条目。
1
2
3
4
5
6
7
8
9
10@article{einstein1905,
author = {Albert Einstein},
title = {On the Electrodynamics of Moving Bodies},
journal = {Annalen der Physik},
volume = {17},
number = {6},
pages = {891--921},
year = {1905},
publisher = {Wiley-VCH}
}
其中最开始的名称为条目标识,用于在正文中引用。 通常将所有的参考文献汇总到一个文本文件中,记作reference.bib。注意并不是.bib文件的所有条目都会被打印在参考文献列表中,只会打印前文提到的部分。
在使用Bibtex时,需要如下几个必要环节:
在导言区使用
\bibliographystyle
设置参考文献的呈现样式:作者,名称,年份的顺序,大小写等细节。可以直接使用内置的样式,也可以使用自定义的文献显示样式(提供.bst文件)1
2
3
4\bibliographystyle{<bst-name>}
\bibliographystyle{plain}
\bibliographystyle{unsrt}在正文中同样使用
\cite{name}
或者\cite{name1,name2}
等引用文献在正文最后使用
\bibliography
加载.bib文件,并立刻打印参考文献列表1
2
3
4
5\bibliography{<bib-name>}
\bibliography{reference} % reference.bib
\bibliography{BigBib} % BigBib.bib
\bibliography{reference,BigBib} % BigBib.bib在多次编译中,使用bibtex命令参与编译,例如
1
2
3
4xelatex demo.tex
bibtex demo.aux
xelatex demo.tex
xelatex demo.tex
完整示例如下 1
2
3
4
5
6
7
8
9
10
11
12
13
14\documentclass{article}
\bibliographystyle{plain}
\begin{document}
According to Einstein's theory of relativity \cite{einstein1905}...
\medskip
Another great reference on LaTeX is the book by Leslie Lamport \cite{lamport1994}.
\bibliography{reference} % reference.bib
\end{document}
注意:默认不会打印.bib文件的所有条目,而是只会筛选出\cite{}
提到的条目,如果需要强制在参考文献列表中呈现未提及的项,可以使用\nocite{}
命令指定添加某些条目,例如\nocite{*}
将添加.bib文件中的所有条目,需要用于打印参考文献列表之前(下面的biblatex同样支持)
1
2\nocite{*}
\bibliography{reference} % reference.bib
Biblatex
Bibtex是传统的参考文献处理方案,而Biblatex是更现代的方案,或者说提供了一个兼容bibtex的前端,它提供了更多的自定义选项和灵活性,可以轻松地定制引用和参考文献列表的显示样式,并且对于UTF-8编码和多语言的支持更好。
Biblatex 可以使用Biber(默认)或者Bibtex作为后端处理工具,而传统的Bibtex只能使用Bibtex本身,无论哪一种方案都需要提供同样的.bib数据文件。
基本使用
Biblatex的基本使用与Bibtex有所不同,包括如下步骤:
在导言区导入biblatex宏包,在导入宏包时可以指定后端为biber(默认)或bibtex,还可以自定义参考文献列表的显示样式(提供.bbx和.cbx文件)
1
2
3
4
5
6\usepackage[<options>]{biblatex}
\usepackage[backend=biber]{biblatex}
\usepackage[backend=bibtex]{biblatex}
\usepackage[backend=biber,citestyle=xxx,bibstyle=xxx]{biblatex}在导言区使用
\addbibresource
加载.bib文件,其中location=local
指定查找位置,通常是不需要的1
\addbibresource[location=local]{reference.bib} % reference.bib 完整文件名
在正文中同样使用
\cite{name}
或者\cite{name1,name2}
等引用文献,还支持\footcite
等不同效果的引用命令在正文最后使用如下命令打印参考文献列表,可以加入一些参数来设置细节
1
2
3
4
5\printbibliography
\printbibliography[heading=bibintoc] % 将参考文献列表作为一个章节加入目录
\printbibliography[title={References}] % 指定参考文献列表的标题为References在多次编译中,如果指定biber为后端,就需要使用biber命令参与编译,例如
1
2
3
4xelatex demo.tex
biber demo.aux
xelatex demo.tex
xelatex demo.tex
完整示例如下 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\addbibresource{reference.bib} % reference.bib
\begin{document}
According to Einstein's theory of relativity \parencite{einstein1905}...
\medskip
Another great reference on LaTeX is the book by Leslie Lamport \cite{lamport1994}.
\printbibliography
\end{document}
更多细节
Biblatex支持的参考文献样式拆分为两部分:在正文中的引用样式(citation
style,即xxx.cbx
),
在参考文献列表中的著录样式(bibliography
style,即xxx.bbx
)。 在调用宏包时可以使用 style
选项同时指定样式(此时使用同名的引用样式和著录样式),或者使用bibstyle
或 citestyle 分别指定样式。
常见的默认样式包括
- numeric
数字样式:
style=numeric
,数字引用样式,引用标记通常以数字形式出现,例如 [1]。 - authoryear
作者年份样式:
style=authoryear
,作者年份引用样式,引用标记通常包括作者和年份,例如 (Smith, 2010)。 - authortitle
作者标题样式:
style=authortitle
,引用标记包括作者和标题,例如 (Smith, The Title)。 - verbose
详细样式:
style=verbose
,提供详细的引用信息。
在正文中引用时,支持下面的个性化引用命令:
\cite{}
:这是最基本的引用命令,用于在文中引用文献条目。格式由biblatex的样式定义。\parencite{}
:与\cite{}
类似,但它将引用放在括号中。通常用于在文本中使用圆括号括起引用。\textcite{}
:这个命令用于在文本中引用文献,同时在括号中给出作者名和年份。适用于在正文中直接提及作者。\supercite{}
:与\parencite{}
相似,但产生上标引用。通常用于脚注或类似的环境中。\autocite{}
:这是一个更灵活的命令,它会根据上下文自动选择合适的引用样式,可以根据需要生成内文引用、上标引用或其他引用样式。
注:除此之外,natbib宏包也经常用于参考文献的管理之中,这里略去。
补充
水印
给PDF文件加上水印也是一个常见的需求,比如标记文档的来源,或者标记当前版本为草稿等。
可以使用下面的宏包和代码实现 1
2
3
4
5\usepackage{draftwatermark}
\SetWatermarkText{Draft} % 设置水印内容
\SetWatermarkLightness{0.9} % 设置水印透明度 0-1, 1为透明看不见
\SetWatermarkScale{0.6} % 设置水印字体大小 0-1
注意:
- 默认给所有页加水印,导入宏包时加参数firstpage则只有第一页添加水印;
- 水印的文字只会在页面中央出现一次,不会循环出现;
- 这个宏包提供的水印在图片上不会出现,图片会覆盖水印,如果需要保证在顶层的水印,也可以通过tikz实现。
例如可以在水印中添加作者(标注来源),编译日期(区别版本)等信息
1
2
3
4
5
6
7\usepackage{draftwatermark}
\usepackage{datetime}
\newdateformat{tmpdate}{\THEYEAR-\twodigit{\THEMONTH}-\twodigit{\THEDAY}}
\SetWatermarkText{<Author> \\ \texttt{\tmpdate\today}}
\SetWatermarkLightness{0.9}
\SetWatermarkScale{0.6}