浅谈 LaTeX 在数学建模竞赛中的应用

  • ~21.47K 字
  • 次阅读
  • 条评论
  1. 1. 关于 LaTeX
    1. 1.1. 编辑器
    2. 1.2. 引擎
    3. 1.3. 语法
  2. 2. 版式
    1. 2.1. 数学建模竞赛(国赛)的版式要求
    2. 2.2. 模板
  3. 3. 用法
    1. 3.1. 数学公式
      1. 3.1.1. 基础环境
      2. 3.1.2. 宏包 amsmath
      3. 3.1.3. 多行公式与对齐方式
      4. 3.1.4. 常用数学符号与特殊格式
      5. 3.1.5. 公式编号与引用
    2. 3.2. 表格
      1. 3.2.1. 基本表格结构
      2. 3.2.2. 表格线条与样式
      3. 3.2.3. 合并单元格
      4. 3.2.4. 表格排版
      5. 3.2.5. 表格引用
      6. 3.2.6. 长表格
      7. 3.2.7. 数字对齐
      8. 3.2.8. 表格注释
    3. 3.3. 文献
      1. 3.3.1. 手动管理
      2. 3.3.2. BibTeX
      3. 3.3.3. 配合 natbib 使用
    4. 3.4. 代码
      1. 3.4.1. 宏包 listings
      2. 3.4.2. 基本设置
      3. 3.4.3. 针对特定语言的设定
      4. 3.4.4. 插入代码块
        1. 3.4.4.1. 直接插入代码块
        2. 3.4.4.2. 引用外部代码文件
  4. 4. 写在最后

前段时间博主以新生的身份参加了学校组织的数学建模竞赛,这也是博主第一次真正意义上接触 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
2
3
4
5
6
7
8
9
10
11
12
\documentclass{article} % 文档类型

\begin{document} % 正文开始

\title{一个 LaTeX 文档示例} % 标题
\author{owo} % 作者
\maketitle % 在正文部分生成标题

% 正文内容
这是一个 LaTeX 文档示例。

\end{document} % 正文结束

需要注意的是,LaTeX 的注释是以 % 开头的。

关于详细的格式和语法说明,推荐参考 OI Wiki 的这篇文档

版式

数学建模竞赛(国赛)的版式要求

《全国大学生数学建模竞赛论文格式规范》节选:

1
2
3
4
5
6
7
8
9
10
11
论文题目和摘要写在论文第三页上,从第四页开始是论文正文。
论文从第三页开始编写页码,页码必须位于每页页脚中部,用阿拉伯数字从“1”开始连续编号。
论文不能有页眉,论文中不能有任何可能显示答题人身份的标志。
论文题目用三号黑体字、一级标题用四号黑体字,并居中;二级、三级标题用小四号黑体字,左端对齐(不居中)。论文中其他汉字一律采用小四号宋体字,行距用单倍行距,打印时应尽量避免彩色打印。
提请大家注意:摘要应该是一份简明扼要的详细摘要(包括关键词),在整篇论文评阅中占有重要权重,请认真书写(注意篇幅不能超过一页,且无需译成英文)。全国评阅时将首先根据摘要和论文整体结构及概貌对论文优劣进行初步筛选。
引用别人的成果或其他公开的资料(包括网上查到的资料) 必须按照规定的参考文献的表述方式在正文引用处和参考文献中均明确列出。正文引用处用方括号标示参考文献的编号,如[1][3]等;引用书籍还必须指出页码。参考文献按正文中的引用次序列出,其中书籍的表述方式为:
[编号] 作者,书名,出版地:出版社,出版年。
参考文献中期刊杂志论文的表述方式为:
[编号] 作者,论文名,杂志名,卷期号:起止页码,出版年。
参考文献中网上资源的表述方式为:
[编号] 作者,资源标题,网址,访问时间(年月日)。

让我们一起逐个看看这个要求吧~

  • 论文题目和摘要写在论文第三页上,从第四页开始是论文正文。

    在 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
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
\documentclass[12pt]{ctexart}

