LaTeX论文写作模板:封面目录与中文排版全攻略

发布时间:2026/10/13 23:52:54
LaTeX论文写作模板:封面目录与中文排版全攻略
又到论文季我身边几乎每隔几天就有人问“LaTeX怎么写封面目录怎么调成点线式的为什么一编译就报错”问得多了我就意识到大部分人缺的压根不是LaTeX命令而是一份拿来就能用的LaTeX写作模板敢说“拿来就能用”就意味着它已经帮你把封面、目录、页眉页脚、图表排版这些最磨人的东西全部调试好了拿到手只改内容就能编译出像样的PDF。所以我把这些年攒下来的模板骨架整理成一篇完整的经验帖从文件结构到封面目录的实现再到中文编译链路的那些坑一条线讲清楚适合写毕业论文、技术报告、课程大作业的任何人。1. 先解决“能用”再谈“好用”模板到底解决了什么问题1.1 新手配置LaTeX的崩溃点工具链与宏包很多人第一次接触LaTeX不是被语法劝退的而是被环境配置劝退的。装完发行版之后随便用默认文档类写两行英文还行一到中文字体、封面排版、目录超链接就开始连环报错。我见过A同学对着终端里几十行红色信息手足无措最后只能退回Word。认真想想新手崩溃的点其实高度集中第一是编译引擎选错很多教程还停留在pdfLaTeX时代遇到中文直接乱码第二是宏包依赖混乱ctex、xeCJK、times这些宏包彼此之间有条件加载关系加载顺序错了就报错第三是缺少模板骨架目录、封面、附录这些高频需求没有一个可参考的标准写法全靠临时拼凑。1.2 模板的设计原则开箱即用、可替换、可扩展我设计这个模板时给自己定了三条原则。第一条是“开箱即用”拿到手不配置任何全局变量直接编译就出PDF所有宏包在模板里已经按正确顺序加载好第二条是“可替换”封面信息、学校名称、学院专业、字体颜色这些全都集中在文档开头的变量区改一个地方全局生效第三条是“可扩展”你仍然可以在正文区写自己的宏包加载和环境定义模板只是提供一个可靠的起点。这三条原则决定了整个模板的结构所有样式设置尽量集中不让用户在五十个文件中找某个字号参数内容区和样式区拆分用户在正文区只用关心写了什么不关心排版细节宏包加载顺序和编译引擎固化避免“我这能编译你那不能”的怪问题。后面所有章节都是围绕这三条展开的。2. 模板结构速览每个文件是干什么的2.1 文件目录组织方式一个真正“拿来就能用”的模板文件结构必须要一眼看懂。我的模板划分成五个文件加一个图片目录project/ │ ├── main.tex # 主文档变量区 章节结构 ├── sty/pagesetup.sty # 页面样式页眉页脚、封面布局、目录样式 ├── sty/format.sty # 常用格式图表编号、公式排版、代码块样式 ├── chapters/ │ ├── abstract.tex # 摘要与关键词 │ ├── chapter1.tex # 第一章示例 │ ├── chapter2.tex # 第二章示例 │ └── appendix.tex # 附录示例 ├── refs.bib # BibLaTeX 参考文献库 └── figures/ # 放图片素材路径统一指向这里2.2 核心文件 main.tex 的骨架拆解main.tex是模板的入口也是唯一需要用户频繁修改的顶层文件。它的开头是一个变量区把所有可能变的信息集中定义这是我强烈推荐的做法% 变量区修改这里即可 \newcommand{\myuniversity}{某大学} \newcommand{\myschool}{某某学院} \newcommand{\mymajor}{计算机科学与技术} \newcommand{\myauthor}{张三} \newcommand{\myid}{20210001} \newcommand{\myclass}{软件2101班} \newcommand{\mysupervisor}{李四 副教授} \newcommand{\mytitle}{基于卷积神经网络的图像分类研究} \newcommand{\mysubtitle}{——以某数据集为例} \newcommand{\mykeywords}{LaTeX; 模板; 封面; 目录; 写作} % 变量区结束 变量区下面才是正文结构。模板里abstract、chapter、appendix都通过input拆到chapters目录main.tex只保留框架\documentclass[12pt,a4paper,openany,twoside]{ctexbook} % ---------- 模板核心宏包顺序不能动 ---------- \usepackage{sty/pagesetup} \usepackage{sty/format} \usepackage{graphicx} \usepackage{float} % 更多宏包省略... \begin{document} % 封面页由模板命令直接生成 \coverpage % 中英文摘要 \input{chapters/abstract.tex} % 目录 \tableofcontents % 正文 \input{chapters/chapter1.tex} \input{chapters/chapter2.tex} % 参考文献 \phantomsection \addcontentsline{toc}{chapter}{参考文献} \printbibliography % 附录 \input{chapters/appendix.tex} \end{document}2.3 为什么把样式和内容分离有人可能会问所有样式都写在一个文件里不是更省事吗把样式拆成sty目录下的两个宏包文件最重要的原因是为了降低“改坏”的风险。内容区和样式区混在一起时你为了调一个页眉间距会在正文里塞一堆newcommand和环境定义一旦编译出错根本分不清是自己写错字了还是排版逻辑崩了。分离之后正文区保持干净的学术写作状态样式区的注释写得清清楚楚出了问题一看报错文件就知道在哪。另一个原因是模板复用。写课程论文用同一套风格写毕业论文换封面色调你只需要改sty里的参数就行chapters里的内容一字不动。这种解耦正是从“能用”走向“好用”的关键一步。3. 封面页的实现不只是居中放个标题3.1 最小可用封面代码很多模板封面是直接在正文页用\centering、\\、\vspace硬排出来的这种做法的最大问题是换一个标题长度版面就歪了。我在模板里封装的\coverpage命令核心思路是用一个独立的titlepage环境配合长度变量控制垂直间距。\newcommand{\coverpage}{ \begin{titlepage} \centering % 校名与校徽区域 {\zihao{2}\heiti \myuniversity\par} \vspace{0.5cm} {\zihao{3}\heiti \myschool\par} \vspace{1.2cm} % 论文标题 {\zihao{1}\heiti \myauthor\par} % 示例占位实际请替换为标题命令 \vspace{0.8cm} % 信息表 \begin{center} \renewcommand\arraystretch{1.8} \begin{tabular}{r{}l} 学院 \myschool \\ 专业 \mymajor \\ 姓名 \myauthor \\ 学号 \myid \\ 班级 \myclass \\ 指导教师 \mysupervisor \\ \end{tabular} \end{center} \vfill {\zihao{4} \today\par} \end{titlepage} }这段代码有两个细节值得特别注意。一是\renewcommand\arraystretch{1.8}它把表格行高放大1.8倍信息表格看起来宽敞不挤比用\\[0.3cm]硬撑间距更稳定二是\vfill放在信息表和日期之间让日期自然贴到页面底部附近标题长短变化时整页内容自动重新分配垂直空白不会溢出也不会大片留白。3.2 校徽、学院与专业信息的布局方案大多数学校要求在封面放校徽我见过有人用\includegraphics把图片塞进表格结果图片太大把表格撑爆。稳妥的做法是给校徽单独留一行用宽度控制图片尺寸并固定行高。% 校徽 \noindent\begin{minipage}{\textwidth} \centering \includegraphics[width0.3\linewidth]{figures/logo.png} \end{minipage} % 若不想显示图片也可以直接用文字包围盒占位 % \begin{minipage}[c][2.2cm]{0.3\linewidth} % \centering\heiti\zihao{2} 校徽 % \end{minipage}把logo放进minipage而不是直接裸插好处是图片的垂直位置可以被minipage的height参数约束不会跟着文字基线乱动。宽度建议在0.25到0.35倍行宽之间太小看不清太大会和标题争夺视觉重心。3.3 摘要页的版式与关键词摘要不等于封面它是目录后面第一个独立页面。模板里abstract.tex的写法要注意两个点一是中英文摘要用\newpage分开二是关键词用自定义命令\mykeywords全局引用避免中英文关键词出现抄写不一致。% chapters/abstract.tex \chapter*{摘\quad 要} \addcontentsline{toc}{chapter}{摘要} \zihao{-4} 这里是摘要正文。模板已经配置好首行缩进、行距以及两端对齐 你只需要把摘要内容贴在这里即可。 \vspace{0.5cm} \noindent\textbf{关键词} \mykeywords \newpage \chapter*{Abstract} \addcontentsline{toc}{chapter}{Abstract} \zihao{-4} This is the abstract in English. \vspace{0.5cm} \noindent\textbf{Keywords:} LaTeX; Template; Cover; Contents; Writing这里给摘要手动加\addcontentsline{toc}{chapter}{摘要}是刻意为之因为\chapter*不会自动出现在目录里如果想让目录里看到“摘要”这个条目就必须手动加入目录项。模板里所有带星号章节都统一采用这个策略保证了目录的完整性。3.4 页眉页脚的同步处理封面之后正文开始页眉页脚应当恢复常规样式。我在pagesetup.sty中把页眉设置为“章标题居左、页码居右”同时在首页chapter页与后续页之间做了区分\pagestyle{fancy} \fancyhf{} \fancyhead[L]{\leftmark} \fancyfoot[R]{\thepage} \renewcommand{\chaptermark}[1]{\markboth{#1}{}}\chaptermark的这行重定义很多人会漏掉缺了它页眉会显示“第1章”而不是你想要的实际标题。页脚页码默认从正文第一页开始计数如果你想让页码从摘要开始算就在摘要前加\setcounter{page}{1}即可。4. 目录与文档导航让一份长文档真正可读4.1 目录深度控制与超链接目录是长文档的导航系统模板里我最满意的部分就是目录的处理。默认情况下ctexbook会把\chapter级别列进目录但是如果你用了\section甚至\subsection目录里可能堆积过多条目观感很乱。我建议把目录深度控制在subsection附近\setcounter{tocdepth}{2} % 列到 subsection \setcounter{secnumdepth}{2} % 编号到 subsection配合hyperref宏包目录项会自动变成可点击的蓝色超链接点击任意条目跳转到对应页面。要让链接好看可以定义配色\usepackage[colorlinkstrue, linkcolorblack, urlcolorblue, citecolorblue]{hyperref}这里把linkcolor设成黑色是为了打印场景下目录不会出现大片刺眼的蓝色色块链接功能依然保留但视觉更接近传统论文目录。4.2 目录样式定制点线、编号格式与间距默认目录的条目间距和点线密度可以微调。用dottedtocline系列参数可以控制每个条目的缩进量和点线间距最常见的需求是“点线能不能密一点”“缩进能不能对齐”。我不建议普通用户去改tocline参数的细节性价比太低但有一个参数值得掌握——目录标题的显示格式。% 让目录标题显示为“目 录”两个大字居中 \renewcommand{\contentsname}{\centerline{\zihao{3}\heiti 目\quad 录}}如果想要各级条目的字体不同比如章标题加粗、节标题常规可以用以下方式批量处理\usepackage{tocloft} \renewcommand{\cftchapfont}{\heiti\bfseries} \renewcommand{\cftsecfont}{\songti} \renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}我这里用了tocloft宏包因为它的命令名直观cftchap代表章条目cftsec代表节条目后面接font字体、leader点线、presnum编号前缀等属性。改起来几乎不需要查表。4.3 附录、参考文献如何自动进入目录M8附录和参考文献如果只写\chapter{附录A}而不加处理它们会自动进目录因为\chapter默认是带编号的。但我们常用\chapter*做无编号附录这时就必须手动添加目录项而且要注意页码超链接的锚点\phantomsection % 关键为目录项提供正确的超链接锚点 \addcontentsline{toc}{chapter}{参考文献} \printbibliography[title{参考文献}]单独的\addcontentsline有时会导致目录中超链接跳到错误页面加上\phantomsection可以让hyperref生成一个不可见的锚点链接指向才准确。这个坑非常隐蔽我早期在模板里漏掉了目录点“参考文献”就跳到了首页检查了很久才发现是缺了锚点。5. 写作常用模块的命令封装图表、表格与代码5.1 图形插入的模板化写法模板里我把图片插入封装成自定义命令一来能统一图片宽度风格二来能自动生成图标题注。我的实现是\newcommand{\fig}[4][0.8]{% \begin{figure}[H] \centering \includegraphics[width#1\linewidth]{figures/#2} \caption{#3} \label{#4} \end{figure} }使用起来只需要一行\fig{network_arch.png}{神经网络结构示意图}{fig:network}参数解释第一个可选参数是图片宽度默认0.8倍行宽第二是图片文件名第三是题注第四是标签。把路径前缀figures/直接写进命令避免了大家频繁输入相对路径。[H]浮动参数来自float宏包它的含义是“强制放在当前位置”毕业论文里图表一般不希望到处乱跑这个参数在模板里默认开启。5.2 三线表与整数行距学术写作的表格没有花哨的竖线只有顶线、底线和栏目线。模板用booktabs宏包封装了标准的三线表环境\newcommand{\tbl}[4]{% \begin{table}[H] \centering \caption{#3} \label{#4} \#1 \end{table} }实际写表时直接用booktabs的原始命令更灵活\begin{table}[H] \centering \caption{不同模型准确率对比} \label{tab:acc} \begin{tabular}{lccc} \toprule 模型 精确率 召回率 F1 \\ \midrule 模型A 0.91 0.88 0.89 \\ 模型B 0.89 0.90 0.90 \\ 模型C 0.94 0.93 0.93 \\ \bottomrule \end{tabular} \end{table}注意tabular内部不要加\zihao之类的字号命令表格字号统一在\begin{table}前设置。另外如果表格跨页booktabs的三线结构会断掉需要改用longtable模板附录的Excel长表我默认提供了longtable示例。5.3 代码块的排版技术写作离不开代码块我选择了listings宏包并在format.sty中配置了一套不花哨但清晰的主题\usepackage{listings} \lstset{ basicstyle\ttfamily\small, keywordstyle\color{blue}\bfseries, commentstyle\color{gray}, framesingle, numbersleft, numberstyle\tiny\color{gray}, breaklinestrue, showstringspacesfalse, languagePython, }行号、左框线、自动折行这三个属性是刚需。showstringspacesfalse则避免了字符串里的空格显示成可见的下划线符号很多教程漏掉这行导致代码块里字符串看起来像多了很多空格非常影响观感。5.4 定理与数学公式环境的常见误区数学内容方面模板加载了amsthm和amsmath。经常有人问为什么公式编号不跟着章节走答案是要在导言区设置计数器重新编号\renewcommand{\theequation}{\thechapter-\arabic{equation}} \addtoreset{equation}{chapter}这样第一章的第三条公式会显示为“1.3”更符合论文格式要求。定理环境我统一用\theoremstyle定义并且在\newtheorem时让所有定理共享一个计数器避免定理1之后跟着定义2导致编号混乱\newtheorem{theorem}{定理}[chapter] \newtheorem{definition}[theorem]{定义} \newtheorem{lemma}[theorem]{引理}共享计数器的好处是“定理1、定义2、引理3”这种自然连续的编号比“定理1.1、定义1.1、引理1.1”更有条理也更能体现证明链条中各个组件之间的依赖关系。6. 中文排版与编译工具链XeLaTeX 和 ctex 的那些坑6.1 为什么要用 XeLaTeX 而不是 pdfLaTeX总有人拿着旧的英文教程问为什么我用pdfLaTeX编译你的模板报错。答案是中文排版需要字体回退和标点压缩pdfLaTeX本身做不了这些活必须换XeLaTeX配合ctex宏包。XeLaTeX原生支持系统字体能直接调用你电脑里安装的中文字体而ctex宏包则处理了中文标点、缩进、行距等一系列排版细节。使用XeLaTeX后你就不需要再单独加载fontspec了ctex宏包会自动处理。唯一要注意的是模板里所有自定义字体命令都基于ctex的\heiti、\songti、\kaishu。如果你的系统缺少某款中文字体需要手动在ctexset中映射替代字体否则编译会报“font not found”错误。6.2 字体配置的思路字体是中文LaTeX最容易出问题的环节我的字体配置思路很简单用ctex的字体设定不手动加载fontspec。在ctexbook文档类后面可以加一个可选字体配置\documentclass[12pt,a4paper,openany,twoside,fontsetfandol]{ctexbook}fontsetfandol的含义是强制使用fandol字体这套字体随texlive发布是跨平台最稳定的选择。如果你不做任何设置ctex会自动检测系统里的中文字体优先用Windows的宋体、黑体。但这会导致一个问题同一个模板在你的电脑上编译是宋体在别人电脑上可能是别的字体格式对不上。强制指定fandol可以保证跨电脑编译效果一致代价是字体美感上不如系统原生字体。6.3 编译顺序与自动化脚本LaTeX文档和Word不同需要多次编译才能生成完整目录和交叉引用。命令顺序是latexmk -xelatex main.tex如果不想用latexmk纯命令行的标准顺序是xelatex main.tex bibtex main # 如果用了biblatex/biber则是 biber main xelatex main.tex xelatex main.tex第一次编译生成.aux辅助文件第二次生成目录和引用信息第三次稳定交叉引用。很多人只执行一次xelatex然后发现目录是空的就一脸茫然地以为模板坏了。实际上LaTeX编译流程天生就是多趟的这是新手最容易踩的坑。我建议在VS Code里配置LaTeX Workshop的Recipe一键执行完整编译链条。6.4 常见编译报错及对策我把这几年新手问得最多的编译报错汇总成一张表放在模板的注释中报错信息原因对策Font not found系统缺少中文字体用fontsetfandolFile main.aux not found首次编译顺序不对按顺序执行三次编译Undefined control sequence宏包冲突或漏加载检查sty文件宏包卸载顺序Too many unprocessed floats图片表格太多无法放置使用[H]强制位置或清理浮动体Missing $ inserted文本里用了数学符号将特殊符号放入数学环境“Too many unprocessed floats”值得多说一句它不是你写错了而是LaTeX默认每页浮动体容量只占总页面的一部分插图表格一多就会积压。解决办法除了用[H]强制位置外还可以加\usepackage{morefloats}或在导言区设置更大的浮动比例比如\renewcommand{\textfraction}{0.15}。7. 从模板到成品改成自己单位格式的实操路径7.1 替换封面信息的具体流程拿到模板后第一件事不是写正文而是把变量区里的\myuniversity、\myschool、\mymajor、\myauthor、\myid、\mysupervisor全部换成真实信息替换完直接编译一次封面就会按新信息重新排版。此时就是检查封面布局的最佳时机——如果标题太长换行后重叠不要着急改代码而是在标题中间手动加\\换行让标题断句处更自然。7.2 样式参数的集中管理模板的pagesetup.sty顶部有一个全局参数区% 样式参数区 \newcommand{\linespacing}{1.5} % 行距 \newcommand{\chapspacing}{1.0} % 章间距 \newcommand{\tocdepthvalue}{2} % 目录深度 \newcommand{\titlefontsize}{\zihao{2}} % 封面标题字号 % 样式参数区结束 这些参数在sty文件里被引用例如在设置正文行距时写\renewcommand{\baselinestretch}{\linespacing}。用户只需要改参数区的数值就能控制整篇文档的排版风格。这种做法比在正文里到处搜\linespread改数字要靠谱得多。7.3 我遇到过的隐蔽细节与注意事项第一个是\heiti与加粗的关系。直接用{\heiti\textbf{某文本}}经常导致伪粗体叠加字形变丑我的做法是统一定义一个\strong命令\newcommand{\strong}[1]{{\heiti\bfseries #1}}第二个是图和表格不能共用一个浮动体计数器。如果模板里图、表分别编号需要在format.sty中确认\caption前后标签前缀正确不要写错成\label{tab:xxx}但caption里是“图”交叉引用时会乱。第三个是目录页码对齐问题。如果目录中有条目过长换行页码会掉到下一行行首看起来参差不齐。一个简单解决办法是给章节标题设置较长的缩进量例如\setlength{\cftchapindent}{1.5em}但具体数值需要按照你的标题长度微调。第四个是参考文献样式。模板默认用biblatex的numeric样式如果你学校要求著者-出版年样式只需把\usepackage那段参数末尾的stylenumeric改为styleauthoryear并同步调整中文排序规则。改样式不动编译命令这是biblatex相对传统bibtex的优势。8. 一点个人的使用心得最后聊点实际的。我用这个模板写过课程报告、开题报告和毕业论文最大的体会是一份模板真正的价值不是省掉你写\documentclass和\usepackage这两行代码而是把排版样式中所有“玄学”的部分变成可预期的东西。编译失败时你能快速定位是宏包问题、字体问题还是语法问题改格式时你只需要面对一个集中化的参数区。建议拿到模板后第一周先不做任何修改用原始模板写完一个完整章节并正常编译出PDF之后再逐步调整封面和样式。这样一来每次只引入一个变化因素出错了也容易回滚。毕竟工具再方便也只是手段把精力省下来放在内容本身才是做这个模板的初衷。