又到了一年一度论文季相信不少朋友正对着排版规范头疼。如果你还没用过LaTeX我建议你花一次吃午饭的时间试一下然后把时间留给写内容本身而不是和Word的样式、编号、页眉页脚较劲。这篇文章我想从一套“拿来就能用”的LaTeX写作模板说起里面包含了封面、目录、页眉页脚、代码块、参考文献这些基本配置你拿到手把正文换掉结构上基本不用动。先说清楚这套模板解决什么问题很多人在LaTeX上折戟不是因为LaTeX本身难而是配置太散。网上能找到无数个.cls文件和模板碎片但要么年久失修编译不过要么和学校排版要求冲突。所以这篇博客的核心就是给你一套我自己在多个项目中验证过的、基于主流宏包的模板框架同时把封面、目录、章节样式这些关键位置的实现逻辑讲透。适合正在准备毕业论文、课程设计报告或者想把手头Word项目迁移到LaTeX的读者。1. 模板整体设计与文件拆分思路1.1 为什么强调“文件拆分”而不是单文件硬写很多人刚开始用LaTeX习惯把内容全部堆在一个main.tex里几千行下来找内容很难受。把模板拆成多个文件不是形式主义它带来三个实际好处正文和样式分离你写正文的时候只碰chapter目录下的文件不用在导言区里翻找宏包定义。封面、摘要、正文模块化封面和目录这些“规则性内容”独立成文件改起来不影响正文。多章节并行写作方便不管是一个人写还是几个人协作拆分后每个人负责一章冲突概率小很多。我在这个模板里的做法是my_thesis/ ├── main.tex ├── settings.tex ├── cover.tex ├── abstract.tex ├── chapters/ │ ├── chapter1.tex │ ├── chapter2.tex │ └── ... ├── ref.bib └── figures/ └── example.pdf1.2 选择合适的文档类与编码环境模板的底层是文档类选择这一步选错后面全是坑。我建议用ctexbook文档类它是对标准book类的封装专门处理中文排版的标点压缩、缩进和字体切换。如果你用article类写论文后续章节编号、封面布局会显得捉襟见肘除非你只写短报告。编译引擎上我推荐XeLaTeX而不是pdfLaTeX。原因在于pdfLaTeX配合中文字体控制逻辑复杂还经常报字体找不到的错误XeLaTeX直接使用系统字体用fontspec宏包指定即可。以我在某高校写模拟项目报告的经验XeLaTeX加CTeX发行版是最稳定的一套组合。注意模板文件不要存成UTF-8带BOM格式有时候UTF-8 BOM会让XeLaTeX在编译时多输出一个不可见字符导致排版异常。用编辑器把它存成“UTF-8无BOM”即可。2. 核心文件的关键代码与原理拆解2.1 主文件main.tex定义全局结构先给你看我的main.tex逻辑它很简洁主要负责加载配置、引入模块顺序是有讲究的% main.tex \documentclass[12pt, oneside]{ctexbook} \input{settings.tex} \begin{document} \frontmatter \input{cover.tex} \input{abstract.tex} \tableofcontents \listoffigures \listoftables \mainmatter \input{chapters/chapter1.tex} \input{chapters/chapter2.tex} % 更多章节... \backmatter \bibliographystyle{plain} \bibliography{ref} \end{document}\frontmatter和\mainmatter是book类才有的概念前者让目录、摘要部分使用罗马页码正文部分重起阿拉伯数字页码这是学术规范的常见要求。很多初学者忽略了这三条命令结果目录和正文的页码混在一起排版上就不太像正经论文了。2.2 settings.tex全局样式配置接下来是settings.tex这里集中了导言区的全部设置我加上了注释你可以按需注释或取消宏包% settings.tex \usepackage[top2.5cm, bottom2.5cm, left3cm, right2.5cm]{geometry}论文双面打印时左右边距往往不对称如果你没有特殊要求直接用这个参数即可。页边距主要影响美观建议不要太小电子版阅读和打印装订都需要出血位。\usepackage{amsmath, amssymb} \usepackage{graphicx} \usepackage{float}数学符号与图片浮动体是老朋友了没什么可说的。\usepackage[UTF8, schemeplain]{ctex}虽然ctexbook已经加载了CTeX但在settings里再次加载是为了确保中文排版参数生效特别是schemeplain这个选项能让标题、图表标题更接近传统中文论文样式不带英文感。然后是页眉页脚\usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\leftmark} \fancyhead[R]{\thepage} \renewcommand{\headrulewidth}{0.4pt}\leftmark会自动取当前章的标题名放在页眉左侧页码放在右侧。\headrulewidth控制页眉横线粗细这条线打印出来挺精致的太粗会显得笨重。超链接配置也在这里\usepackage[colorlinkstrue, linkcolorblue, citecolorblue, urlcolorblue]{hyperref}Hyperref宏包必须最后加载它和很多宏包有交互如果你在它之后又加载了排版相关的宏包里面的命令可能被它干扰。颜色方面个人不建议全黑至少链接带颜色才能在PDF阅读器里区分可点击区域。2.3 cover.tex封面实现细节先做个基础版适用于多数课程报告和内部文档\begin{titlepage} \centering \Large \textbf{模拟项目X 研究报告}\\[2cm] \large 题目基于LaTeX的模板化写作实践\\[1cm] \end{titlepage}这段代码的原理是进入titlepage环境后LaTeX会单独开启一页这页的页码不计入正文章节。\\[2cm]是手动控制垂直间距数字越大越向下偏移。不过说实话学校毕设的封面通常有固定格式尤其学校logo和校名位置一旦错误就会被打回。如果你在模板里准备一个“学校封面”的占位版本可以在cover.tex里用\includegraphics加载logo.pdf然后单独排版字段\begin{titlepage} \begin{center} \includegraphics[width4cm]{figures/logo.pdf}\\[0.5cm] {\LARGE \textbf{某某学院}}\\[1.5cm] {\Large 本科毕业论文}\\[2cm] {\large 题目基于模板的LaTeX论文写作研究}\\[1cm] \large 学生姓名XXX\\ 学号XXX\\ 指导教师XXX\\ 日期XXXX年XX月 \end{center} \end{titlepage}2.4 目录的定制与美化\tableofcontents的原理其实是读取编译时生成的.toc文件所以需要编译两次才能正常显示目录。第一次编译生成骨架信息第二次把它排版出来。默认目录样式比较朴素为了更接近期刊或正式论文的视觉密度我会用tocloft宏包微调一下\usepackage{tocloft} \renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} \renewcommand{\cftsecfont}{} \renewcommand{\cftsecpagefont}{}其中cftsecleader是章节标题和页码之间点线的样式源码里默认有但部分模板为了视觉简洁会去掉我建议保留因为它能提高目录的可读性。如果想让“第一章”这类中文字样出现在目录里需要额外配置titletoc但基础使用保持默认即可。3. 如何把这段时间搭建的模板用到真实项目里3.1 实操第一步填空而非先改样式很多人在拿到模板后喜欢先调字体、调颜色半天过去了正文还是空白。我的建议内容优先主义。第一次使用模板时直接信号注入式地替换自己的章节内容不要动任何命令参数先编译通过一次。操作顺序是这样的把模板里的chapter1.tex重命名成你自己的第一张内容把其中的所有\section标题替换成你的小节名称注释掉用不到的封面字段保留结构编译看能不能跑通跑通后再一处一处做格式美化。我自己最初用LaTeX写某课程项目报告时就是因为反复调整页边距和字体导致编译不过最后折腾一天才发现是某个宏包冲突内容只写了几百字。这个教训直接影响了后来我推荐给别人的“先结构后样式”策略。3.2 实操第二步图片插入与浮动体管理图片是论文写作的重头戏也是最容易出现排版“灵异事件”的环节。我在chapter里插入图片的固定写法\begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{figures/architecture.png} \caption{模拟项目X的系统架构图} \label{fig:arch} \end{figure}htbp是浮动体允许的位置组合here、top、bottom、pageLaTeX会按顺序选最优位置。初学者最常见的困惑是“我都写了图怎么跑到别的地方去了”——因为浮动体就是这样工作的它并不强制原位摆放论文里也必须允许这种浮动否则大量图片会把版面撕开。如果想强制原位用[H]参数加float宏包不过除非是期刊明确要求我建议不要滥用。width0.8\textwidth这种相对单位很安全不管最终输出是A4还是其他尺寸图片占比总是一致的。\caption务必放在图内它决定了图题出现在图的哪个位置以及是否进图目录。3.3 实操第三步表格、公式与代码块的固定模板表格的坑主要是列宽溢出处理长文本表头时用tabularx宏包比较省心。我的通用写法\usepackage{tabularx} \begin{table}[htbp] \centering \caption{参数对比表} \begin{tabularx}{\textwidth}{|l|c|X|} \hline 参数 取值 说明 \\ \hline 学习率 0.01 初始训练值 \\ batch size 32 内存受限 \\ \hline \end{tabularx} \end{table}X列会自动填充剩余宽度非常适合文字多的列。别用p{3cm}这种硬编码宽度换成X之后表格的宽度自然适配页面省心不少。公式方面只要记得行内公式用$...$行间公式尽量用equation环境跨多行的公式用align环境。公式编号是自动的出问题多半是宏包缺了。\begin{equation} \label{eq:loss} \mathcal{L} \|y - \hat{y}\|_2^2 \end{equation}代码块用listings宏包我有一份通用配置\usepackage{listings} \lstset{ basicstyle\ttfamily\small, breaklinestrue, framesingle, numbersleft, keywordstyle\color{blue}, commentstyle\color{gray}, }这里说一个实际体会代码块字体一定要用ttfamily等宽字体不然缩进和注释看起来会错位。breaklinestrue能自动处理超长行否则一行长的代码会戳破页面右侧非常难看。3.4 实操第四步参考文献的引入流程参考文献我统一用BibTeX管理不使用手写thebibliography环境。ref.bib文件里条目格式article{koch1982, author{Koch, Christof and Poggio, Tomaso}, title{Predicting the visual world: silence is golden}, journal{Nature Neuroscience}, volume{2}, pages{9--10}, year{1999} }在正文里用\cite{koch1982}引用然后在main.tex末尾加\bibliography{ref}。完整编译流程是xelatex main.tex bibtex main xelatex main.tex xelatex main.tex这个顺序很重要第一次xelatex生成.aux引用信息bibtex读取并生成.bbl后面两次xelatex更新引用编号和目录。如果只编译一次目录里会显示“参考文献”但没有内容正文里的引用标号也会显示为问号。4. 封面细节与目录常见问题的实操实录4.1 封面元素的对齐与间距控制封面看起来简单做起来却容易歪。问题主要出现在日期那一排的下划线对齐上。我用的是\underline配合\hspace\noindent 学生姓名\underline{\hspace{4cm}}\\ 学号\underline{\hspace{4cm}}\\ 指导教师\underline{\hspace{4cm}}\hspace{4cm}是占位空白\underline给它加下划线这样所有下划线不管字多字少宽度都一样整体更整齐。如果文本太长把下划线撑破把这个值调大即可。中心布局的多个字段之间用\\[0.8cm]控制间距我喜欢在封面标题、校名、题名之间拉开间距字段内不用大间距。另外不要让封面内容溢出到第二页这是封面的大忌一般团队为了稳妥会在最后加一个\newpage确保下一部分从新页开始。4.2 目录的删除、重编与应对“白页”问题有时候你会发现目录里有个章节没显示或者目录里出现了还没写完的致谢章节。怀疑自己代码写错其实是.toc文件缓存的问题。删除目录时只要删掉生成目录的那一段代码还没法真实清理最彻底的办法是删除中间的main.toc文件以及.aux、.log然后重新编译两遍。这在修改了章节标题后尤其常用。有个更节省时间的经验改完标题后先编译一次看.toc是否变化如果没有再删除缓存文件避免无谓的重复编译。对于“目录后面突然多出一页空白”的经典问题一般是\frontmatter和\mainmatter切换时LaTeX强制换页造成的。可接受也可以在\tableofcontents前加\clearpage手动控制但效果通常多一个空白页。如果没有硬性要求保留默认效果就好。4.3 章节标题编号与格式微调使用ctexbook后章节标题默认为“第1章”的中式编号这是中文论文的常见需求。如果你需要让“第1章”变成“第一章”是在settings里加一行\ctexset{ chapter { number \chinese{chapter}, name {第,章}, ... } }这个命令把阿拉伯数字换成中文数字name字段里的逗号会在中文排版中自动处理两侧语义。实现这个需求的办法还有很多我推荐直接改ctexset而不是加载其他宏包减少冲突。如果想要各级标题的间距更宽松或更紧凑用titlesec宏包\usepackage{titlesec} \titlespacing*{\section}{0pt}{1.2em}{0.6em}三个数字分别代表左间距、段前间距、段后间距。毕业论文的章节标题要求间距相对统一调完后审美观感差别很大建议自己亲手试几次。5. 踩坑记录与排查技巧模板照抄也翻车的几个真实场景5.1 编译环境不一致导致的字体问题这是我见过最多的问题。模板在你电脑上编译正常换到另一个电脑或者某在线编译平台就报“字体不存在”。原因是ctex默认会根据系统寻找中文字体如果你的系统没有中易宋体或者某些开源字体就会报错。解决办法是在settings里明确指定字体例如\setCJKmainfont{SimSun} \setCJKsansfont{SimHei} \setCJKmonofont{FangSong}前提是你的系统里真的装了这些字体。Linux环境通常没有SimSun用fandol字体库更通用\setCJKmainfont{FandolSong}更稳妥的做法是直接使用发行版自带的ctex字体方案让它自动检测不手动指定。除非字体缺失确实无法解决不要额外写字体选择否则跨平台兼容性会很差。5.2 宏包冲突hyperref与algorithm等我在一次做算法伪代码排版时遇到过hyperref和algorithm宏包冲突的情况报错信息非常诡异最终确定是加载顺序的问题。把hyperref放在最后加载通常没有问题但有些宏包会在自身周围重置超链接状态。如果遇到“Undefined control sequence”或者链接错位先试试把hyperref相关代码移到文档类后面所有宏包的最后。还有一种比较常见的情况titlesec和部分模板自定义的样式冲突导致字体大小报错。建议在加入任何新宏包前先看看它是否修改了章节目录的底层命令如果只是需要标题间距没必要引入整个titlesec可以用ctexset的format字段直接调整。5.3 参考文献编译顺序的坑引用显示为问号目录里参考文献条目不显示这种情况在90%的LaTeX入门者身上出现过。导火索多半是编译顺序不对。我用的小技巧是编译之前检查一下main.aux文件里是否存在\bibcite相关的行如果为空说明bibtex还没有读到引用条目顺手补一次bibtex即可。另外一个实际经验如果你在多个文件中都写了\addbibresource这是biblatex的命令而我这个模板用的是\bibliography{ref}这是bibtex命令这两套体系不能混用。要么全用BibTeX的老三样要么全用biblatexbiber。我先在模板里统一采用BibTeX兼容性最好即使以后需要biblatex也能平滑迁移。5.4 图片路径中的空格与文件名问题很多人会在主板图的路径里加入中文或空格比如figures/my figure.pdf这种路径在LaTeX里经常出问题。要么老老实实去掉空格改成my_figure.pdf要么用\graphicspath提前声明图片目录让路径中不带空格。还有一类更隐蔽的坑图片本身是RGB的PDF图片插入后占用内存很高编译速度慢。此时建议先用图片工具把图片转为灰度或者压缩分辨率。写论文插图建议使用矢量图PDF、EPS文字边缘不会发虚排版打印时更好看。6. 模板扩展方向与最终使用建议6.1 从单篇报告到多章节论文的扩展如果你的文档从课程报告成长为毕业论文结构上需要补充的就是前言、综述、致谢、附录。这些内容的LaTeX处理方式其实都一样只要建新的.tex文件然后在main.tex里按顺序\input即可。我习惯为每一章独立建文件在章节开头加上\label{chap:xxx}后续引用章节号会很方便。跨章引用公式时\ref也能正常工作前提是编译了足够多次。6.2 在线编辑部署的注意事项现代人大都倾向于使用在线编译平台好处是不用手动安装LaTeX发行版坏处是每次都在远程服务器编译敏感数据不建议放上去。而且在线平台的多用户共享库偶尔会出现“旧版本宏包缺失”如果你的模板代码很老在云平台上可能会有兼容问题。我的经验是本地安装一套发行版用于强大测试云平台用于最后协作和辅助审稿。6.3 最终建议把模板当成起点而不是终点上面这套模板的结构和代码能帮你避开绝大多数入门期的坑但它不应该是终点。每个学校、每个期刊对格式的要求都不同你一定要基于这套模板结合需求文档做增量修改。修改的过程其实也是深入理解LaTeX的过程。我个人的习惯是每做一次修改就存一个版本或者用版本控制工具管理保证改坏了随时能回滚这篇文章里的经验也正是在这种反复试错中积累下来的。