% ---------------------- 基本设置 ----------------------
\usepackage[a4paper,margin=2.5cm]{geometry} % 页面设置,左右上下边距 2.5cm
\usepackage{float} % 图表位置控制
\usepackage{amsmath,amssymb} % 提供数学环境和符号
\usepackage{fontspec} % 处理字体
\usepackage{graphicx} % 处理图片
\usepackage{listings,ctex,xcolor} % 代码环境支持
\pagestyle{plain} % 无页眉,仅保留页码居中显示

% 字体设置
\setCJKmainfont{SimSun} % 正文宋体
\setCJKsansfont{SimHei} % 标题黑体

% 字号,行距设置
\newcommand{\xiaosi}{\fontsize{12pt}{12pt}\selectfont} % 小四,单倍行距
\newcommand{\sihao}{\fontsize{14pt}{17pt}\selectfont} % 四号
\newcommand{\sanhao}{\fontsize{16pt}{20pt}\selectfont} % 三号

% ---------------------- 标题与章节格式 ----------------------
\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
},
bibname = {参考文献}
}

% ---------------------- 代码块格式(可选) ----------------------
\lstset{
basicstyle = \sffamily, % 基本代码风格
keywordstyle = \bfseries, % 关键字风格
commentstyle = \rmfamily\itshape, % 注释风格,斜体
stringstyle = \ttfamily, % 字符串风格
flexiblecolumns, % 灵活列
numbers = left, % 行号在左边
showspaces = false, % 不显示空格
numberstyle = \zihao{-5}\ttfamily, % 行号样式,小五号
showstringspaces = false, % 不显示字符串中的空格
captionpos = t, % 代码标题在上方
frame = lrtb, % 显示边框
}

\lstdefinestyle{Python}{
language = Python,
basicstyle = \zihao{-5}\ttfamily,
numberstyle = \zihao{-5}\ttfamily,
keywordstyle = \color{blue},
keywordstyle = [2] \color{teal},
stringstyle = \color{magenta},
commentstyle = \color{red}\ttfamily,
breaklines = true, % 自动换行
columns = fixed, % 固定字间距
basewidth = 0.5em,
}

% ---------------------- 正文开始 ----------------------
\begin{document}
\songti\xiaosi % 全文默认为宋体、小四号,单倍行距

% ---------------------- 标题、摘要、关键词 ----------------------
\thispagestyle{plain} % 有页码,居中显示
\pagenumbering{arabic} % 阿拉伯数字编号
\setcounter{page}{1} % 从第1页开始
\begin{center}
{\heiti\sanhao 论文题目} % 三号黑体居中标题,请替换为实际题目
\\[2em]
\end{center}

\begin{center}
\textbf{\heiti 摘 要}
\end{center}

此处填写摘要内容,摘要应简明扼要,控制在一页以内,突出论文的核心问题、方法和结论。

\vspace{2em}

\noindent
\textbf{\heiti 关键词:}关键词1;关键词2;关键词3 % 替换为实际关键词

\newpage

% ---------------------- 目录 ----------------------
\newpage
\pagenumbering{gobble} % 禁止页码编号
\tableofcontents % 生成目录
\newpage
\pagenumbering{arabic} % 恢复页码编号

% ---------------------- 正文开始 ----------------------
\setcounter{page}{1} % 正文页码从 1 开始
\section{引言}

此处开始论文正文内容。一级标题使用四号黑体居中,二级及以下标题使用小四号黑体左对齐。正文内容为小四号宋体,单倍行距。

\section{问题分析}

\subsection{问题背景}

此处可描述问题的背景和重要性,使用小四号宋体排版。

\subsection{问题重述}

可对竞赛题目进行重述,明确需要解决的问题。

\section{模型建立}

\subsection{模型假设}

列出模型的假设条件,确保内容清晰。

\subsection{符号说明}

\begin{table}[H]
\centering
\begin{tabular}{lll}
符号 & 说明 & 单位 \\
\hline
$x$ & 变量1 & 单位1 \\
$y$ & 变量2 & 单位2
\end{tabular}
\caption{符号说明表}
\label{tab:symbols}
\end{table}

\subsection{数学模型}

可在此处插入数学公式,例如:
\begin{align}
f(x) = x^2 + 2x + 1
\end{align}

\section{模型求解}

可在此处描述模型的求解过程,插入必要的图表。例如:

