从编译到排版:美赛LaTeX模板中文注释全攻略

简介:面向美国大学生数学建模竞赛参赛者的论文排版模板,压缩包内附中文注释,专门解决竞赛论文格式繁琐、LaTeX上手门槛高的问题;模板共6个文件,包含主文档、样式类、参考文献库、示例图片以及Python和MATLAB脚本,压缩包仅84KB,体量轻但结构完整。主文档用于承载摘要、引言、模型建立、结果分析与结论等章节,样式类预先定义好符合美赛要求的页边距、字体和标题层级,参考文献库可独立维护文献条目,图片与脚本示例则帮助参赛者快速掌握图表和求解代码的插入方式;中文注释逐条讲解章节设置、公式编辑、文献引用、图片插入及代码目录组织,并对公式环境、表格制作、交叉引用等常见写法作出提示,即使初次接触LaTeX也能按注释上手。这种设计能显著减少竞赛论文排版时间,让参赛者更专注模型构建与结果分析,也适合毕业设计或课程报告复用;目前已有145人学习浏览,下载后替换主文档内容即可生成专业规范的成稿。

1. 这个zip包解决的核心问题:在一堆LaTeX源码里找到格式“主心骨”

看到“美国大学生数学建模竞赛LaTeX论文模板(中文注释)”这个zip包时,大概率你已经受够了在Word里调页脚页码的痛苦:官方要求页边距不小于0.75英寸、摘要页固定板块、正文页数上限25页,每一条单独看都简单,组合起来却像在拆一个隐藏任务。这个模板做的事,就是把这堆格式规则写死在一套LaTeX源码里,并用中文注释把每条命令的作用标清楚,让你把注意力留在建模和写作上。适合第一次参赛、不想和分页符硬磕的队伍,也适合已经用过模板但编译总是半路翻车的人。

2. 打开 zip 后第一轮操作:从解压到出 PDF 的命令与顺序

2.1 先看目录结构:多数编译失败源于解压后路径不对

拿到 zip 的第一个动作不是双击里面的 .tex,而是先把压缩包解压到一个纯英文路径下。MCM 的 LaTeX 模板对路径里的空格、中文、括号都很敏感,尤其从微信或邮箱里传来的 zip,解压出来经常带着一层和你电脑用户名同名的嵌套目录,结果 \documentclass 找不到 .cls 文件,第一行就报错。

解压后正常会看到这几类文件:一个 .cls 或 .sty 作为模板核心,一个主 .tex 文件负责组装全文,可能还有一个单独的摘要文件、若干示例图片和一份 README。很多队伍的模板是基于 CTAN 上的 mcmthesis 改的,常见目录长这样:

. ├── mcmthesis.cls ├── mcmthesis-demo.tex ├── mcmthesis-demo.pdf ├── figures/ │ ├── model.png │ └── flow.png └── README.md

其中mcmthesis.cls就是整套格式的“黑匣子”:页边距、页眉样式、标题格式全在这里定义。主文件mcmthesis-demo.tex开头一般只有一行\documentclass{mcmthesis},后面是正文。中文注释通常不在 .cls 里,而在主文件和摘要文件里,因为 .cls 一处改动会影响全文,作者不会把太多使用说明塞进去。

如果 zipped 包里不止一个 .tex,不要凭文件名大小猜入口,先翻 README 或打开每个 .tex 看开头,谁先写了\documentclass,谁就是主文件。用 VS Code 打开时,LaTeX Workshop 插件还会在侧边栏列出所有文件,但它的默认编译目标只认当前打开的 .tex,打开错文件就会编译出一堆没用的中间产物。

2.2 用 VS Code + LaTeX Workshop 搭一个能处理中文的编译环境

美赛模板里带中文注释,不代表你的 TeX 系统默认能编译中文。注释本身会被引擎跳过,但正文里只要有汉字,就得用 XeLaTeX 或 LuaLaTeX 配中文支持。我一般建议装 TeX Live 而不是精简版 CTeX,因为美赛模板加载的宏包比较多,缺一个包就会报“File not found”之类的错,装完再补很折磨人。

VSCode 的 LaTeX Workshop 插件是目前最顺手的组合。安装完插件后,需要在 settings.json 里定义一个 XeLaTeX 编译链,否则插件默认用 PDFLaTeX,遇到中文就会翻车。配置参考如下:

