1. 在线编译环境的选择与高效协作策略写北航毕业论文尤其是用LaTeX第一步选对“战场”太重要了。我见过太多同学吭哧吭哧写了几万字结果在最后编译环节卡住要么超时要么报错心态直接崩掉。所以咱们先把这个基础问题聊透。很多同学的第一反应是直接用Overleaf。这很正常它名气大界面友好协作方便开箱即用。对于课程小论文或者期刊投稿Overleaf确实是个神器。但当你面对的是动辄上百页、包含大量图表、参考文献和复杂格式的北航学位论文时免费版的Overleaf就显得力不从心了。最核心的限制就是编译时长。免费账户的编译有严格的时间上限一旦你的文档复杂度过高编译过程就会因为超时而被强行终止你只能得到一个不完整的PDF甚至是一堆报错日志。我自己的初稿就曾因为这个在提交前夜反复编译失败急得满头汗。那是不是必须得花钱开会员呢对于学生党来说这显然不是首选。我的实战经验是采用“分而治之合而编译”的策略。具体来说就是在日常写作和章节调试阶段依然可以使用Overleaf享受其实时预览和便捷协作。但到了需要生成最终版论文、进行全局格式检查和参考文献生成时我们就需要换一个更“扛造”的平台。这里我强烈推荐中国科技云旗下的ShareLaTeX服务。你可以把它理解为一个部署在国内服务器、功能与Overleaf类似但编译资源更宽松的“国产版”。它同样支持在线编辑、实时协作最关键的是它对个人用户非常友好没有严格的编译时间限制完全能够胜任整篇毕业论文的编译任务。操作上也很简单你可以在Overleaf上分章节写好定期将整个项目打包下载然后上传到中国科技云ShareLaTeX上进行最终的整体编译。这就好比你在一个精致的工坊里打磨零件Overleaf写章节最后在一个宽敞的车间里进行总装ShareLaTeX全篇编译各取所长。除了平台选择项目初始化也有讲究。直接从北航官网或GitHub下载最新的官方LaTeX模板后不要急着全部上传。建议先在本地用文本编辑器如VS Code打开模板的.cls格式定义文件和主.tex文件快速浏览一遍了解大致的结构。上传到在线平台时务必记得将编译引擎切换为XeLaTeX。因为我们的模板是中英文混排并且依赖系统字体XeLaTeX对中文和现代字体的支持是最好的。在Overleaf或中国科技云ShareLaTeX的项目设置Settings里找到“Compiler”选项选择“XeLaTeX”即可。这个小动作能避免一大半因编码和字体引起的初期报错。2. 字体配置彻底解决“找不到字体”的顽疾“Package fontspec Error: The font ‘Times New Roman’ cannot be found.” 这句话绝对是北航LaTeX选手的“一生之敌”。我敢说十个用在线平台编译的同学至少有八个在第一关就倒在了这个报错上。这个问题的根源在于北航的论文模板buaa.cls里明确指定了使用“Times New Roman”和“Arial”这两种英文字体但像中国科技云ShareLaTeX这样的在线服务器系统里通常没有预装这些Windows系统下的商业字体所以编译器就“傻眼”了。网上常见的“解决方案”是让你去修改.cls文件把字体名换成一些Linux系统自带的免费字体比如TeX Gyre Termes。但这样做有个大风险最终生成的PDF里的字体可能不符合学校官方的格式审查要求。毕业事大咱们不能冒这个险。最稳妥、一劳永逸的办法就是自己把字体文件上传到项目中并正确指引LaTeX找到它们。具体操作就像“自带食材下馆子”准备字体文件在你自己的Windows电脑上打开C:\Windows\Fonts目录。找到Times New Roman和Arial的字体文件。你可能会看到很多同名文件区别在于粗细和样式Regular常规、Bold粗体、Italic斜体、Bold Italic粗斜体。为了应对论文中各种加粗、斜体的需求我们最好把这四种样式都备齐。对应的文件名通常是times.ttf常规、timesbd.ttf粗体、timesi.ttf斜体、timesbi.ttf粗斜体以及arial.ttf、arialbd.ttf、ariali.ttf、arialbi.ttf。将它们复制到一个新建的文件夹里比如就叫fonts。上传字体在你的Overleaf或中国科技云ShareLaTeX项目根目录下也新建一个名为fonts的文件夹名称任意但前后要一致然后将这8个字体文件上传进去。修改模板指向这是最关键的一步。用在线编辑器的文件管理功能找到并打开buaa.cls文件。搜索\setmainfont和\setsansfont这两条命令。你会发现原始命令大概是这样的\setmainfont{Times New Roman} \setsansfont{Arial}[Scale0.94]我们需要把它修改为指定具体文件路径和样式的形式\setmainfont{TIMES.TTF}[ Path ./fonts/, BoldFont TIMESBD.TTF, ItalicFont TIMESI.TTF, BoldItalicFont TIMESBI.TTF ] \setsansfont{ARIAL.TTF}[ Path ./fonts/, Scale 0.94, BoldFont ARIALBD.TTF, ItalicFont ARIALI.TTF, BoldItalicFont ARIALBI.TTF ]注意Path ./fonts/这行就告诉编译器“别去系统里瞎找了字体就在项目目录下的fonts文件夹里”。文件名的大小写最好和上传的文件名完全一致避免因系统大小写敏感问题导致失败。重新编译保存.cls文件后重新编译你的主文档。这时那个恼人的“font cannot be found”错误就应该消失了。如果还报错请仔细检查字体文件名和路径是否正确确保没有拼写错误。这个方法虽然步骤稍多但好处是绝对的“根治”。无论你在哪个在线平台编译只要带上自己的字体包论文的英文字体就能完美还原成学校要求的样子再无后顾之忧。3. 参考文献国标格式的深度调试与定制参考文献是格式审查的重灾区也是LaTeX新手最头疼的部分。北航的学位论文参考文献格式基本遵循GB/T 7714-2015国家标准但又有一些细微的“校标”差异。直接使用模板自带的.bstBibTeX样式文件很可能无法完全满足要求。我们需要化身“格式侦探”手动调试。首先强烈建议你使用Zotero、JabRef或知网自带的BibTeX导出功能来管理文献而不是手动一条条输入。这能保证基础字段的准确性。但导出的条目仍需仔细核对特别是会议论文和专利。核心的调试工作集中在修改.bst文件上。这是一个用特定语言编写的、告诉BibTeX如何格式化每条参考文献的规则文件。修改前务必做好备份接下来我们针对几个最常见的“坑”进行手术3.1 处理会议论文的“[C]//”与出版信息缺失你会发现默认生成的会议论文条目里会议名称后面会跟着一个[C]//比如“IEEE International Conference on Computer Vision[C]//”。但北航的规范要求是“会议论文集名称[C].”中间没有那个“//”。此外经常出现[S.l.: s.n.]这表示“出版地不详出版者不详”。解决方案这需要修改.bst文件中inproceedings这个函数。你需要找到类似FUNCTION {inproceedings}的定义。原始的很可能直接调用了incollection的函数导致格式不对。我们需要将其重写或修改。关键目标是1. 将文献类型标识从默认的[C]//改为[C].2. 确保address会议地点和publisher通常为会议主办方如IEEE字段被正确识别和输出而不是用[S.l.: s.n.]代替。修改思路是定位到输出[C]//的那行代码通常是一个包含“\allowbreak[C]//”的字符串将其中的//删除。同时确保函数逻辑能正确读取address和publisher或organization字段。这可能需要你对照模板提供的范例仔细阅读.bst文件的逻辑。如果对编程不熟悉一个更稳妥的方法是在.bib文件里为每一条会议论文手动补全address {会议城市, 国家}和publisher {IEEE}这样的字段这样即使样式文件不完美也能输出正确信息。3.2 去除参考文献末尾的句号仔细观察学校给的范例你会发现每条参考文献的末尾是没有句号的。但很多国标.bst文件默认会在每条条目结尾添加一个句号。这个句号是由fin.entry函数添加的。解决方案在.bst文件中搜索FUNCTION {fin.entry}。你会看到类似下面的代码FUNCTION {fin.entry} { add.period$ write$ newline$ }这里的add.period$就是添加句号的命令。要取消句号最简单的方法就是注释掉或删除这一行修改为FUNCTION {fin.entry} { % add.period$ % 注释掉或删除这一行 write$ newline$ }保存后重新编译参考文献末尾的句号就应该消失了。3.3 专利条目的特殊格式专利的引用格式比较特殊学校要求是[序号] 作者. 专利名[P]. 专利国别: 专利号, 发布日期。但默认的.bst处理可能不对或者知网导出的BibTeX条目本身就是manual类型字段也不匹配。解决方案首先确保你的.bib文件里专利条目使用的是patent类型并且字段填写正确例如patent{CN107146200B, author {林靖宇 and 成耀天}, title {一种基于图像拼接质量评价的无人机遥感图像拼接方法}, address {中国}, % 专利国别 number {CN107146200B}, % 专利号 date {2017-04-25}, % 发布日期 }其次检查.bst文件中的patent函数确保其输出格式符合“地址: 专利号, 日期”的样式。你可能需要参照其他条目的函数调整address、number和date字段的输出顺序和连接符号。3.4 英文作者姓名格式细节学校要求英文文献的作者如果名字是缩写后面要加缩写点例如“He K., Sun J., Tang X.”而不是“He K, Sun J, Tang X”。同时有些模板可能错误地将作者姓氏全大写了也需要修正。解决方案这两个问题都需要修改.bst文件中的format.names等相关函数。对于缩写点需要找到处理英文名字格式化的地方通常是一个格式字符串将类似{f{~}}表示名字首字母后无点改为{f.}表示名字首字母后有点。对于姓氏大写问题则需要找到添加了u change.case$转换为大写命令的地方并将其移除或调整位置。修改.bst文件需要一定的耐心和调试每修改一次就保存并重新编译参考文献在LaTeX中通常需要连续运行XeLaTeX - BibTeX - XeLaTeX - XeLaTeX这个流程查看生成的.bbl文件来验证效果。4. 图表、算法与排版细节的精细打磨当编译和参考文献两大难关攻克后论文的美观和规范性就体现在这些细节上了。这里分享几个我踩过坑才总结出来的技巧。4.1 图表标题的“长短分离”策略论文里经常有那种解释性非常长的图注或表注。如果直接把长标题写在\caption{}里它会在图表目录和图表下方都显示为一大段导致图表目录非常难看。理想的状况是图表目录里显示简洁的标题图表下方显示详细的说明。LaTeX的\caption命令其实支持一个可选参数来实现这个功能。具体写法如下\begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{your_image.pdf} \caption[这里是显示在图表目录里的短标题]{这里是显示在图表下方的详细长标题可以包含很多解释性文字甚至换行。} \label{fig:example} \end{figure}\caption[短标题]{长标题}方括号里的内容只出现在图表目录List of Figures/Tables中而花括号里的内容则出现在图表正下方。这个小技巧能让你的论文排版立刻显得专业很多。4.2 在LaTeX中优雅地编写中文算法伪代码算法描述是理工科论文的常客。既要支持中文又要排版美观这里推荐algorithm2e宏包它与北航模板的兼容性通常更好。首先在导言区加载宏包并进行中文定制\usepackage[linesnumbered, ruled, vlined]{algorithm2e} % ruled:顶部横线vlined:竖线连接 \renewcommand{\algorithmcfname}{算法} % 将“Algorithm”改为“算法” \SetKwInput{KwIn}{输入} % 设置“输入”关键字 \SetKwInput{KwOut}{输出} % 设置“输出”关键字 \SetKw{Break}{break} % 可选设置break等关键字的中文样式然后在文档中编写算法\begin{algorithm}[H] % [H]强制算法位于此处而不是浮动 \SetAlgoLined % 显示连接线 \KwIn{数据集 $\mathcal{D}$, 迭代次数 $T$} \KwOut{模型参数 $\theta$} 初始化参数 $\theta_0$\; \For{$t 1$ \KwTo $T$} { 从 $\mathcal{D}$ 中采样小批量数据 $\mathcal{B}_t$\; 计算梯度 $\nabla \mathcal{L}(\theta_{t-1})$\; 更新参数$\theta_t \leftarrow \theta_{t-1} - \eta \nabla \mathcal{L}$\; \If{满足停止条件}{ \Break } } \caption{示例训练算法} \label{alg:training} \end{algorithm}注意algorithm2e与algorithmicx等宏包可能冲突。如果模板已加载algorithm2e就不要再加载其他算法宏包。如果遇到“\listofalgorithms already defined”的错误通常就是因为宏包冲突注释掉其中一个即可。4.3 用Matplotlib绘图时保证中英文字体正确我们常用Python的Matplotlib生成论文中的图表但默认设置下图中的中文会显示为方框乱码或者中英文字体不统一。为了满足“中文宋体、英文Times New Roman”的要求需要在绘图代码中全局设置字体。下面是一段完整的配置示例你可以直接用在你的绘图脚本开头import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np # 1. 设置全局字体为 Times New Roman解决英文和数字 plt.rcParams[font.family] serif # 使用衬线字体族 plt.rcParams[font.serif] [Times New Roman] # 指定衬线字体为Times New Roman plt.rcParams[mathtext.fontset] stix # 数学字体与Times New Roman风格协调 # 2. 解决中文显示问题指定中文字体需确保系统有此字体如SimSun # 方法一动态添加字体路径如果系统没有 # import matplotlib.font_manager as fm # fm.fontManager.addfont(path/to/your/simsun.ttf) # font_name fm.FontProperties(fnamepath/to/your/simsun.ttf).get_name() # plt.rcParams[font.sans-serif] [font_name] # 指定无衬线字体为宋体用于中文 # plt.rcParams[axes.unicode_minus] False # 解决负号显示问题 # 方法二更通用在需要中文的标签处单独设置字体属性 # 先定义中文字体属性 zh_font {family: SimSun, size: 12} # SimSun即宋体 # 生成示例图 x np.linspace(0, 10, 100) y np.sin(x) fig, ax plt.subplots(figsize(8, 5)) ax.plot(x, y, labelr$\sin(x)$ curve) # 数学环境用LaTeX渲染自动使用Times New Roman # 设置标题和标签中文用指定字体英文和数字由全局Times New Roman处理 ax.set_xlabel(时间 (s), fontdictzh_font) # “时间”用宋体“(s)”用Times New Roman ax.set_ylabel(振幅, fontdictzh_font) ax.set_title(正弦函数示例, fontdictzh_font) ax.legend() plt.tight_layout() plt.savefig(figure.pdf, dpi300, bbox_inchestight) # 保存为PDF矢量图更清晰 plt.show()这段代码的核心思想是全局默认使用Times New Roman在需要显示中文的具体文本对象如xlabel,title上通过fontdict参数单独覆盖为宋体。这样就能完美实现混排要求。保存为PDF格式能保证字体嵌入在任何电脑上查看都不会变样。4.4 其他零碎但重要的格式技巧四级标题加粗问题北航模板中四级标题\subsubsection有时默认没有加粗。你需要检查buaa.cls文件中对应的定义确保包含了\bfseries或\textbf命令。找到subsubsection的格式设置部分将其修改为类似subsubsection{% format\zihao{-4}\songti\bfseries\raggedright, % 注意这里的 \bfseries beforeskip3.61pt, afterskip3.61pt, },攻读学位期间成果列表如果需要使用带方括号的编号如[1]、[2]可以使用enumitem宏包来定制enumerate环境\usepackage{enumitem} % 在正文中 \begin{enumerate}[label{[\arabic*]}, leftmargin*, alignleft] \item 作者. 论文题目[J]. 期刊名, 年份, 卷(期): 页码. 已发表 \item 作者. 论文题目. 在审 \item 专利名称: 专利号[P]. 已公开 \end{enumerate}致谢落款右对齐在致谢部分最后需要你的姓名和日期右对齐。最简单的方法是使用flushright环境\begin{flushright} 衷心感谢\\ \vspace{2\baselineskip} % 空两行 张三 \\ 2023年12月于北京航空航天大学 \end{flushright}这些细节看似微不足道但正是它们共同构成了一篇格式规范、排版精美的学位论文。在最后提交前请务必生成完整的PDF从头到尾仔细检查一遍目录、图表编号、参考文献引用和格式确保每一个环节都符合要求。LaTeX写作虽然入门有门槛但一旦掌握了这些技巧它带来的排版质量和效率提升是巨大的。希望这份指南能帮你绕过我当年踩过的那些坑顺利搞定论文格式把更多精力投入到内容本身。