\begin{figure}[H]
\centering
\includegraphics[height=5cm]{example-image} % 替换为实际图片路径
\caption{示例图形}
\label{fig:example}
\end{figure}

\section{结果分析}

分析模型结果,说明其意义和局限性。

\section{总结}

总结论文的主要贡献和结论,提出可能的改进方向。

% ---------------------- 参考文献 ----------------------
\begin{thebibliography}{99}
\bibitem{ref1} 作者1,书名,出版地:出版社,出版年。
\bibitem{ref2} 作者2,论文名,杂志名,卷期号:起止页码,出版年。
\bibitem{ref3} 作者3,资源标题,网址,访问时间(年月日)。
\end{thebibliography}

% ---------------------- 附录(可选) ----------------------
\section*{附录}

\subsection*{附录一:示例代码}

\lstinputlisting[
style = Python,
caption = {示例代码},
label = {code:example}
]{
./src/main.py % 替换为实际代码路径
}

\end{document}

用法

数学公式

其实可以用一些在线公式编辑器来帮助你快速书写数学公式~ 例如:这个

基础环境

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
2
3
4
\begin{align}
x &= (r_1 - r_2)\cos\theta + d\cos\left(\frac{r_1 - r_2}{r_2}\theta\right) \\
y &= (r_1 - r_2)\sin\theta - d\sin\left(\frac{r_1 - r_2}{r_2}\theta\right)
\end{align}
  • & 符号用于指定对齐位置。
  • \\ 表示换行。
  • 默认情况下,align 环境会为每行公式自动编号。如果不需要编号,将 align 改成 align* 就可以了。
1
2
3
4
\begin{align*}
x &= (r_1 - r_2)\cos\theta + d\cos\left(\frac{r_1 - r_2}{r_2}\theta\right) \\
y &= (r_1 - r_2)\sin\theta - d\sin\left(\frac{r_1 - r_2}{r_2}\theta\right)
\end{align*}

常用数学符号与特殊格式

  • 上下标:用 ^ 表示上标,_ 表示下标。

    1
    2
    $x^2$ % 上标:平方
    $r_1$ % 下标:索引
  • 分数与积分:用 \frac{分子}{分母} 表示分数,\int 表示积分。

    1
    2
    $\frac{a}{b}$ % 分数
    $\int_{0}^{1} x \, dx$ % 定积分
  • 希腊字母:常用字母如 \theta\alpha\beta 等。

    1
    $\theta$
  • 矩阵与向量:使用 amsmathmatrix 环境。矩阵一般有圆括号和方括号两种写法,可以按照习惯进行调整。

    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
2
3
4
5
6
\begin{equation}
E = mc^2
\label{eq:energy}
\end{equation}

正文中可引用公式 \ref{eq:energy} 来解释其意义。

编译后,\ref{eq:energy} 会自动替换为公式编号。但请注意每个公式的 \label 名称要唯一,否则引用会出错。

表格

基本表格结构

LaTeX 中的表格主要通过 tabular 环境创建,结合 table 浮动体可实现表格编号和引用。基本结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
\begin{table}[htbp]
\centering
\caption{表格标题}
\label{tab:example}
\begin{tabular}{ccc}
\hline
列1 & 列2 & 列3 \\
\hline
数据1 & 数据2 & 数据3 \\
数据4 & 数据5 & 数据6 \\
\hline
\end{tabular}
\end{table}

其中:

  • [htbp] 控制表格位置:h(here), t(top), b(bottom), p(page),如需强制在当前位置显示,请使用 H
  • \centering 使表格居中
  • \caption 设置表格标题
  • \label 添加标签用于引用
  • {ccc} 定义三列居中对齐的表格,还可用 l(左对齐)、r(右对齐)

表格线条与样式

如果需要添加表格的分隔线,可以通过指定 |c|c|c| 样式和 \hline 元素完成

1
2
3
4
5
6
7
8
9
\begin{tabular}{|c|c|c|}
\hline
参数 & 取值 & 单位 \\
\hline
$\alpha$ & 0.5 & - \\
\hline
$\beta$ & 1.2 & kg \\
\hline
\end{tabular}
  • | 在列格式中表示垂直线
  • \hline 表示水平线

合并单元格

可以使用 \multicolumn\multirow(需导入 multirow 宏包)来实现单元格的合并。