{ "latex-workshop.latex.recipes": [ { "name": "xelatex", "tools": ["xelatex"] } ], "latex-workshop.latex.tools": [ { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-halt-on-error", "%DOC%" ] } ], "latex-workshop.latex.clean.fileDir": "%DIR%", "latex-workshop.latex.clean.subfolder.enabled": true }

这里的核心是%DOC%,它会被替换成当前打开的 tex 文件路径。-interaction=nonstopmode让引擎遇到小错不要停下来等人输入,-file-line-error让报错信息带上具体行号。clean.fileDir和clean.subfolder.enabled是后面清理 .aux/.log/.out 时用的,先把它们配好,编译过程会清爽很多。

手动编译也一样,在项目目录下执行:

xelatex -synctex=1 -interaction=nonstopmode -file-line-error mcmthesis-demo.tex

注意要执行两次。第一次生成 .aux 辅助文件,第二次把交叉引用、页码写进去。嫌麻烦可以用 latexmk 一条命令:

latexmk -xelatex -synctex=1 mcmthesis-demo.tex

2.3 为什么要编译两遍:第一遍收集引用,第二遍写死页码

很多新手第一次用 LaTeX 写论文,看到目录和引用编号变成??就以为模板坏了。其实这是 LaTeX 的固有设定:第一次运行时,模板扫描全文,把\label和\cite记录到 .aux 文件;第二次运行时,再把这些信息填回正文。论文模板里如果用了\pageref{LastPage},那更需要两遍,因为“总页数”本身也是从辅助文件里读的。

如果只编译一遍,最典型的症状是页码显示“Page 1 of 1”,而你的文档实际有 6 页。

latexmk 的用处就是自动判断要跑几遍。当你加了新引用、新图表后,直接执行latexmk -xelatex,它会先读取状态,再决定要不要跑第二遍。这一步不是玄学,而是模板正常工作的前提。

编译过程中生成的 .aux、.log、.out 文件可以暂时不管,但提交前一定要清理。“build latex project clean up auxiliary files”这个操作在美赛模板里尤其重要,因为官方只收 PDF 和你的代码,如果 zip 里混着一堆日志文件,评委会觉得你连交付物都管不好。清理命令如下:

latexmk -c

-c只删中间文件,保留最终 PDF;-C连 PDF 一起删,用于彻底重建。我一般用latexmk -c,因为 PDF 已经产出,只是清理附加物。

3. 把模板改成自己队伍要用的格式:页眉、字号、边距和行距的四个改动点

3.1 页眉里的“Team # 1234567”从哪来

美赛官方只规定了每页要有队伍号和页码,具体怎么写,模板作者通常用 fancyhdr 宏包自己设计。你在模板主文件里搜索fancyhead,会看到类似这样的代码:

\pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small Team \# 1234567} \fancyhead[R]{\small Page \thepage\ of \pageref{LastPage}}

\fancyhf{}先把默认页眉页脚清空,再往左边写队伍号,往右边写“第几页/共几页”。\thepage是当前页码变量,\pageref{LastPage}引用文档最后一页,依赖 lastpage 宏包。把 1234567 换成你报名后拿到的队伍编号即可,其他不用动。

这里要注意:摘要页是不需要页眉页脚的。美赛要求摘要页顶部用固定板块显示队伍号和 Problem Chosen,页眉再重复一套会很难看。模板里通常会在摘要页环境内加一句:

\thispagestyle{empty}

这一行只对当前页生效,正文页继续用 fancy 样式。如果你在摘要页看不到页眉,说明模板已经处理好了,不要自己删。

3.2 想要调整页眉的字号:\small 不够用

有段时间我为了把页眉字号从默认的 10pt 压到 9pt,直接去改\small,一点效果都没有。原因在于\small是相对字号命令,它的实际大小取决于当前文档的基准字号,而文档开头\documentclass[11pt]已经定好了基准。要精确控制页眉字号,得用 LaTeX 的字体切换语法:

\fancyhead[R]{{\fontsize{9pt}{11pt}\selectfont Page \thepage\ of \pageref{LastPage}}}

\fontsize{9pt}{11pt}的第一个参数是字号,第二个参数是行距;\selectfont让设置生效。外层花括号防止字号命令泄漏到后面的正文。如果你只是想让页眉小一点,改第一个数字即可,行距保持默认的 11pt 或 12pt 都行,不用过度纠结。

还有一点:模板里页眉字号如果注释写着“官方要求 11pt”,那是正文的要求,不是页眉。不要把页眉也设成 11pt,否则整页顶部会显得非常重。英文团队的这种细节不会被扣分,但会直接影响论文的整体观感。

3.3 页边距和行距:注释写的是“官方下限 0.75 英寸”,不是模板默认值

美赛官方规则说的是页边距不得小于 0.75 英寸,注意是“不得小于”,不是“必须等于”。很多模板为了保险,会把 margin 设成 1 英寸,但页数一紧张,大家就想把它压到 0.75。用 geometry 宏包改起来很直接:

\usepackage[margin=0.8in]{geometry}

margin=0.8in表示上下左右四边统一 0.8 英寸。如果你觉得上下和左右想要不一样,可以写成:

\usepackage[margin=0.8in, top=0.75in, bottom=1in]{geometry}

在参数设置上,我一般会先保持模板默认值,排完内容再微调。因为页边距一旦压到 0.75,正文每行能容纳的字数变多,图表宽度、缩进长度都会连锁变化,改一处可能要调三处。

行距同样是容易踩坑的地方。模板里常见的写法是\linespread{1.0}或\setstretch{1.0}。不要把\linespread{1.0}理解成“不能改”,它只是基线的倍率,降到 0.9 会让文字挤一点,升到 1.3 会让论文更有呼吸感。美赛不硬性规定行距,但要小心页数上限 25 页。我的经验是:如果内容超过 1 页,先试着把行距从 1.2 降到 1.15,对比后改动最小,比单独调 margin 影响面小得多。

4. 摘要页与正文排版:三句容易误解的注释背后是什么

4.1 摘要页的标题区与摘要环境:不要沿用论文模板的 \maketitle

美赛摘要页顶部必须一眼能看到队伍号和选题,很多模板用titlepage环境或直接在正文顶部写居中段落。如果你在一份带中文注释的模板里看到类似下面的结构:

\begin{titlepage} \begin{center} {\Large \textbf{Team \# 1234567}} \\ {\large Problem Chosen: A} \end{center} \vspace{2em} \begin{abstract} 本文提出了一种…… \end{abstract} \end{titlepage}

注意这个abstract环境是模板自定义过的,不是 LaTeX 内建的摘要格式。它通常已经把摘要文段限定在一页之内,并关闭了页面底部的默认编号。你只需要把“Team # 1234567”换成自己的队号,把“Problem Chosen: A”改成实际问题(ICM 是 D、E、F),剩下的正文写作就在\begin{abstract}和\end{abstract}之间完成。

摘要页里不要放图表、不要写参考文献引用。评论员一般只看摘要页决定看不看正文,如果摘要页有公式排版错误或者字体不一致,会直接影响第一印象。还有一个容易被忽略的点:摘要标题“Abstract”到底用不用加粗、字号多大,美赛没有严格规定,但模板注释里如果已经写了,就按你的模板来,不要同时用两份不同模板拼版。

4.2 把图片放在指定位置:float 宏包和 [H] 只解决一半问题

LaTeX 默认的图片不是“在当前位置”,而是“在这一页某个你觉得奇怪的地方”。很多人第一次用模板,图老被推到下一页,于是注释里会提示你加载 float 宏包:

\usepackage{float}

然后在 figure 环境里用[H]代替[htbp]:

\begin{figure}[H] \centering \includegraphics[width=0.85\textwidth]{figures/model.png} \caption{模型结构示意图} \label{fig:model} \end{figure}

[H]的意思是“强制在这里排版”,大写 H 来自 float 宏包。\textwidth是正文宽度,0.85\textwidth相当于把图片缩到正文宽度的 85%,这样不会因为原始图片分辨率太高而溢出页边缘。

图片放不对位置的另一个常见原因是路径名夹杂中文或空格。\includegraphics{figures/我的图.png}在 XeLaTeX 下偶尔能编译,但一旦文件名里有空格就必须用花括号把整个路径包起来,否则引擎会读成两个参数。我一般把所有图改成纯英文小写加下划线,比如figures/model_arch.png,从根源上避开这类问题。

还有一点容易忽略:\caption和\label的顺序。必须先写\caption再写\label,因为\label记录的是“上一个自动编号环境”的编号。顺序反了,引用编号会变成上一张图的编号,这个错在编译时不报,得等到看见??或错误的图编号才反应过来,很浪费时间。

4.3 跨页表格:table 环境做不到,longtable 才行

美赛论文里常出现参数对比表,动辄十几行,如果一页放不下,用table环境配tabular是没法跨页的,内容会被截断或整体推到下一页。模板注释里如果提到“表格跨页用 longtable”,意思就是要加载 longtable 宏包,把表格环境改成:

\usepackage{longtable}

具体写在正文里的结构是这样:

\begin{longtable}{p{2.5cm} p{5cm} p{7cm}} \caption{参数含义对照表} \label{tab:params}\\ \toprule 参数名 & 含义 & 取值结果 \\ \midrule \endfirsthead \toprule 参数名 & 含义 & 取值结果 \\ \midrule \endhead 学习率 & 控制每步更新幅度 & 0.01 \\ 批量大小 & 每轮样本数 & 128 \\ \\ \bottomrule \end{longtable}

\endfirsthead之前的表头只在第一页出现,\endhead之前的表头在后续每一页顶部重复。这样表格就不会因为跨页而丢失列含义。列宽用p{2.5cm}方式指定,后面的内容会自动换行,不会像l那样硬撑到页边缘。

如果你不需要让表格跨页,只是想让表格不飘走,可以用[H]配合table环境,道理和图片一样。

5. 编译报错与翻车排查:四个在中文注释模板里常见的坑

5.1 现象:卡在Undefined control sequence.,而且出错行正好是中文注释下面一行

现象:编译进行到一半,报错Undefined control sequence,Log 里提示的错误行,看起来是中文注释的下一行,导致你误以为中文注释破坏了语法。

原因:LaTeX 引擎把注释%到行尾的内容全部忽略,所以报错行号会指向注释后面第一个有效命令。真正的问题往往是那行命令使用了未定义的宏,比如模板里自定义的命令在正文中改了名字,或者宏包没加载。

解决:不要盯着注释行,按 Ctrl 点击报错跳转到.tex里的具体行,看它调用的\xxx命令是否在文件前面有\newcommand定义。没有定义就补上,或搜索模板自带宏包是否被注释掉。这是最普遍的模板自定义踩坑,不是中文注释的锅。

5.2 现象:中文变乱码或空心方框

现象:编译能通过,但 PDF 里所有中文字符变成黑色方块、空心框或者一堆无关的符号。

原因:模板用的是 XeLaTeX 引擎,而你按很多旧教程用了 PDFLaTeX;或者编辑器保存时把文件编码存成了 GBK,模板却声明了 UTF-8。这两种情况都会让中文显形失败。

解决:先在 VS Code 右下角确认文件编码是 UTF-8,再在编译工具里选 xelatex 而不是 pdflatex。如果用的是 TeXstudio,把默认编译器改成 XeLaTeX,并确保文档类里没有\usepackage[utf8]{inputenc}这行,因为 XeLaTeX 下不需要它,留着反而会和某些宏包冲突。

5.3 现象:交叉引用全是??,页码显示Page 1 of 1

现象:文中所有\ref、\cite显示成??,页眉的“Page X of Y”里 Y 永远是 1,但文档实际有 5 页。

原因:只编译了一遍。第一遍生成的 .aux 文件里只有标签信息,没有对应的引用值,需要第二遍才能填进去。如果用了 latexmk 仍然这样,可能是 .aux 文件被误删或权限锁定。

解决:手动执行xelatex mcmthesis.tex两遍。第二遍看Rerun to get cross-references right的提示,如果没有提示,说明引用都解析成功了。再不行就把 .aux、.out 文件全部删掉,重新完整编译两轮,这相当于给 LaTeX 一次“后悔药”。

5.4 现象:图片不显示,只出现一个灰色方框和路径名

现象:编译不报错,但 PDF 里图片位置只有一个方框,里面写着figures/xxx.png,图片本身不渲染。

原因:路径错误、文件名大小写不对,或者图片格式与当前引擎不兼容。XeLaTeX 本身能处理 png/jpg/pdf,但对 eps 的处理需要额外转换,如果模板原图是 .eps,用 xelatex 编译时可能需要加\usepackage{epstopdf}或直接转成 pdf。

解决:先在文件管理器里确认图片真实存在,再对比.tex里写的是figures/model.png还是figures/Model.png。路径没问题后就检查格式,我一般统一转成 PDF 或 PNG,并把图片放进 figures 目录,正文里不要写相对路径之外的复杂目录。图片空白这种问题,靠看 Log 尾部比翻全文有用。

6. 把模板当工具箱用:两个让论文更像正式作品的小技巧

6.1 用\newcommand给模型名和符号建“缩写表”

模板用顺了之后,正文里反复出现的模型名会很啰嗦,比如“NGBoost”“LSTM”或某个带希腊字母的变量。每处手打一遍,容易在某个地方打出不同的缩写。我习惯在摘要下方加一段预定义命令:

\newcommand{\nb}{\textsc{NGBoost}} \newcommand{\xvec}{\boldsymbol{x}}

第一个命令把\nb映射成小型大写字母的 NGBoost,正文写\nb即可;第二个命令把\xvec映射成粗体向量x。这样就算后期把 NGBoost 改成其他模型,只需要改一行定义,全文自动同步。Word 公式转 LaTeX 时,粘贴进来的变量名往往带着\mathrm{},把它们统一替换成\xvec这类命令,正文会干净很多,也便于美赛评委快速识别核心符号。

6.2 提交前清场并验证只有必要文件

交 PDF 之前,我习惯执行latexmk -C清空所有中间文件,包括 .aux、.log、.out、.synctex.gz。这样做的代价是下次打开模板要重新编译两遍,但能保证交付压缩包里只包含 .tex、.cls、.bib、图片和最终 PDF。清干净后,我会强制自己再完整编译一次,确认从零开始也能出 PDF。这个习惯救过我一次,后来发现差一个宏包没装,幸好提前验证,没有在截止前两小时才发现。希望帮到你。

本文还有配套的精品资源,点击获取