简介:本资源是专为海南师范大学本硕博学生设计的学位论文LaTeX排版模板2.0源码包,面向需提交规范学术论文的本科生、硕士生与博士生,解决学校格式要求严、手动排版易出错、参考文献格式不统一等核心痛点。压缩包共50个文件,总计11.97MB,涵盖15个核心.tex文件(定义页边距、章节结构、目录与参考文献样式)、2个.bib与2个.bst文件(支持GB/T 7714数值型与作者年份型引用)、6个.md文档(含安装指南、基础用法与编辑器配置说明)、多格式图片(PNG/JPG/JPEG)及PDF样例(含学士、硕士、专业学位等不同版本),并附Python脚本与批处理文件用于自动化清理与编译。已有383人学习下载,提供开箱即用的.cls主类文件、完整章节模板(摘要、引言、附录、致谢等)、BibTeX参考文献管理方案及典型图表插入示例,显著降低格式调试成本,助力学生聚焦科研内容本身。 学位论文写到最后,格式往往比内容更让人头大。我这两年维护了一套基于海南师范大学本硕博学位论文规范的LaTeX模板,目前迭代到2.0版本,源码已经在Git仓库里管理起来了。这篇文章把整个模板的设计思路、核心实现、实操流程和排坑记录完整梳理一遍,写给所有正在被学位论文格式折磨的同学,也写给想自己动手写一套学校模板的朋友。如果你只想快速把手里的论文跑成PDF,直接从第3章看起;如果你想知道为什么模板要这样设计,建议从头通读。
1. 模板设计思路与核心架构
1.1 为什么坚持用LaTeX而不是Word
每年毕业季,总能看到同一幕:论文交上去,导师邮件回来一页修改意见,全是格式问题。字体不统一、行距不一致、图表编号错乱、参考文献格式五花八门。这些在Word里要一条一条手动改,累不说,还特别容易漏改。我所在的课题组从2019年开始尝试用LaTeX写学位论文,中间踩了无数坑,但坚持下来的原因很简单:LaTeX把内容和样式彻底分开,你只管写字,格式交给模板控制。
这套模板的核心价值在于三个层面。第一,把学校的格式规范固化成了文档类文件,学生不用关心"第几级标题用什么字号"这类问题。第二,图表、公式、参考文献全部自动编号和交叉引用,后期增删内容时不用手动改编号。第三,LaTeX源码是纯文本,用Git管理版本、导师审阅修改记录都非常方便,这在多人协作和反复修改的场景里优势明显。
当然,LaTeX也不是没有代价。初次学习有曲线,宏包之间偶尔冲突,中文排版需要额外配置。但一旦模板稳定下来,后续的写作效率会高很多。这也是我花力气把模板做成2.0版本的原因:让使用门槛降低,让格式问题不再成为论文写作的瓶颈。
1.2 模板2.0的整体项目结构
一个成熟的论文模板,绝不能只放一个main.tex就完事。2.0版本把整个项目做了模块化拆分,既方便日常写作,也方便后期维护。目录结构大致如下:
hnnu-thesis-template/ ├── main.tex % 主文件:导言区 + 正文控制 ├── hnnu-thesis.cls % 文档类:封装学校格式规范 ├── setup/ │ ├── packages.tex % 宏包统一管理 │ ├── format.tex % 字体、间距、页眉页脚定义 │ └── commands.tex % 自定义命令(摘要、致谢等环境) ├── body/ │ ├── cover.tex % 封面信息 │ ├── abstract.tex % 中文摘要 │ ├── abstract-en.tex % 英文摘要 │ ├── chapter1.tex % 各章正文,按章拆文件 │ ├── chapter2.tex │ ├── ... │ ├── conclusion.tex % 结论 │ ├── appendix.tex % 附录 │ └── acknowledgements.tex % 致谢 ├── ref/ │ └── refs.bib % BibTeX文献库 ├── figures/ % 图片统一存放 └── latexmkrc % latexmk配置文件这个结构的核心思路是"按职责拆文件"。main.tex只负责把各部分include进来,本身内容很少;hnnu-thesis.cls是模板的心脏,学校的格式规范全部在这里实现;body/目录下每个章节一个文件,写作时可以只打开当前章节文件,不会像单文件那样越写越长导致编辑卡顿。
1.3 核心宏包选型与取舍逻辑
宏包选型是模板稳定性的关键。2.0版本在宏包使用上比较克制,只保留真正必要且经过时间验证的宏包。下面是核心宏包清单和各自的职责:
| 宏包 | 解决的场景 | 使用理由 |
|---|---|---|
| ctex | 中文字体与排版 | 自动处理中文环境,支持xelatex编译 |
| geometry | 页边距设置 | 学校规范要求精确的页边距值,一条命令搞定 |
| fancyhdr | 页眉页脚 | 控制页眉线、页码位置和奇偶页样式 |
| titlesec | 章节标题格式 | 精确定义各级标题的字号和间距 |
| enumitem | 列表环境间距 | 去除默认列表多余间距,更紧凑 |
| caption | 图表题注格式 | 统一图表标题字体、编号样式 |
| booktabs | 三线表 | 学术规范推荐表格样式 |
| natbib | 参考文献引用 | 配合gbk2e/gbt7714风格处理引用 |
| hyperref | 超链接与书签 | PDF目录点击跳转,不显示红色边框 |
| cleveref | 交叉引用增强 | 自动生成"图1-1""表2-3"等引用前缀 |
这里特别说一下cleveref。写论文时经常要写"如图1-1所示",如果手动输入编号,图表一调整就全乱套。cleveref配合\label可以自动生成带前缀的引用文字,比如\cref{fig:architecture}编译后直接输出"图1-1"。这样就不怕增删图表时编号对不上了。需要注意,cleveref宏包必须放在hyperref之后加载,否则会报错,这也是很多新手容易踩的坑。
2. 从学位论文规范到代码:关键细节实现
2.1 中文字体与版式的参数化配置
学位论文格式规范的常见要求是:正文宋体小四号,行距20磅;一级标题黑体三号居中;二级标题黑体四号;英文和数字用Times New Roman。这些要求在hnnu-thesis.cls里通过ctex宏包和字号命令来统一设置。
第一部分是中文字体配置。2.0版本用ctex宏包的fontset选项来显式指定字体集,避免不同系统上字体差异导致的排版错乱:
\LoadClass[zihao=-4, UTF8, fontset=fandol]{ctexbook}zihao=-4表示正文默认小四号字,fontset=fandol使用Fandol字体(TeX Live自带的开源中文字体),这样即使系统里没有安装宋体黑体也能正常编译。对于系统已安装中文字体的情况,可以改成fontset=windows或fontset=mac来使用系统字体,字体渲染效果会更好。Fandol字体在Linux和macOS下是兼容性最好的选择,实测在各种环境中编译都不会缺字。
第二部分是页边距和行距。以海南师范大学学位论文规范为例,论文一般要求上边距3.0cm、下边距2.5cm、左边距3.0cm、右边距2.5cm。通过geometry宏包配置:
\geometry{ top=3.0cm, bottom=2.5cm, left=3.0cm, right=2.5cm, headheight=1.5cm, footskip=1.0cm }行距设置要注意一个小陷阱:直接设置\linespread会影响所有行距,而学位论文要求的是"固定值20磅"。正确的做法是用\setlength{\baselineskip}{20pt}来控制正文基线间距,同时配合\setstretch处理不同字号下的行距倍率。我在模板里封装了一个命令用来设置正文行距:
\renewcommand{\normalsize}{\fontsize{12pt}{20pt}\selectfont}这个命令把字号设为12pt(对应小四),行距设为20pt(对应规范要求),一行代码同时解决字号和行距两个问题。第5章的内容更详细,可以先记下这个思路。
2.2 封面、承诺页与前置部分的处理
封面是学位论文里格式最复杂的一页,因为它的版式和其他页面完全不同,通常不编页码,标题和信息的对齐方式也比较特殊。2.0版本的封面板式采用"居中表格+手动换行"的方式实现,这样能在不引入复杂排版宏包的情况下精确控制每个元素的位置。
封面上的"题目""学院""专业""学号""姓名""指导教师"等字段,在模板里定义成了用户填写的变量。使用时只需要在cover.tex里修改对应的值:
\newcommand{\thetitle}{基于深度学习的遥感图像语义分割方法研究} \newcommand{\theauthor}{张三} \newcommand{\thecollege}{信息科学技术学院} \newcommand{\themajor}{计算机科学与技术} \newcommand{\thestudentid}{2020123456} \newcommand{\thesupervisor}{李四教授} \newcommand{\thedegree}{硕士} \newcommand{\thedate}{二〇二四年五月}这样做的好处是,封面所有信息集中在一个文件里维护,不会出现"题目改了这里忘了那里"的问题。声明页和授权页同样做了模板化处理,在preface.tex里放好统一样式的文字内容,学生只需打印后手写签名。
摘要和目录部分用的是罗马数字编页码,正文部分重新从阿拉伯数字1开始编页码。这个切换通过在main.tex中插入\pagenumbering命令来实现:
\frontmatter \pagenumbering{Roman} \include{body/abstract} \tableofcontents \mainmatter \pagenumbering{arabic} \include{body/chapter1}2.3 本硕博规范差异的选项化设计
2.0版本最大的一个改动是支持本科、硕士、博士三种学位类别一键切换。不同学位的论文规范在几个地方有差异:封面信息不同、章节标题字号不同(博士论文一级标题通常更大)、是否要求英文摘要、参考文献数量要求不同等。
模板用LaTeX的文档类选项机制来区分这三种模式。在hnnu-thesis.cls里通过\DeclareOption定义选项,并在主文件的\documentclass处指定:
\documentclass[degree=master]{hnnu-thesis}可选值包括bachelor、master、doctor三个。在format.tex里,通过条件判断来加载不同的格式配置:
\DeclareOption{doctor}{% \def\hnnu@degree{博士} \def\hnnu@chapterfont{\zihao{3}\heiti} } \DeclareOption{master}{% \def\hnnu@degree{硕士} \def\hnnu@chapterfont{\zihao{4}\heiti} } \DeclareOption{bachelor}{% \def\hnnu@degree{本科} \def\hnnu@chapterfont{\zihao{4}\heiti} }这样设置之后,一份源码通过改一个选项就能在三种学位模式之间切换,不用复制多套模板。另外模板还内置了"盲审模式"开关,启用后会自动隐藏封面上的姓名和学号信息,生成送审版本。这个功能在论文送审阶段特别实用,我在cls文件里用一个布尔选项控制:
\newif\ifblindreview \DeclareOption{blind}{% \blindreviewtrue }盲审模式下,封面姓名、学号、致谢中的导师姓名都会被\ifblindreview条件包住,编译时不会输出。
3. 实操:从拉取源码到产出首个PDF
3.1 环境准备:TeX Live安装与VSCode配置
模板2.0基于XeLaTeX编译流程,推荐使用TeX Live发行版,版本建议2022以上。安装包在官网下载,全平台支持。Windows下直接运行install-tl批处理脚本,macOS和Linux下解压后也有对应脚本。安装时建议选择完整方案(full scheme),虽然占用磁盘空间比较大(差不多6到8GB),但好处是几乎所有宏包都自带,省去后续缺宏包一个个装的时间。如果磁盘实在紧张,也可以在安装时勾选"medium"或"small"方案,然后随用随装。
装完之后,在命令行验证环境:
xelatex --version latexmk --version两个命令都能正常输出版本信息就说明安装成功。推荐使用latexmk作为编译驱动,它能根据文件变化自动判断需要编译几次,尤其是带参考文献的项目,不用手动记忆"先编译、再biblatex、再编译两次"这个流程。
编辑器推荐VSCode加LaTeX Workshop插件。插件装好后,需要做一点配置才能在保存时自动编译。在.vscode/settings.json里写入:
{ "latex-workshop.latex.recipes": [ { "name": "latexmk-xelatex", "tools": ["latexmk-xelatex"] } ], "latex-workshop.latex.tools": [ { "name": "latexmk-xelatex", "command": "latexmk", "args": [ "-xelatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%" ] } ], "latex-workshop.view.pdf.viewer": "tab" }这个配置的核心是把编译命令切换成latexmk -xelatex。重点说一下为什么不用默认的pdflatex:学位论文模板涉及大量中文内容和ctex宏包,只有XeLaTeX或LuaLaTeX能正确处理中文字体和一些Unicode字符。另外,-synctex=1参数会生成正反向定位文件,在VSCode里按住Ctrl点击PDF可以跳转到对应源码行,写长论文时这个功能能省很多翻找时间。
3.2 从Git克隆模板到完成首次编译
模板源码克隆到本地后,第一步是检查文件结构是否完整,然后打开main.tex查看导言区:
\documentclass[degree=master]{hnnu-thesis} \input{setup/packages} \input{setup/format} \input{setup/commands} \begin{document} \input{body/cover} \frontmatter ... \mainmatter ... \end{document}首次编译前,建议先什么都不改,直接在终端执行:
latexmk -xelatex main.tex如果终端顺利跑完且没有报错,会在当前目录生成main.pdf。这一步通过说明环境配置没有问题。
然后依次修改这几个文件:
body/cover.tex里替换封面个人信息。body/abstract.tex和body/abstract-en.tex里写中英文摘要和关键词。body/chapter1.tex等章节文件里替换正文内容。ref/refs.bib里放自己的参考文献条目。
注意每次修改后都要重新编译。如果只改了某一章的内容,可以在VSCode里直接按Ctrl+L再Ctrl+B快速编译;如果改了refs.bib里的文献条目,latexmk会自动检测并重新跑BibTeX流程,不用手动干预。
编译过程中如果出现红色报错但PDF已经生成了一部分,先不要慌,很多情况下只是后面部分语法有问题。在终端按下回车继续跑完,记住报错位置,打开对应的.tex文件定位修改即可。
3.3 参考文献管理与BibTeX流程
参考文献在学位论文里是个重头戏。2.0模板采用BibTeX + natbib + gbt7714风格的方案。引用方式很简单,在正文里用\citep{key}或\citet{key}引用,在refs.bib里定义条目:
@article{deeplearning2017, author = {LeCun, Yann and Bengio, Yoshua and Hinton, Geoffrey}, title = {Deep learning}, journal = {Nature}, volume = {521}, number = {7553}, pages = {436--444}, year = {2015}, doi = {10.1038/nature14539} }\citep{deeplearning2017}会生成(作者,年份)形式的引用,\citet{deeplearning2017}会生成作者(年份)形式。gbt7714宏包会自动按照国标的"著者-出版年制"或"顺序编码制"来排版参考文献表,具体用哪种在format.tex里设置:
\citestyle{gb7714-2015} \bibliographystyle{gbt7714-numerical}顺序编码制更常用于学位论文,因为可以在参考文献表里用[1]、[2]标注顺序,正文中用上标[1]或者方括号[1]引用。这两处配置控制在正文中的引用样式和文末参考文献表的格式,如果学校要求著者-出版年制,只需要改成\bibliographystyle{gbt7714-author-year}即可。
常见问题是,很多同学参考文献直接从知网导出的文件复制到refs.bib里,会出现字段缺失或编码问题。建议用专门的文献管理工具(如Zotero或JabRef)导出BibTeX格式,export前检查一下每个条目的必填字段是否完整,特别是author、title、year、journal这几个。
4. 论文写作中的高频问题排查与经验
4.1 中文与特殊字符处理
LaTeX里中文排版最典型的问题是字体缺失和特殊字符转义。用Fandol字体一般不会出现缺字问题,但如果使用fontset=windows方式,系统里没有宋体或黑体时,编译会直接报错并中断。排查办法是在命令行执行:
fc-list :lang=zh检查当前系统有哪些中文字体。没有中文字体的系统直接换成fandol即可。
另一个高频问题是特殊字符的转义。LaTeX源码里,以下字符有特殊含义,直接输入会导致编译报错:
| 字符 | 含义 | 正确输入方式 |
|---|---|---|
| % | 注释符 | % |
| & | 表格对齐符 | & |
| # | 参数占位符 | # |
| _ | 下标符 | _ |
| { } | 分组符 | { } |
| ~ | 不断行空格 | ~{} |
| ^ | 上标符 | ^{} |
| \ | 命令起始符 | \textbackslash{} |
写论文时最容易出问题的其实是百分号和下划线。比如在正文里写"准确率提升了5%",如果不把%转义,LaTeX会认为后面的内容都是注释,导致整段文字莫名消失。还有在文件名或变量名里带下划线时,比如SVM_Classifier,下划线会被解析成数学公式的下标,编译报错。正确的写法是SVM\_Classifier。
数学符号方面有两个高频需求:百分号直接用\%或\text{\%},大于等于号用$\geq$或$\ge$,小于等于号用$\leq$或$\le$。如果需要写区间范围,更规范的写法是$[10, 20]$或$[a, b]$。公式里出现连续的省略号可以用$\ldots$(低省略号)或$\cdots$(中省略号),具体用哪个取决于上下文,通常在"1, 2, 3, ..., n"里用$\ldots$,在"1 + 2 + ... + n"里用$\cdots$。
在写长文档时,还会用到块注释。LaTeX没有原生块注释语法,常用做法是\iffalse ... \fi来包裹一段暂时不需要编译的内容。在修改论文时,用这种方式临时屏蔽某段内容比一行行注释要高效得多。
4.2 图表浮动体与题注避坑
图表浮动是LaTeX新手最容易困惑的地方。明明在文字后面放了图片代码,编译出来图片却跑到下一页甚至下一章去了。这是因为LaTeX的浮动体机制会自动寻找最佳放置位置。在模板里,控制浮动位置是通过选项完成的:
\begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{figures/xxx.png} \caption{实验网络结构图} \label{fig:network} \end{figure}位置参数[htbp]的含义是:h (here) 当前文字位置,t (top) 页面顶部,b (bottom) 页面底部,p (page) 单独页面。LaTeX会按照顺序尝试这些位置,直到找到合适的位置放下图片。如果对图片位置有绝对要求,可以用[H]参数并加载float宏包,强制图片显示在代码所在位置。但我不建议全文档都用[H],这会破坏LaTeX的浮动优化逻辑,导致页面出现大片空白。
表格题注和图注的样式也不同:图注通常放在图片下方居中,表注放在表格上方居中。模板通过caption宏包设定了全局样式:
\captionsetup[figure]{ font={small}, labelsep=space, name={图}, position=bottom } \captionsetup[table]{ font={small}, labelsep=space, name={表}, position=top }这样配置后,图和表的编号会自动变成"图1-1""表2-2"的章节号加序号格式,不需要手动输入。label的位置要注意:必须放在\caption之后,引用才能正确抓取编号。如果\label放在\caption之前,\cref引用的会是章节编号而不是图表编号,这个小陷阱我曾经帮实验室同学排查过好几次。
4.3 宏包冲突与常见编译错误
LaTeX模板排错是最考验经验的部分,下面整理几个使用过程中最高频的问题和排查方案。
第一个常见问题是hyperref与其他宏包的冲突。很多宏包会内部修改PDF书签相关的命令,和hyperref叠加时会导致编译报错。最稳妥的做法是把hyperref放在宏包加载的最后(cleveref除外,它可以放在hyperref之后加载),这样可以最大程度减少冲突。如果编译时报错信息里有\Hy@xxx undefined之类的字样,基本都是hyperref被别的宏包覆盖了,检查一下宏包加载顺序。
第二个问题是cleveref导致"label undefined"警告。写论文时经常会在refs.bib里新加一条文献,然后在正文引用,如果编译流程不完整就会出现引用编号为问号的情况。使用latexmk时会自动处理,但如果手动依次执行xelatex,需要按正确顺序执行:编译一次生成aux文件,再运行bibtex main处理文献数据,再编译两次更新引用标记。具体命令是:
xelatex main.tex bibtex main xelatex main.tex xelatex main.tex这套流程背后逻辑是:第一次编译生成辅助文件,BibTeX读取辅助文件里的引用信息并生成bbl文献列表,后续两次编译把参考文献和引用编号写入最终PDF。如果中间某一步漏了,就会出现编号错乱或"??"的情况。
第三个问题是编译过程中突然产生的奇怪错误,这种时候优先检查是不是临时文件损坏。建议先执行:
latexmk -c清理掉所有中间文件(aux、log、bbl等),重新编译。如果清理后问题还存在,再回退到最近一次能正常编译的版本对比差异。我在实际维护模板时经常遇到"昨天还好好的,今天突然编译失败",绝大多数情况不是模板问题,而是修改正文时引入了语法错误或者宏包更新后行为变化。
5. 模板2.0的实战体会与使用建议
5.1 从1.0到2.0:几个关键改进点
1.0版本的模板是大学期间赶工出来的,当时只满足了学院对硕士论文的基本格式要求,硬编码非常多,比如章节标题格式直接写在每个章节文件里,修改格式要全局替换。2.0版本做了系统重构,最大的变化是把本硕博三种学位规范统一到一个文档类里,通过选项切换。其次是全部图表索引改成\cref自动生成,杜绝了手动输入编号带来的错漏。
在这里举一个1.0时期让实验室同学抓狂的问题:毕业论文里有几十张实验图表,当时用word手动编号,每次加一张图,后面所有编号全部要手动重新更新。换到LaTeX后,把\label和\cref配套使用,编号永远自动生成,这才是论文排版工具该做的事情。
2.0还有一个重要的改动是增加了Overleaf兼容性。考虑到很多同学习惯使用在线编辑器,模板在setup/packages.tex里加了判断,检测当前环境自动适配编译器类型。如果你用Overleaf,直接上传模板压缩包,在Menu里把Compiler切到XeLaTeX就能编译,不用在本地装TeX Live。不过Overleaf的免费版编译时间有限制,长论文建议还是本地编译更方便。
5.2 给模板使用者的防呆建议
使用LaTeX模板写论文,有几个习惯越早养成越省事。
第一,一个章节一个文件,不要把所有内容堆在main.tex里。文件拆开后,定位错误和单独编译某个章节都方便很多。模板已经按章节拆好了,你只需要往对应文件里填内容即可。
第二,图片文件统一放进figures/目录,命名用英文加短横线,比如fig-nas-structure.pdf。不要用中文文件名,也不要放一堆"未命名1.png",不然图多了根本分不清哪张对应哪个部分。图片格式建议用PDF(矢量图)、PNG或JPG。截图建议保存为PNG,线条图建议导出PDF矢量格式,放大也不模糊。
第三,每写完一个章节就编译一次,不要等到全写完再编译,否则几十处报错堆在一起,排查起来非常痛苦。写一点、编译一点、修正一点,这是最稳的工作流。
第四,refs.bib里每条文献的key建议用"作者姓氏+年份+关键词"格式,比如lecun2015deep。这样引用时\citep{lecun2015deep}很好记,也不会出现两个key重复导致编译警告。
5.3 模板后续扩展方向
2.0版本目前覆盖了学位论文的主要场景,但还有一些可以扩展的方向。比如部分院系要求提交开题报告,格式规范与学位论文不同但相近,可以考虑做一个report选项复用现有框架。再比如有些学校要求论文附带的查重版本要把图表压缩到指定大小,可以在模板里加一个review选项,自动调用\includegraphics的参数来完成图片压缩。
还有一个很实际的功能是数据表自动生成。很多实验数据是用Python或MATLAB算完导出到CSV的,目前大家都是手动粘贴到论文表格里。后续可以考虑在模板里集成datatool宏包,直接读取CSV文件生成三线表,这样数据和论文之间就不会出现手工复制造成的误差。这个功能对理工科学生尤其有用。
说回模板本身,一套稳定的模板要能在不同操作系统、不同发行版、不同年份间持续工作,这个比什么都重要。2.0版本在兼容性上做了很多测试,Windows、macOS、Ubuntu和Overleaf四种环境都能正常编译,但后续还是需要跟着TeX Live的更新持续调整。我自己也在继续维护这套模板,如果你在使用过程中发现了问题,或者有更好的实现思路,欢迎提交issue或Pull Request。开源项目就是这样,一个人踩坑,一群人受益。
本文还有配套的精品资源,点击获取