简介本资源是专为海南师范大学本硕博学生设计的学位论文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, fontsetfandol]{ctexbook}zihao-4表示正文默认小四号字fontsetfandol使用Fandol字体TeX Live自带的开源中文字体这样即使系统里没有安装宋体黑体也能正常编译。对于系统已安装中文字体的情况可以改成fontsetwindows或fontsetmac来使用系统字体字体渲染效果会更好。Fandol字体在Linux和macOS下是兼容性最好的选择实测在各种环境中编译都不会缺字。第二部分是页边距和行距。以海南师范大学学位论文规范为例论文一般要求上边距3.0cm、下边距2.5cm、左边距3.0cm、右边距2.5cm。通过geometry宏包配置\geometry{ top3.0cm, bottom2.5cm, left3.0cm, right2.5cm, headheight1.5cm, footskip1.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[degreemaster]{hnnu-thesis}可选值包括bachelor、master、doctor三个。在format.tex里通过条件判断来加载不同的格式配置\DeclareOption{doctor}{% \def\hnnudegree{博士} \def\hnnuchapterfont{\zihao{3}\heiti} } \DeclareOption{master}{% \def\hnnudegree{硕士} \def\hnnuchapterfont{\zihao{4}\heiti} } \DeclareOption{bachelor}{% \def\hnnudegree{本科} \def\hnnuchapterfont{\zihao{4}\heiti} }这样设置之后一份源码通过改一个选项就能在三种学位模式之间切换不用复制多套模板。另外模板还内置了盲审模式开关启用后会自动隐藏封面上的姓名和学号信息生成送审版本。这个功能在论文送审阶段特别实用我在cls文件里用一个布尔选项控制\newif\ifblindreview \DeclareOption{blind}{% \blindreviewtrue }盲审模式下封面姓名、学号、致谢中的导师姓名都会被\ifblindreview条件包住编译时不会输出。3. 实操从拉取源码到产出首个PDF3.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, -synctex1, -interactionnonstopmode, -file-line-error, %DOC% ] } ], latex-workshop.view.pdf.viewer: tab }这个配置的核心是把编译命令切换成latexmk -xelatex。重点说一下为什么不用默认的pdflatex学位论文模板涉及大量中文内容和ctex宏包只有XeLaTeX或LuaLaTeX能正确处理中文字体和一些Unicode字符。另外-synctex1参数会生成正反向定位文件在VSCode里按住Ctrl点击PDF可以跳转到对应源码行写长论文时这个功能能省很多翻找时间。3.2 从Git克隆模板到完成首次编译模板源码克隆到本地后第一步是检查文件结构是否完整然后打开main.tex查看导言区\documentclass[degreemaster]{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里直接按CtrlL再CtrlB快速编译如果改了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字体一般不会出现缺字问题但如果使用fontsetwindows方式系统里没有宋体或黑体时编译会直接报错并中断。排查办法是在命令行执行fc-list :langzh检查当前系统有哪些中文字体。没有中文字体的系统直接换成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[width0.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}, labelsepspace, name{图}, positionbottom } \captionsetup[table]{ font{small}, labelsepspace, name{表}, positiontop }这样配置后图和表的编号会自动变成图1-1表2-2的章节号加序号格式不需要手动输入。label的位置要注意必须放在\caption之后引用才能正确抓取编号。如果\label放在\caption之前\cref引用的会是章节编号而不是图表编号这个小陷阱我曾经帮实验室同学排查过好几次。4.3 宏包冲突与常见编译错误LaTeX模板排错是最考验经验的部分下面整理几个使用过程中最高频的问题和排查方案。第一个常见问题是hyperref与其他宏包的冲突。很多宏包会内部修改PDF书签相关的命令和hyperref叠加时会导致编译报错。最稳妥的做法是把hyperref放在宏包加载的最后cleveref除外它可以放在hyperref之后加载这样可以最大程度减少冲突。如果编译时报错信息里有\Hyxxx 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。开源项目就是这样一个人踩坑一群人受益。本文还有配套的精品资源点击获取