前段时间博主以新生的身份参加了学校组织的数学建模竞赛,这也是博主第一次真正意义上接触 LaTeX 这个排版语言,正好趁着刚用完的记忆水一篇文章(bushi,至于使用感受嘛emm…
很好的东西,下次不用了(逃
还有一个一定要写在前面的:记得写一点就编译一下!!不要问我为什么说这个
关于 LaTeX
相比于轻量级的 Markdown ,LaTeX 是一个基于标记语言的专业排版系统,适合处理复杂的文档。两者的关系就像小汽车和赛车,有着各自的优缺点。
不同于 Word 这种所见即所得的文字处理软件,LaTeX 需要通过编译来生成文档,常见的编译产物是 PDF 格式,随后你才能够看到文档里的内容、排版等等。这也是 LaTeX 难以上手的原因。
LaTeX 基于 TeX ,也正因如此在迭代中产生了多种格式与引擎。博主使用的是 XeTeX
格式与 XeLaTeX
引擎,重要的是, XeTeX
支持 Unicode 字符集,便于中文显示。
编辑器
或许应该称之为“发行版”。
最常用的大概是 TeX Live 了,它包含了大量的宏包和引擎,足够应对绝大多数的排版需求。而对于 MacOS 用户,TeX Live 也有一个针对 Mac 的发行版 MacTeX 。
对于 Windows 用户,你可以从清华大学镜像站下载到最新的 TeX 发行版,如下图:
你会得到一个名为 texlive.iso
的镜像文件,将其挂载到虚拟 DVD 驱动器,运行其中的 install-tl-windows.bat
,按步骤安装,会有一段漫长的等待。在这段时间里,你可以去喝杯咖啡~
引擎
打开 TeXworks Editor ,左上角的下拉框便是选择引擎的地方。博主推荐选择 XeLaTeX
。
语法
你需要在开头部分通过相应的代码来引入宏包,设置字体、版式等内容,完成所有的设置后,在 \begin{document}
和 \end{document}
包裹的部分书写文档的正文。
主体结构就像这样:
1 | \documentclass{article} % 文档类型 |
需要注意的是,LaTeX 的注释是以 %
开头的。
关于详细的格式和语法说明,推荐参考 OI Wiki 的这篇文档。
版式
数学建模竞赛(国赛)的版式要求
《全国大学生数学建模竞赛论文格式规范》节选:
1 | 论文题目和摘要写在论文第三页上,从第四页开始是论文正文。 |
让我们一起逐个看看这个要求吧~
论文题目和摘要写在论文第三页上,从第四页开始是论文正文。
在 LaTeX 中,我们可以通过插入空白页和控制页码来实现这一要求。空白页放置标题、摘要、关键词,正文是从标题页的下一页开始的。格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17\thispagestyle{empty} % 无样式
\newpage
\thispagestyle{plain} % 有页码
\pagenumbering{arabic}
\setcounter{page}{1}
\begin{center}
{\heiti\sanhao 论文题目} % 三号黑体标题
\\[2em]
\end{center}
\begin{center}
\textbf{\heiti 摘 要}
\end{center}
% 摘要内容,控制在小四宋体,单倍行距,不超过一页
\vspace{2em}
\noindent
\textbf{\heiti 关键词:}关键词1;关键词2;关键词3
\newpage论文从第三页开始编写页码,页码必须位于每页页脚中部,用阿拉伯数字从“1”开始连续编号。
LaTeX 中使用
\pagestyle{plain}
可以实现页码居中显示在页脚,并通过\pagenumbering{arabic}
和\setcounter{page}{1}
确保从第三页开始编号为1
。格式如下:1
2
3\pagestyle{plain} % 页码居中显示在页脚,无页眉
\pagenumbering{arabic} % 阿拉伯数字编号
\setcounter{page}{1} % 从第三页开始编号为1论文不能有页眉,论文中不能有任何可能显示答题人身份的标志。
使用
\pagestyle{plain}
即可去除页眉。此外,编写时需手动检查论文内容,确保不包含姓名、学校等信息。格式如下:1
\pagestyle{plain} % 无页眉,仅页脚显示页码
论文题目用三号黑体字、一级标题用四号黑体字,并居中;二级、三级标题用小四号黑体字,左端对齐(不居中)。论文中其他汉字一律采用小四号宋体字,行距用单倍行距,打印时应尽量避免彩色打印。
在 LaTeX 中,通过自定义命令设置字体大小和样式,并使用
ctexset
调整标题格式。打印时注意选择黑白模式。格式如下: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% 字体设置
\setCJKmainfont{SimSun} % 正文宋体
\setCJKsansfont{SimHei} % 标题黑体
\newcommand{\xiaosi}{\fontsize{12pt}{12pt}\selectfont} % 小四号,单倍行距
\newcommand{\sihao}{\fontsize{14pt}{17pt}\selectfont} % 四号
\newcommand{\sanhao}{\fontsize{16pt}{20pt}\selectfont} % 三号
\songti\xiaosi % 全文默认宋体小四
% 标题格式
\ctexset{
section = {
format+ = {\centering\bfseries\sihao}, % 一级标题居中四号黑体
name = {},
number = \arabic{section},
beforeskip = 12pt,
afterskip = 8pt
},
subsection = {
format+ = {\raggedright\bfseries\xiaosi}, % 二级标题左对齐小四黑体
name = {},
number = \arabic{section}.\arabic{subsection},
beforeskip = 10pt,
afterskip = 6pt
},
subsubsection = {
format+ = {\raggedright\bfseries\xiaosi}, % 三级标题左对齐小四黑体
name = {},
number = \arabic{section}.\arabic{subsection}.\arabic{subsubsection},
beforeskip = 8pt,
afterskip = 4pt
}
}提请大家注意:摘要应该是一份简明扼要的详细摘要(包括关键词),在整篇论文评阅中占有重要权重,请认真书写(注意篇幅不能超过一页,且无需译成英文)。全国评阅时将首先根据摘要和论文整体结构及概貌对论文优劣进行初步筛选。
摘要需控制在第三页一页内,内容简洁明了,突出论文核心观点和方法。LaTeX 中通过手动调整内容长度确保不超过一页,格式如下:
1
2
3
4
5
6
7\begin{center}
\textbf{\heiti 摘 要}
\end{center}
% 摘要内容
\vspace{2em}
\noindent
\textbf{\heiti 关键词:}关键词1;关键词2;关键词3引用别人的成果或其他公开的资料(包括网上查到的资料) 必须按照规定的参考文献的表述方式在正文引用处和参考文献中均明确列出。正文引用处用方括号标示参考文献的编号,如[1][3]等;引用书籍还必须指出页码。参考文献按正文中的引用次序列出,其中书籍的表述方式为: [编号] 作者,书名,出版地:出版社,出版年。参考文献中期刊杂志论文的表述方式为: [编号] 作者,论文名,杂志名,卷期号:起止页码,出版年。参考文献中网上资源的表述方式为: [编号] 作者,资源标题,网址,访问时间(年月日)。
LaTeX 中使用
thebibliography
环境实现参考文献列表,并在正文中用\cite
命令标注编号。格式如下:1
2
3
4
5
6
7
8
9% 在正文中引用
这是正文内容,引用文献[1],引用书籍具体页码[2, pages 10-15]。
% 文末参考文献列表
\begin{thebibliography}{99}
\bibitem{ref1} 张三,数学建模基础,北京:清华大学出版社,2020。
\bibitem{ref2} 李四,建模方法研究,数学研究,卷10期3:25-30,2019。
\bibitem{ref3} 王五,数学建模资源,http://example.com,访问时间:2023-10-01。
\end{thebibliography}
分点介绍完了,那么话不多说,上模板~
模板
1 | \documentclass[12pt]{ctexart} |
用法
数学公式
其实可以用一些在线公式编辑器来帮助你快速书写数学公式~ 例如:这个
基础环境
LaTeX 中的数学公式主要通过特定的环境或命令插入,根据使用场景分为行内公式和独立公式两种。
行内公式:用于正文中嵌入短小的公式,用单个美元符号
$...$
包裹。例如:1
正文中的公式为 $f(x) = x^2 + 2x + 1$,表示一个二次函数。
编译后,公式会嵌入在文本行内,适合简短表达式。
独立公式:用于展示较长的公式或需要单独编号的公式,常用
\[...\]
或\begin{equation}...\end{equation}
环境。例如:1
\[ f(x) = x^2 + 2x + 1 \]
或带编号的公式:
1
2
3
4\begin{equation}
f(x) = x^2 + 2x + 1
\label{eq:quadratic}
\end{equation}这里
\label{eq:quadratic}
用来给公式添加标签,可在正文中通过\ref{eq:quadratic}
引用公式编号。
宏包 amsmath
多行公式、矩阵、对齐等复杂排版可使用 amsmath
宏包。
1 | \usepackage{amsmath,amssymb} % 提供数学环境和符号 |
amsmath
提供多行公式、对齐环境等功能。amssymb
提供额外的数学符号,如集合符号、特殊运算符等。
多行公式与对齐方式
在涉及多步计算时,需使用多行公式并将公式对齐。amsmath
提供的 align
环境可以实现这个操作。
1 | \begin{align} |
&
符号用于指定对齐位置。\\
表示换行。- 默认情况下,
align
环境会为每行公式自动编号。如果不需要编号,将align
改成align*
就可以了。
1 | \begin{align*} |
常用数学符号与特殊格式
上下标:用
^
表示上标,_
表示下标。1
2$x^2$ % 上标:平方
$r_1$ % 下标:索引分数与积分:用
\frac{分子}{分母}
表示分数,\int
表示积分。1
2$\frac{a}{b}$ % 分数
$\int_{0}^{1} x \, dx$ % 定积分希腊字母:常用字母如
\theta
、\alpha
、\beta
等。1
$\theta$
矩阵与向量:使用
amsmath
的matrix
环境。矩阵一般有圆括号和方括号两种写法,可以按照习惯进行调整。1
2
3
4
5
6\begin{equation}
\mathbf{A} = \begin{pmatrix}
1 & 2 \\
3 & 4
\end{pmatrix}
\end{equation}其中
\mathbf{A}
表示粗体向量或矩阵符号,用pmatrix
来显示圆括号矩阵,用bmatrix
来显示方括号矩阵。又如求解线性方程组
1
2
3
4\begin{align*}
2x + 3y &= 5 \\
4x - y &= 1
\end{align*}用矩阵形式表示的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\begin{equation}
\begin{bmatrix}
2 & 3 \\
4 & -1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
5 \\
1
\end{bmatrix}
\label{eq:linearsystem}
\end{equation}特殊符号:借助
amssymb
,可以使用集合符号、逻辑符号等。1
2
3$\mathbb{R}$ % 实数集
$\forall$ % 任意量词
$\in$ % 属于
公式编号与引用
在论文中,公式往往需要编号并在正文中引用,便于快速定位。我们可以使用 \begin{equation}...\end{equation}
为公式编号,并通过 \label
和 \ref
实现引用。
1 | \begin{equation} |
编译后,\ref{eq:energy}
会自动替换为公式编号。但请注意每个公式的 \label
名称要唯一,否则引用会出错。
表格
基本表格结构
LaTeX 中的表格主要通过 tabular
环境创建,结合 table
浮动体可实现表格编号和引用。基本结构如下:
1 | \begin{table}[htbp] |
其中:
[htbp]
控制表格位置:h
(here),t
(top),b
(bottom),p
(page),如需强制在当前位置显示,请使用H
\centering
使表格居中\caption
设置表格标题\label
添加标签用于引用{ccc}
定义三列居中对齐的表格,还可用l
(左对齐)、r
(右对齐)
表格线条与样式
如果需要添加表格的分隔线,可以通过指定 |c|c|c|
样式和 \hline
元素完成
1 | \begin{tabular}{|c|c|c|} |
|
在列格式中表示垂直线\hline
表示水平线
合并单元格
可以使用 \multicolumn
和 \multirow
(需导入 multirow
宏包)来实现单元格的合并。
1 | \usepackage{multirow} |
表格排版
对于较复杂的表格,可以使用 booktabs
宏包排版。booktabs
提供了 \toprule
、\midrule
和 \bottomrule
命令,用于创建三线表。
1 | \usepackage{booktabs} |
表格引用
在正文中引用表格同样是使用 \ref
命令。
1 | 如表 \ref{tab:tablename} 所示。 |
长表格
可使用 longtable
宏包处理跨页表格。
1 | \usepackage{longtable} |
数字对齐
使用 siunitx
宏包的 S
列类型可以使数字按小数点对齐。
1 | \usepackage{siunitx} |
表格注释
表格注释一般放在脚注位置,如下:
1 | \usepackage{threeparttable} |
文献
在数学建模竞赛中,合理引用文献是非常重要的一环,既能增强论文的可信度,也是学术规范的体现。LaTeX 提供了多种管理参考文献的方式,以下介绍最基本的方法。
手动管理
最简单的方式是使用 thebibliography
环境手动创建参考文献列表。
1 | \begin{thebibliography}{99} |
在正文中使用 \cite
命令引用:
1 | 根据张三的研究\cite{ref1},该模型在处理类似问题时具有显著优势。 |
BibTeX
对于较多文献,可以使用 BibTeX
进行管理。需要创建一个扩展名为 .bib
的文件(如 references.bib
)来添加文献信息。
1 | @book{zhang2020, |
然后在 LaTeX 文档末尾进行引用:
1 | \bibliographystyle{plain} % 使用 plain 样式 |
在正文中引用方式与上文相同。
1 | 根据张三的研究\cite{zhang2020},该模型具有显著优势。 |
配合 natbib 使用
如需更灵活的引用格式,可以使用 natbib
宏包。
1 | \usepackage[square,numbers]{natbib} % 方括号引用,数字编号 |
natbib
支持多种引用方式:
1 | \citet{zhang2020} % 文本引用:张三 [1] 提出... |
代码
宏包 listings
listings
宏包支持多种编程语言的语法高亮,而且能提供行号、边框、标题等。
1 | \usepackage{listings,ctex,xcolor} % 代码展示相关 |
基本设置
可以通过 \lstset
定义代码块的基本样式。
1 | \lstset{ |
针对特定语言的设定
以 Python 为例,其他语言同理。
1 | \lstdefinestyle{Python}{ |
插入代码块
在 LaTeX 插入代码块有两种常见方式:直接嵌入代码内容或引用外部文件。对于较长的代码建议从外部引用。
直接插入代码块
1 | % 在正文中插入代码块 |
引用外部代码文件
先将代码保存为外部文件(如 main.py
),然后通过 \lstinputlisting
命令引入,这里可以使用相对路径也可以使用绝对路径引入。
1 | % 在附录中引用外部代码文件 |
效果就像这样
写在最后
LaTeX 的用法远远不止这些,再次推荐 OI Wiki 的这篇文档,博主在使用的时候也参考了上面很多内容。
最后祝各位看到这里的小伙伴们竞赛顺利~