1
2
3
4
5
6
7
8
9
10
11
\usepackage{multirow}

\begin{tabular}{|c|c|c|}
\hline
\multicolumn{2}{|c|}{合并的列} & 普通列 \\
\hline
\multirow{2}{*}{合并的行} & 数据1 & 数据2 \\
\cline{2-3}
& 数据3 & 数据4 \\
\hline
\end{tabular}

表格排版

对于较复杂的表格,可以使用 booktabs 宏包排版。booktabs 提供了 \toprule\midrule\bottomrule 命令,用于创建三线表。

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

\begin{table}[H]
\centering
\caption{模型参数比较}
\label{tab:comparison}
\begin{tabular}{lccc}
\toprule
模型 & 准确率 & 运行时间(s) & 内存占用(MB) \\
\midrule
模型A & 92.5\% & 15.3 & 128 \\
模型B & 94.1\% & 22.7 & 256 \\
模型C & 89.8\% & 8.2 & 64 \\
\bottomrule
\end{tabular}
\end{table}

表格引用

在正文中引用表格同样是使用 \ref 命令。

1
如表 \ref{tab:tablename} 所示。

长表格

可使用 longtable 宏包处理跨页表格。

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
\usepackage{longtable}

\begin{longtable}{lcc}
\caption{大规模数据结果} \\
\label{tab:longdata} \\
\toprule
参数 & 值1 & 值2 \\
\midrule
\endfirsthead

\multicolumn{3}{c}{续表 \ref{tab:longdata}} \\
\toprule
参数 & 值1 & 值2 \\
\midrule
\endhead

\midrule
\multicolumn{3}{r}{接下页} \\
\endfoot

\bottomrule
\endlastfoot

参数1 & 0.1 & 0.2 \\
参数2 & 0.3 & 0.4 \\
% 更多数据行...
\end{longtable}

数字对齐

使用 siunitx 宏包的 S 列类型可以使数字按小数点对齐。

1
2
3
4
5
6
7
8
9
10
\usepackage{siunitx}

\begin{tabular}{lS[table-format=2.2]S[table-format=3.1]}
\toprule
项目 & {准确率(\%)} & {时间(ms)} \\
\midrule
测试1 & 95.42 & 123.5 \\
测试2 & 87.30 & 45.8 \\
\bottomrule
\end{tabular}

表格注释

表格注释一般放在脚注位置,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\usepackage{threeparttable}

\begin{table}[H]
\centering
\begin{threeparttable}
\caption{实验结果}
\begin{tabular}{lcc}
\toprule
方法 & 准确率 & 效率\tnote{1} \\
\midrule
方法A & 90\% &\\
方法B & 95\% &\\
\bottomrule
\end{tabular}
\begin{tablenotes}
\item[1] 效率基于单位时间内处理的样本数量
\end{tablenotes}
\end{threeparttable}
\end{table}

文献

在数学建模竞赛中,合理引用文献是非常重要的一环,既能增强论文的可信度,也是学术规范的体现。LaTeX 提供了多种管理参考文献的方式,以下介绍最基本的方法。

手动管理

最简单的方式是使用 thebibliography 环境手动创建参考文献列表。

1
2
3
4
5
\begin{thebibliography}{99}
\bibitem{ref1} 张三,数学建模方法,北京:高等教育出版社,2020。
\bibitem{ref2} 李四,最优化理论在数学建模中的应用,数学建模与应用,14(3):35-42,2019。
\bibitem{ref3} 王五,多元回归分析教程,http://example.com/regression,访问时间:2023-09-15。
\end{thebibliography}

在正文中使用 \cite 命令引用:

1
2
根据张三的研究\cite{ref1},该模型在处理类似问题时具有显著优势。
多元回归分析是解决此类问题的有效方法\cite{ref2}\cite{ref3}。

BibTeX

对于较多文献,可以使用 BibTeX 进行管理。需要创建一个扩展名为 .bib 的文件(如 references.bib)来添加文献信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@book{zhang2020,
author = {张三},
title = {数学建模方法},
publisher = {高等教育出版社},
year = {2020},
address = {北京}
}

@article{li2019,
author = {李四},
title = {最优化理论在数学建模中的应用},
journal = {数学建模与应用},
volume = {14},
number = {3},
pages = {35-42},
year = {2019}
}

