从编译到排版:美赛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: [ -synctex1, -interactionnonstopmode, -file-line-error, -halt-on-error, %DOC% ] } ], latex-workshop.latex.clean.fileDir: %DIR%, latex-workshop.latex.clean.subfolder.enabled: true }这里的核心是%DOC%它会被替换成当前打开的 tex 文件路径。-interactionnonstopmode让引擎遇到小错不要停下来等人输入-file-line-error让报错信息带上具体行号。clean.fileDir和clean.subfolder.enabled是后面清理 .aux/.log/.out 时用的先把它们配好编译过程会清爽很多。手动编译也一样在项目目录下执行xelatex -synctex1 -interactionnonstopmode -file-line-error mcmthesis-demo.tex注意要执行两次。第一次生成 .aux 辅助文件第二次把交叉引用、页码写进去。嫌麻烦可以用 latexmk 一条命令latexmk -xelatex -synctex1 mcmthesis-demo.tex2.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[margin0.8in]{geometry}margin0.8in表示上下左右四边统一 0.8 英寸。如果你觉得上下和左右想要不一样可以写成\usepackage[margin0.8in, top0.75in, bottom1in]{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[width0.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 sequenceLog 里提示的错误行看起来是中文注释的下一行导致你误以为中文注释破坏了语法。原因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。这个习惯救过我一次后来发现差一个宏包没装幸好提前验证没有在截止前两小时才发现。希望帮到你。本文还有配套的精品资源点击获取