
1. 从Word到LaTeX为什么说“格式”是科研写作的第一道坎如果你是从Word阵营转向LaTeX或者刚开始接触数学建模、论文写作那么第一个要转变的观念可能就是写作的核心从“所见即所得”的排版变成了“所想即所得”的内容组织。在Word里你花大量时间调整字体、行距、标题样式一个不小心整篇文档的格式就可能乱掉。而LaTeX则把格式和内容彻底分离你只需要用简单的命令比如\section{引言}告诉它“这里是一级标题”至于这个标题最终长什么样——是宋体还是黑体字号多大上下间距多少——都由一个叫做“.cls”的文档类文件或者“.sty”的宏包在幕后统一管理。这听起来很美好对吧但坑也随之而来。很多新手包括当年的我会不自觉地用Word的思维去使用LaTeX。比如为了“让这一行空大一点”连续打多个\\或者\vspace{...}为了“让这个公式居中”手动调整空格。这些操作短期内似乎解决了眼前的问题但却破坏了LaTeX文档的内在逻辑和一致性为后续的修改、协作以及最终排版埋下了无数地雷。LaTeX的哲学是“声明式”的你声明这是什么标题、公式、列表它来负责怎么呈现。你的写作注意力应该完全集中在内容逻辑和数学表达上这才是数学建模论文的核心。所以这篇分享不是一份面面俱到的LaTeX语法手册而是聚焦于那些在实战中——尤其是在时间紧迫的数学建模比赛或毕业论文写作中——最容易让人栽跟头、最影响效率的“注意点”和“坑点”。我会结合自己踩过的坑告诉你哪些习惯要尽早养成哪些“捷径”其实布满荆棘。2. 环境搭建与工具链选对工具事半功倍工欲善其事必先利其器。LaTeX环境的选择直接决定了你的写作体验是顺畅还是折磨。2.1 发行版与编辑器告别“盲人摸象”首先你需要一个LaTeX发行版Distribution比如TeX Live跨平台或MiKTeXWindows友好。它就像是一个庞大的工具箱里面包含了编译引擎、宏包、字体等一切必需品。我强烈推荐TeX Live它的宏包管理器tlmgr非常强大能自动解决大部分依赖问题。安装时请务必勾选“安装TeX Live自带的宏包到本地”选项避免编译时频繁联网下载这在比赛断网环境下是致命的。接下来是编辑器。很多人推荐VS Code LaTeX Workshop插件这确实是一个高度可定制化的强大组合适合有一定编程基础、喜欢折腾的用户。但对于数学建模这种需要快速上手的场景我更推荐Overleaf在线或TeXstudio离线。Overleaf无需安装打开浏览器就能写实时预览协作功能无敌。它的最大优势是环境纯净、开箱即用并且内置了大量期刊和比赛模板。你永远不用担心“在我电脑上能编译怎么传给你就报错了”这种问题。缺点是依赖网络且免费版有编译时间和项目数量限制。TeXstudio如果你需要离线工作或者对工具有更多控制欲TeXstudio是绝佳选择。它界面清晰功能齐全内置PDF查看器、语法高亮、代码补全、一键编译对新手非常友好。它的“魔法注释”Magic Comments功能比如% !TeX program xelatex可以很方便地指定编译引擎。我的建议是数学建模比赛期间用Overleaf。保证团队成员的环境绝对一致减少沟通成本。平时练习或写毕业论文可以用TeXstudio搭建本地环境更深入地理解编译流程。2.2 第一个“坑”中文字体处理只要你写中文这就是绕不开的坎。传统的pdfLaTeXCJK宏包方案已经过时问题多且繁琐。现代解决方案是使用XeLaTeX或LuaLaTeX引擎它们原生支持UTF-8编码和系统字体。一个干净、可靠的中文文档开头通常是这样的% !TeX program xelatex % TeXstudio的魔法注释指定引擎 % !TeX encoding UTF-8 \documentclass[12pt, a4paper]{article} % 文档类 \usepackage[UTF8]{ctex} % 引入ctex宏包处理中文的核心 \setmainfont{TeX Gyre Termes} % 设置西文主字体 \setCJKmainfont{SimSun} % 设置中文主字体为宋体 % 如果你的系统没有SimSun可以用其他字体如Microsoft YaHei(微软雅黑)坑点提示ctex宏包已经非常智能在多数情况下你甚至不需要显式设置中文字体它会自动选择系统默认的中文字体。但自动选择有时会不如人意比如选择了你不喜欢的字体所以显式声明是一个好习惯。另外在Overleaf上由于是Linux环境中文字体名称可能与Windows不同可能需要上传字体文件或使用Overleaf内置的中文字体如Noto Serif CJK SC。3. 文档结构与命令清晰比炫技更重要LaTeX的文档结构命令看似简单但滥用会导致目录混乱、交叉引用错误。3.1 章节命令不要手动编号这是最经典的错误之一。千万不要这样写\section{1. 问题重述} % 错误手动添加了“1.”而应该这样写\section{问题重述} % 正确LaTeX会自动编号LaTeX会自动为你生成“1 问题重述”、“1.1 模型假设”这样的编号。如果你需要修改编号样式比如变成“一、”应该通过修改文档类或调用titlesec等宏包来实现而不是手动输入。3.2 标签与引用让LaTeX帮你记住位置在数学建模论文中你需要频繁引用公式、图表、章节。LaTeX的\label和\ref机制是解决这个问题的银弹。正确操作流程在目标位置公式、图表、章节标题后打上标签。在需要引用的地方使用引用命令。\section{模型建立}\label{sec:model} 我们建立了如下优化模型见公式\eqref{eq:objective}... \begin{equation} \min Z \sum_{i1}^{n} c_i x_i \label{eq:objective} % 标签放在公式环境内equation环境会自动生成编号 \end{equation} 模型的具体参数见表\ref{tab:params}。 \begin{table}[htbp] \centering \caption{模型参数表}\label{tab:params} % 标签放在\caption后面 \begin{tabular}{ccc} ... % 表格内容 \end{tabular} \end{table}核心坑点编译两次当你新增或修改了\label后通常需要连续编译两次交叉引用\ref生成的数字才会更新。这是因为LaTeX在第一遍编译时把标签信息写入一个.aux文件第二遍编译时才读取这个文件来生成正确的引用。这是一个必须养成的习惯。标签命名给标签起个有意义的名字如eq:objective公式-目标函数、fig:flowchart图-流程图、tab:comparison表-对比、sec:analysis节-分析。这能让你在后期修改时一眼就知道这个标签对应什么内容而不是一堆无意义的\label{a1}。位置对于图表标签\label{}必须放在\caption{}之后否则引用可能会指向错误的编号。4. 数学公式排版精度与美观的平衡数学公式是数学建模论文的灵魂LaTeX在这方面是王者但细节决定成败。4.1 公式环境选择行内 vs. 行间$ ... $或\( ... \)用于行内公式和文字在同一行。例如“变量 $x_i$ 的取值范围是 $[0, 1]$。”\[ ... \]或equation环境用于独立成行的公式会自动编号。align,aligned环境用于多行公式对齐尤其是需要等号对齐的情况。这是最常用、也最容易出问题的环境之一。% 一个常见的多行公式对齐例子 \begin{align} \min \quad Z \sum_{i1}^{n} c_i x_i \label{eq:obj} \\ \text{s.t.} \quad \sum_{j1}^{m} a_{ij} x_j \le b_i, \quad \forall i \in I \label{eq:cons1} \\ x_j \ge 0, \quad \forall j \in J \label{eq:cons2} \end{align}align环境中的是对齐点通常放在等号或不等号前面。\\用于换行。每一行默认都会编号。如果你不希望某一行编号就在该行换行符\\前加上\notag。4.2 常见符号与字体坑点乘号变量间相乘通常用空格或\cdot点乘不要用*除非在代码语境中。例如$a b$或$a \cdot b$。函数名三角函数、对数等标准函数名要用直立字体用\sin,\log,\max,\min而不是sin,log。LaTeX会正确处理它们的间距。粗体与向量表示向量或矩阵通常用粗体。使用\mathbf{x}用于粗体罗马字母或\boldsymbol{\beta}用于粗体希腊字母。\bm命令需要bm宏包更通用智能\bm{\alpha}和\bm{A}都可以。微分符号“d”在积分中微分符号“d”也应是直立的。用\mathrm{d}$\int f(x) \mathrm{d}x$。4.3 长公式与换行当公式太长一行放不下时切忌在编辑器里让它自然换行。应该使用multline或split环境需amsmath宏包来主动控制换行并确保换行后的对齐方式和可读性。\begin{multline} P \left( \sum_{i1}^{n} a_i b_i \sum_{i1}^{n} c_i d_i \right) \times \\ \left( \frac{\prod_{j1}^{m} \alpha_j}{\sum_{k1}^{p} \beta_k} \gamma \right) - \delta \end{multline}multline环境第一行左对齐最后一行右对齐中间行居中。split环境则需要在equation环境内部使用可以指定对齐点。5. 图表插入与排版专业性的直观体现图文并茂是优秀论文的标配但图表处理不当会让文档变得一团糟。5.1 图片插入格式、路径与浮动体\usepackage{graphicx} % 在导言区引入宏包 \begin{figure}[htbp] % 浮动体位置参数h(此处)t(顶部)b(底部)p(独立一页) \centering \includegraphics[width0.8\textwidth]{./figures/model_flowchart.pdf} % 推荐使用矢量图PDF或EPS \caption{模型求解流程图}\label{fig:flow} \end{figure}关键坑点格式优先尽可能使用矢量图PDF, EPS, SVG。无论怎么放大都不会失真打印效果极佳。位图PNG, JPG在放大后容易模糊。对于MATLAB、Python matplotlib生成的图直接保存为PDF格式是最好的选择。路径问题\includegraphics命令会按照LaTeX的搜索路径查找文件。建议将图片放在项目根目录的某个子文件夹如./figures/中并使用相对路径引用。在Overleaf中直接上传到项目对应文件夹即可。浮动体Floatfigure环境是一个“浮动体”LaTeX会尝试将它放置到最合适的位置如页面顶部[t]而不是严格紧随代码位置。参数[htbp]是推荐组合表示“尽量放在这里不行就放页面顶部或底部实在不行就单独一页”。不要过度使用[h]如果当前页真的放不下LaTeX可能会把它推到很远的地方或者报“Too many unprocessed floats”警告。信任LaTeX的排版算法通过\label和\ref来引用不要纠结于它是否在“正下方”。子图如果需要并排摆放多张子图使用subcaption宏包比过时的subfigure更好。\usepackage{subcaption} \begin{figure}[htbp] \centering \begin{subfigure}[b]{0.48\textwidth} \centering \includegraphics[width\linewidth]{fig1.pdf} \caption{情况A}\label{fig:sub1} \end{subfigure} \hfill % 填充水平间距 \begin{subfigure}[b]{0.48\textwidth} \centering \includegraphics[width\linewidth]{fig2.pdf} \caption{情况B}\label{fig:sub2} \end{subfigure} \caption{两种不同情况下的结果对比}\label{fig:compare} \end{figure}5.2 表格制作三线表与自动化学术论文推荐使用三线表简洁清晰。booktabs宏包提供了\toprule,\midrule,\bottomrule命令来绘制高质量的水平线。\usepackage{booktabs} % 在导言区引入 \begin{table}[htbp] \centering \caption{不同算法性能对比}\label{tab:performance} \begin{tabular}{cccc} % 四个列全部居中 \toprule 算法 精度 (\%) 耗时 (秒) 内存占用 (MB) \\ \midrule 算法A 95.2 12.3 150 \\ 算法B 93.8 8.7 220 \\ 算法C **96.5** 15.1 180 \\ \bottomrule \end{tabular} \end{table}高级技巧与坑点避免垂直线三线表原则上不应有垂直线用空格来区分列即可。复杂表格对于需要跨列(\multicolumn)或跨行(\multirow需multirow宏包)的复杂表格建议先在Excel或在线表格工具中规划好结构再转化为LaTeX代码。也可以考虑使用在线生成器如TablesGenerator.com。表格过宽如果表格太宽超出页面可以使用tabularx宏包指定总宽度或longtable宏包跨页长表格。小数点对齐对于数字列使用siunitx宏包的S列类型可以完美实现小数点对齐并方便地处理单位。\usepackage{siunitx} \begin{tabular}{l S[table-format3.2] S[table-format2.1]} % 格式整数位3小数位2 \toprule 项目 {数值1} {数值2} \\ % 列标题用花括号包裹防止被解析 \midrule 案例A 123.45 78.9 \\ 案例B 67.80 102.3 \\ \bottomrule \end{tabular}6. 参考文献管理告别手动编号的噩梦手动维护参考文献的编号和格式是学术写作中最痛苦的事情之一而BibTeX或BibLaTeX工具链可以让你彻底解脱。6.1 工作流程.bib文件是核心建立.bib数据库文件创建一个纯文本文件如refs.bib。每条参考文献都是一个条目有唯一的引用键Key。article{knuth1984, title{The {TeX}book}, author{Knuth, Donald E.}, journal{Addison-Wesley}, year{1984} } inproceedings{lamport1994, title{LaTeX: A document preparation system}, author{Lamport, Leslie}, booktitle{Addison-Wesley Professional}, year{1994} }如何获取这些BibTeX条目几乎所有学术搜索引擎Google Scholar, IEEE Xplore, ACM DL和期刊网站都提供“导出BibTeX”的选项。直接复制粘贴即可这是最高效的方式。在LaTeX文档中引用在文中需要引用的地方使用\cite{引用键}例如\cite{knuth1984}。指定参考文献样式和打印在文档的末尾\end{document}之前指定使用的样式如plain,unsrt,alpha,ieeetr等和数据库文件。\bibliographystyle{plain} % 指定样式 \bibliography{refs} % 指定.bib文件不要加后缀编译流程这是一个经典的四步编译流程确保万无一失xelatex main.tex生成.aux文件其中包含引用信息bibtex main.aux读取.aux和.bib生成.bbl参考文献列表xelatex main.tex将参考文献列表整合进文档但引用标记可能还是?xelatex main.tex最终解析所有交叉引用生成正确的编号在TeXstudio或VS Code中通常有一键编译按钮如“编译并查看”会自动完成这个流程。在Overleaf上你只需要点击一次“Recompile”它会自动处理所有步骤。6.2 常见坑点与DOI引用编译后引用显示为[?]**99%的情况是因为没有执行完整的编译链**。请确保执行了上面提到的四次编译或使用工具的一键功能。在Overleaf上有时需要多点击一次编译或者清除缓存后编译。样式不符要求数学建模比赛或期刊常有特定的参考文献格式要求。plain,unsrt是最常见的。如果需要国标GBT7714格式可以使用gbt7714宏包。务必在最终提交前确认样式是否符合要求。DOI字段现代BibTeX条目经常包含doi字段。一些样式如ieeetr会自动将DOI生成可点击的链接。如果你需要手动添加链接可以在.bib文件中使用howpublished或note字段或者使用url宏包在LaTeX中处理。但通常使用一个能识别DOI字段的参考文献样式是最省事的。中文文献引用中文文献时确保.bib文件以UTF-8编码保存。条目中的作者、标题等字段可以直接用中文。有些样式可能需要额外处理才能正确显示中文标点ctex宏包通常能很好地解决这个问题。7. 协作、版本管理与效率技巧数学建模是团队作战LaTeX文档的协作比Word方便得多但也需要一些规范。7.1 基于Overleaf或Git的协作Overleaf协作这是最简单的方式。创建一个项目邀请队友即可实时看到对方的编辑类似Google Docs。使用“历史”功能可以回溯任何时间点的版本。强烈建议比赛使用。Git版本控制对于更严肃、长期的项目如毕业论文使用GitGitHub, GitLab, Gitee是专业选择。将.tex,.bib,.cls等源文件纳入版本控制图片等二进制文件可以单独管理。每次大的修改都做一次提交Commit并写好提交信息。这能让你随时回退到任何一个可用的版本彻底告别“论文终版_final_真的最后改_v2.3.docx”这种混乱。7.2 自定义命令与环境提升效率的利器如果你发现一段复杂的格式代码比如一个特定的矩阵排版、一个常用的定理环境需要重复书写多次就应该把它定义成一个自定义命令或环境。% 在导言区定义 % 1. 自定义命令用于频繁输入的数学符号集合 \newcommand{\R}{\mathbb{R}} % 实数集 \newcommand{\expect}[1]{\mathbb{E}\left[#1\right]} % 期望算子带一个参数 % 在文中使用输入 $\R^n$ 得到 ℝⁿ输入 $\expect{X}$ 得到 [X] % 2. 自定义环境用于统一格式的“定义”或“定理” \usepackage{amsthm} % 定理环境宏包 \newtheorem{definition}{定义}[section] % 定义环境编号随章节变化 \newtheorem{theorem}{定理}[section] % 在文中使用 \begin{definition}[帕累托最优] 如果不存在其他解在所有目标上都不差于该解且至少在一个目标上严格优于它则该解称为帕累托最优解。 \end{definition}这样做的好处是一劳永逸全文档格式统一修改时只需改定义处所有使用的地方自动更新极大提高了代码的可读性和输入速度。7.3 调试读懂编译错误日志遇到编译错误Error不要慌。LaTeX的报错信息通常会在错误行附近用?提示。重点看错误信息的第一行它指出了错误类型如“Undefined control sequence”未定义命令“Missing $ inserted”缺少数学模式符号。从第一个错误开始修一个错误可能导致后面产生一堆连锁错误。先解决第一个。检查括号和花括号{}、[]、()是否匹配这是最常见错误源。检查特殊字符在普通文本模式中,%,$,#,_,^,~,\等字符有特殊含义如果要直接输出需要前加反斜杠转义如\$,\%,\。检查宏包冲突有时引入两个宏包packageA和packageB会因为定义了同名命令而冲突。可以调整宏包加载顺序或者使用\usepackage[options]{package}中的选项来规避。遇到诡异问题时可以尝试注释掉最近添加的宏包来排查。最后也是最重要的一个心得不要追求一次写成完美的LaTeX文档。先专注于把内容、公式、图表、参考文献的框架搭起来确保逻辑通顺。所有的格式调整字体、间距、页面布局都应该放在最后使用相应的宏包如geometry调整页边距titlesec调整标题格式setspace调整行距统一进行。记住LaTeX是你的助手它的价值在于让你从繁琐的排版中解放出来将全部精力投入到数学建模最核心的问题分析、模型构建与求解上去。当你熟悉了这些规则并避开这些坑点后你会发现用LaTeX写作其实是一种享受。