@misc{wang2023,
author = {王五},
title = {多元回归分析教程},
howpublished = {http://example.com/regression},
note = {访问时间:2023-09-15}
}

然后在 LaTeX 文档末尾进行引用:

1
2
\bibliographystyle{plain} % 使用 plain 样式
\bibliography{references} % 引用 references.bib 文件

在正文中引用方式与上文相同。

1
根据张三的研究\cite{zhang2020},该模型具有显著优势。

配合 natbib 使用

如需更灵活的引用格式,可以使用 natbib 宏包。

1
\usepackage[square,numbers]{natbib} % 方括号引用,数字编号

natbib 支持多种引用方式:

1
2
3
\citet{zhang2020} % 文本引用:张三 [1] 提出...
\citep{zhang2020} % 括号引用:...有效方法 [1]
\citep[第10页]{zhang2020} % 带页码引用:...有效方法 [1, 第10页]

代码

宏包 listings

listings 宏包支持多种编程语言的语法高亮,而且能提供行号、边框、标题等。

1
\usepackage{listings,ctex,xcolor} % 代码展示相关

基本设置

可以通过 \lstset 定义代码块的基本样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
\lstset{
basicstyle = \sffamily, % 基本代码风格,建议使用等宽字体
keywordstyle = \bfseries, % 关键字风格,粗体
commentstyle = \rmfamily\itshape, % 注释风格,斜体
stringstyle = \ttfamily, % 字符串风格,等宽字体
flexiblecolumns, % 灵活列,适应内容
numbers = left, % 行号显示在左侧
showspaces = false, % 不显示空格
numberstyle = \zihao{-5}\ttfamily, % 行号字体,小五号等宽字体
showstringspaces = false, % 不显示字符串中的空格
captionpos = t, % 代码标题在上方
frame = lrtb, % 显示边框(左、右、上、下)
}

针对特定语言的设定

以 Python 为例,其他语言同理。

1
2
3
4
5
6
7
8
9
10
11
12
\lstdefinestyle{Python}{
language = Python, % 指定语言为 Python
basicstyle = \zihao{-5}\ttfamily, % 代码字体,小五号等宽字体
numberstyle = \zihao{-5}\ttfamily, % 行号字体,小五号
keywordstyle = \color{blue}, % 关键字颜色(可改为黑色以符合打印要求)
keywordstyle = [2] \color{teal}, % 次要关键字颜色(可调整)
stringstyle = \color{magenta}, % 字符串颜色(可调整)
commentstyle = \color{red}\ttfamily, % 注释颜色(可调整)
breaklines = true, % 自动换行,防止代码超出页面
columns = fixed, % 固定字间距
basewidth = 0.5em, % 字符间距
}

插入代码块

在 LaTeX 插入代码块有两种常见方式:直接嵌入代码内容或引用外部文件。对于较长的代码建议从外部引用。

直接插入代码块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% 在正文中插入代码块
\subsection*{示例代码}

以下是一个简单的 Python 代码片段,用于数据处理:

\begin{lstlisting}[style=Python, caption={数据处理示例代码}, label={code:data_processing}]
def process_data(data):
# 对输入数据进行处理
result = []
for item in data:
result.append(item * 2)
return result

# 测试代码
data = [1, 2, 3, 4, 5]
print(process_data(data))
\end{lstlisting}
引用外部代码文件

先将代码保存为外部文件(如 main.py),然后通过 \lstinputlisting 命令引入,这里可以使用相对路径也可以使用绝对路径引入。

1
2
3
4
5
6
7
8
9
10
% 在附录中引用外部代码文件
\section*{附录}

\subsection*{附录一:数据分析代码}

\lstinputlisting[
style = Python,
caption = {数据分析完整代码},
label = {code:analysis}
]{./src/analysis.py} % 替换为实际文件路径

效果就像这样

代码块

写在最后

LaTeX 的用法远远不止这些,再次推荐 OI Wiki 的这篇文档,博主在使用的时候也参考了上面很多内容。

最后祝各位看到这里的小伙伴们竞赛顺利~

赞助喵
非常感谢您的喜欢!
赞助喵
分享这一刻
让朋友们也来瞅瞅!