很早就想写一篇关于“怎么用LaTeX写小论文”的经验贴,因为这两年无论是课程报告、数学建模竞赛论文,还是给期刊投的短篇稿件,我基本都用LaTeX完成。身边不少朋友被“LaTeX到底怎么开始”“装完软件为啥编译报错”“模板去哪里找”这几个问题劝退,但其实只要把环境、骨架和几个高频语法搞定,小论文这件事比Word要省心得多,尤其是公式和参考文献管理,体验完全不在一个级别。
这篇内容不打算讲成一本LaTeX语法字典,而是按“先想清楚为什么用 → 搭好环境 → 搭好论文骨架 → 搞定公式图表 → 学会排查问题”这条实战链路走一遍。看完之后,你应该能独立写完一篇结构完整、能编译出清爽PDF的小论文,包括数学建模那种公式密集的场景也一样适用。
1. 先从想清楚“为什么”开始:LaTeX到底解决了什么问题
1.1 LaTeX与Word的底层逻辑差异
很多人接触LaTeX的第一反应是“这玩意儿怎么像在写代码”,这恰恰说明它和Word是两种完全不同的工作模式。Word是所见即所得,你调整一个标题的格式,鼠标点几下就能看到效果,但它最大的问题在于——样式和内容绑得太死,一篇论文写到第五稿,目录、图表编号、参考文献编号经常乱掉。LaTeX是所见即所想的反向模式:写作时只关注内容本身,用一条\section{}告诉LaTeX“这里是一个一级标题”,具体标题用多大字号、占多少行距、编号长什么样,全部交给文档类和宏包统一处理。
用前端开发来类比就很好懂:Word像是用PPT里的文本框一点点拼网页,LaTeX则像是写HTML+CSS,内容和样式彻底分离。对于论文这种强格式约束、强编号依赖的文档,LaTeX的逻辑显然更科学。你写正文的时候完全不用惦记“公式编号到几了”“第三张图引用是不是又对不上”,这些全是自动维护的。
1.2 什么样的小论文最适合用LaTeX
先说结论:数学公式多、图表往往需要自动编号交叉引用、还有投稿或提交格式强制要求的文章,强烈建议用LaTeX。课程小论文、数学建模论文、期刊短篇、会议论文,这几类正是LaTeX的主场。
数学建模论文是LaTeX应用最典型的场景,因为建模论文里公式是绝对主角,连续微分方程、矩阵运算、推导步骤,用Word里那套公式编辑器能写到让人崩溃,而且只要改动一个符号,整段推导的格式就得重新调。LaTeX里公式就是普通的文本代码,改参数、换符号、增加推导行都是秒级操作,编译后公式自动排版成规整的出版样式。
反过来,“纯文字、少量简单图表、对格式完全无所谓”的内容,比如一篇以叙述为主的思想汇报,那用Word反而更快,没必要为几十行文本引入一套编译环境。判断标准很简单:未来你会不会在这篇文档上反复改动?你会不会需要自动编号的公式和插图?只要有一项是肯定的,LaTeX就值得用。
1.3 模板即资产:一次积累持续受益
写小论文这件事,LaTeX带来的长期价值是“模板复用”。我研一第一次写课程论文时,花了两天时间配环境、搭出了一个包含标题、作者、摘要、正文、图、表、参考文献的完整模板。那次虽然耗时,但之后所有的课程作业、竞赛论文、期刊稿件,全部在这个模板上微调外壳,核心代码直接复用,一篇新论文的前期准备时间从两天压缩到了半小时以内。
所以小论文虽“小”,恰恰是LaTeX新手最合适的练手项目。体量不大,出错容易定位,但该有的环节都有——标题、摘要、章节、公式、图表、参考文献一样不落。等这套结构跑通了,大论文和期刊稿件也不过是这个框架的延伸。
2. 环境搭建:发行版、编辑器与编译链一次配好
2.1 TeX发行版怎么选
LaTeX本身是一套宏语言和排版引擎,真正要安装在你电脑上的是一个“TeX发行版”。最常用的是TeX Live,跨平台支持Windows、Linux和macOS,宏包极其齐全,安装时基本可以做到“以后不会因为缺宏包而报错”。macOS用户除了TeX Live还可以选择MacTeX,本质上是TeX Live的macOS优化包,额外带了一些图形工具,装一个省心。Windows用户认准TeX Live就好。
网上很多人推荐装“精简版”,理由是完整版几个GB太大。我的个人建议恰恰相反:第一次装,请直接上完整版。因为LaTeX的绝大多数报错都跟“找不到宏包”有关,精简版常常某个sty文件缺失,新手又不知道怎么单独补装,排查一晚上可能就只是想用\includegraphics插图却发现graphicx没装好。完整版一次装全,后面几年几乎不会再碰发行版相关的问题。硬盘空间换省心,这笔买卖相当划算。
安装完成后在命令行敲latex -v能打印出版本信息,就说明核心引擎已经就位。需要说明的是,发行版自带的不只是编译器,还包含几百个宏包、字体、文档说明,这也是它体积大的原因,属于正常现象。
2.2 本地编辑方案:VSCode + LaTeX Workshop
编辑器方面,我最推荐VSCode配LaTeX Workshop插件。VSCode免费、跨平台、插件生态好,而且如果你平时还写Python或者做Markdown笔记,用同一套编辑器管理所有写作任务,无需切换软件,这类“少装一个软件就少记一个快捷键”的收益,长期累积下来比想象中大。
VSCode里装LaTeX的路径是这样的:先在扩展市场搜“LaTeX Workshop”并安装,然后在项目目录建一个.vscode/settings.json,把编译工具链指给XeLaTeX。有个完整的参考配置:
{ "latex-workshop.latex.recipes": [ { "name": "XeLaTeX", "tools": ["xelatex"] }, { "name": "XeLaTeX -> BibTeX -> XeLaTeX*2", "tools": ["xelatex", "bibtex", "xelatex", "xelatex"] } ], "latex-workshop.latex.tools": [ { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%" ] }, { "name": "bibtex", "command": "bibtex", "args": ["%DOCFILE%"] } ], "latex-workshop.view.pdf.viewer": "tab" }其中-synctex=1用于启用反向同步,在PDF里Ctrl+点击可以跳回对应的源码位置,改长文时找一段话的源码非常方便。-interaction=nonstopmode的作用是编译出错时不要停下来等人回答,直接记录错误并继续跑,这样VSCode能一次性把所有错误列出来给你看。这才是关键配置。
这里要稍微解释一下为什么选择XeLaTeX作为默认编译器。LaTeX最经典的编译方式是用pdfLaTeX,但它对中文的支持很麻烦。而XeLaTeX直接基于Unicode,配合ctex宏包可以很自然地处理中文文档,不需要额外转码配置。我们的目标是写中文小论文,所以从第一天就用XeLaTeX写,后面完全不会碰到中文乱码问题。
2.3 在线方案Overleaf:零配置的救命稻草
如果你暂时不想在本地装几个GB的发行版,或者人在一台没有管理员权限的电脑上,Overleaf(在线LaTeX编辑器)是绝佳的替代方案。它开箱即用,注册后新建项目就能写,很多期刊和会议直接提供Overleaf模板,套用即可。Overleaf还自带编译日志界面的友好展示,对于新手定位报错很有帮助,比本地黑压压的命令行输出友好得多。
我的建议是:第一篇文章干脆从Overleaf开始,先把LaTeX语法和论文流程跑通,之后再视情况回到本地VSCode。Overleaf上找模板也很方便,搜索课程作业、期刊名,甚至直接搜“数学建模”等关键词,都能找到可复用的现成模板。不过对于长期写作者,本地环境还是不可或缺的,毕竟离线可用、不依赖服务器编译速度,还能用Git管理版本。两条路各试一轮,你自然就知道自己的偏好。
3. 论文骨架先行:模板选择与文档结构搭法
3.1 模板从哪来:用好模板能省一大半力气
写LaTeX小论文不要从零开始。LaTeX社区最有价值的资产之一就是海量现成模板,搜模板的方式我按优先级排一下:第一,你目标期刊/会议官网有没有LaTeX模板,有就直接下,这保证了格式合规;第二,Overleaf的模板库,直接搜中文“小论文”“课程报告”或英文“template”即可;第三,数学建模方向往往有现成竞赛模板,里面预置了封面、摘要页、承诺书的排版样式;第四,如果上述都没有,再从自己以前写过的文档改。
我刚上手时犯过的错就是非要自己搭一个“完美模板”,结果在边距、字号、页眉这些细节上折腾了两三天。后来想明白了:小论文评阅人看的是内容,不是你对排版引擎的掌控力。拿一个靠谱模板,替换成自己的题目、作者和章节,比从零开始要扎实得多。
3.2 创建主文档:documentclass与导言区设置
无论用什么模板,主文档的开头结构几乎一样。以中文小论文为例,一份最简可编译文档长这样:
\documentclass[UTF8]{ctexart} \usepackage{graphicx} % 插图 \usepackage{booktabs} % 三线表 \usepackage{amsmath, amssymb} % 数学 \usepackage{caption} % 图表标题 \usepackage{geometry} % 页边距 \geometry{a4paper, margin=2.5cm} \title{这里写你的论文标题} \author{作者姓名} \date{\today} \begin{document} \maketitle \begin{abstract} 这里是摘要内容。 \end{abstract} \section{引言} 正文从这里开始写。 \end{document}几个必须理解的地方:\documentclass的一对方括号里,UTF8配合ctexart文档类是中文支持的关键。CTeX宏集是针对中文排版的完整方案,它不仅处理中文字体,还解决中文缩进、标点压缩等细节,强烈建议直接用ctexart而不是在article上手动加各种中文字体设置,后者容易踩坑。
导言区就是\begin{document}之前的部分,所有全局设置都写在这里。它的名字很形象,就像一本书的开头导言页,规定整篇文档用什么宏包、什么页边距、什么编号风格。小论文通常只需要极简的导言区:一个文档类、三五个宏包、一两个主题设置,就够了。凡是后文要用的宏包,最好都统一在导言区声明,不要写到正文中间才临时\usepackage,这样代码组织最清晰。
3.3 正文常用环境:标题、摘要、章节、列表
主文档建好后,正文部分的高频结构大概有这么几类。标题和作者信息用\title、\author、\date声明,然后用\maketitle真正输出,这种分离的好处是改一次声明处,全文所有涉及标题的地方都会同步更新。摘要用abstract环境包起来,多数模板还会要求摘要下方给出3到5个关键词,用\keywords{}或直接自定义一个段落即可。
章节标题是LaTeX自动编号的核心体现。\section{引言}会生成一级编号,\subsection{相关工作}再生成二级编号,使用时完全不用手动写“1.1”“1.2”这些数字,中间插入新章节后,后续编号会自动顺延,这是我用LaTeX后最“回不去”的功能之一,比Word的标题多级列表稳定太多。
列表环境在小论文里主要用来组织要点,分类明显时用itemize无序列表,有先后顺序时用enumerate有序列表:
\begin{enumerate} \item 第一步是数据清洗,去掉缺失值较多的样本。 \item 第二步是特征选择,使用相关性矩阵过滤冗余维度。 \item 第三步是模型训练与交叉验证。 \end{enumerate}编译后会自动生成“1.、2.、3.”编号,如果中间删除一项,编号也会自动纠正。这里隐藏的一个心得是:LaTeX写正文时,段落之间要用空行分隔(或者用\par),单个换行符在输出时不会被当作段落结束。这个跟Markdown有点类似但又不完全一样,我见过不少人第一行写完想回车另起一段,编译出来却接在了一起,以为是编译坏了,其实只是误以为换行等于分段。
4. 核心写作语法拆解:从公式到图表的完整实操
4.1 数学公式:行内、行间、编号与对齐
小论文的公式一般是三类用法。行内公式用单个美元符号包裹,例如“设样本均值为$\bar{x}$,方差为$s^2$”,这样公式会嵌在文本行里跟文字对齐。行间公式用双美元符号或\[ \]包裹,公式独占一行并居中。需要跨行对齐的推导过程,用align环境配合&标记对齐位置:
\begin{align} f(x) &= ax^2 + bx + c \\ &= a\left(x + \frac{b}{2a}\right)^2 + \frac{4ac - b^2}{4a} \end{align}这段代码把二次函数的配方过程写成两行,&所在的位置会在各行的同一竖直线上对齐,\\表示换行。这个写法是论文里展示计算推导的标准姿势,数学建模和理工科论文里几乎天天用到。
希腊字母和常用数学符号是高频需求量,\alpha输出α,\beta输出β,\theta输出θ,\lambda输出λ,\mu输出μ,\sigma输出σ,\Omega输出大写Ω。上下标是^和_,分数是\frac{分子}{分母},根号是\sqrt{},求和符号是\sum_{i=1}^{n}。这些符号的记忆不用一次性背完,写到哪里查到哪里,用几篇小论文后基本就形成肌肉记忆了。我一般把常用符号记成一个速查笔记,遇到生疏的直接检索,效率远高于死记硬背。
公式自动编号是用equation环境。比如:
\begin{equation} E = mc^2 \label{eq:mass_energy} \end{equation}编译后公式右侧会出现“(1)”这样的编号,正文里用\ref{eq:mass_energy}就可以引用。增加或删除公式后,编号全部自动调整,这也是Word环境下难以想象的体验。需要注意的是,不需要编号的行间公式请用\[ \],避免出现“只有一个无引用公式却占了一个编号”的尴尬。
4.2 插图:路径、宽度、浮动体与多子图
小论文的插图虽然数量不多,但步骤要完整:插入图片、设置大小、加上标题、给图片一个标签方便正文引用。最基础的方式是:
\begin{figure}[htbp] \centering \includegraphics[width=0.8\linewidth]{figures/result.png} \caption{实验结果对比} \label{fig:result} \end{figure}htbp是浮动位置的四个选项,分别表示“放在这里”“放在顶部”“放在底部”“单独成页”,按顺序尝试,LaTeX会自动找一个合适的位置放置图片。\centering让图片水平居中,width=0.8\linewidth表示图片宽度占当前行宽的80%,这是控制图片大小的最常用方式,相比直接写width=8cm,用相对宽度可以保证图片在单栏、双栏等不同版式下都能自动适应。\caption给出图题,\label配合正文里的\ref{fig:result}实现“如图1所示”的自动引用。
这里面最容易踩的坑有两个。一个是图片路径,\includegraphics{figures/result.png}中的路径是相对于主文档所在目录的,如果编译后PDF里图片位置是空白框或者报“File not found”,第一步先检查路径写没写对、文件名大小写是否一致。另一个是文件名不要带中文或空格,用result.png和fig-01.png这类纯英文不带空格的命名,能避免大量跨平台兼容问题。我见过不少人在本地Windows能编译的项目放到Overleaf上就报图找不到,八成就是文件名带中文或空格导致编码不一致。
需要并排排列多张子图时,可以用subcaption宏包提供的subfigure环境:
\begin{figure}[htbp] \centering \begin{subfigure}{0.45\linewidth} \includegraphics[width=\linewidth]{figures/a.png} \caption{方法A} \end{subfigure} \hfill \begin{subfigure}{0.45\linewidth} \includegraphics[width=\linewidth]{figures/b.png} \caption{方法B} \end{subfigure} \caption{两种方法对比} \end{figure}两个子图会并排显示,各自有小标题(a)和(b),大标题下再统一编号。\hfill用于在两者之间施加弹性水平间距,让两图分别靠左和靠右分布。这种排版在需要对比多组实验结果的论文里非常实用。
4.3 表格:三线表、列宽控制与自动换行
小论文里的表格最推荐三线表风格,也就是顶线、栏目线、底线三条横线,不出现竖线。用booktabs宏包的toprule、midrule、bottomrule实现,比LaTeX默认的\hline组合起来更好看:
\begin{table}[htbp] \centering \caption{不同模型性能对比} \begin{tabular}{lccc} \toprule 模型 & 准确率 & 召回率 & F1值 \\ \midrule Baseline & 0.85 & 0.82 & 0.83 \\ Ours & 0.91 & 0.89 & 0.90 \\ \bottomrule \end{tabular} \end{table}{lccc}定义四列的对齐方式,l左对齐,c居中,r右对齐。表格里每行用&分隔单元格,用\\换行。这个基础结构可以应对绝大多数小论文表格。
真正麻烦的是单元格内容过长怎么办。默认的c列不会自动换行,长文本会把表格撑得比页边距还宽。解决办法是把那一列的类型从c改成带固定宽度的p{3cm},这会让该列变成自动换行的段落列:
\begin{tabular}{lp{6cm}cc}还有一种更省心的方法,用tabularx宏包配合X列类型,让表格自动占满\linewidth:
\begin{tabularx}{\linewidth}{lXcc} \toprule 模型 & 方法描述 & 准确率 & F1值 \\ \midrule Ours & 本文提出的方法通过引入注意力机制,对长序列特征进行加权融合,从而提升关键特征的表达。 & 0.91 & 0.90 \\ \bottomrule \end{tabularx}X列会自动分配剩余宽度,描述文本长了就自动换行并撑满整行,这是“表格自动换行”热搜词背后真正需要的解决方案。用tabularx时记得在导言区写\usepackage{tabularx}。如果表格内容实在太多放不下,再考虑拆分成两张表或调整字号,而不是让表格冲出页面边界。
4.4 参考文献与交叉引用:从手动编号到自动化
小论文参考文献有一个经典的需求变化:先用thebibliography环境手动管理,后文再用BibTeX实现全自动。最基础的手动方式是:
\begin{thebibliography}{9} \bibitem{lamport1994} Leslie Lamport. \emph{LaTeX: A Document Preparation System}. Addison-Wesley, 1994. \end{thebibliography}正文里用\cite{lamport1994}引用,编号由LaTeX自动生成。这种方式的优点是简单,不依赖额外工具,适合参考文献少于十篇的小论文。
一旦文献数量增多、或需要按特定引用格式(比如国标GB/T 7714)输出,就升级到BibTeX方案。它在项目里新建一个.bib文件,按条目格式存文献:
@article{li2023, author = {Li, Ming and Zhang, Wei}, title = {A Novel Method for Data Analysis}, journal = {Journal of Example}, year = {2023}, volume = {42}, pages = {100--110} }主文档中先在需要文献列表的位置写:
\bibliographystyle{plain} \bibliography{refs}然后按“XeLaTeX → BibTeX → XeLaTeX → XeLaTeX”的顺序连续编译,参考文献与正文引用编号才会正确呈现。第一次做这步的时候,很多人会漏掉第二次编译,结果发现文献编号全是问号“?”,这几乎是BibTeX新手的必经之路。为避免记错,我在VSCode的LaTeX Workshop配置里把“XeLaTeX -> BibTeX -> XeLaTeX*2”这个recipe放在了前面,一键自动化这四次编译,之后再也不用手动点四遍。
交叉引用方面,用\label对章节、公式、图表命名,再用\ref在正文引用,是LaTeX自动编号能力最惊艳的体现。改稿时插入一个图表或挪动一章内容,全文交叉引用自动重新编号,“图5改为图6了,正文引用里还是图5”这种情况不会再出现。
5. 常见编译报错与排查技巧实录
5.1 最容易踩的五个坑
这几天被问得最多的LaTeX问题,我整理成了速查表。当编译失败时,第一反应不是重装软件,而是按下面顺序检查:
| 现象 | 原因 | 处理办法 |
|---|---|---|
| 编译报错“File xxxx.sty not found” | 导言区用到的宏包未安装,或宏包名拼写错误 | 检查\usepackage{}拼写;本地环境打开终端用tlmgr install 宏包名补装;优先建议搭配完整版发行版 |
| 输出PDF里中文乱码或空白 | 编译器不是XeLaTeX,或没有使用ctexart文档类 | 编译器切换为XeLaTeX,文档类改用ctexart |
| 图片显示为空白框/报“File not found” | 图片路径错误、文件名含中文或空格 | 路径写成相对主文档的位置,文件名改为纯英文 |
| 表格超出页面宽度 | 列类型全用了定宽居中型c | 长文本列改用p{3cm},或用tabularx的X列 |
| 公式显示一堆红色错误 | 数学模式下用了非法字符,或括号不匹配 | 检查是否漏掉$,检查{和}是否成对 |
第5个现象特别常见,新手看到满屏红色报错会慌,但仔细看日志里通常会明确提示“Missing $ inserted”或者“Extra }”,意思是在数学模式之外用了数学符号,或者多写了一个右花括号。定位报错位置可以直接看.log文件里的行号,VSCode的LaTeX Workshop也会在问题面板里列出带行号的错误,双击就可以跳转到对应源代码附近。排查多了你就会发现,90%的LaTeX错误都出在符号配对、漏掉美元符、环境没闭合这三类上。
5.2 一个很建议养成的习惯:小步编译与版本管理
LaTeX编译毕竟不是Word的实时显示,如果一口气写两千字再编译,报错时定位范围大,就变得难查。我个人的习惯是每隔一段内容(比如写完一个小节或者插入一张图)就编译一次,确保当前状态是通顺的,再继续往下写。这让出错范围始终控制在小范围内,排查成本极低。
另外配合Git做版本管理也是个好主意。把项目和.bib文件纳入Git仓库后,每完成一个小功能就提交一次。有一次我把模板的宏包升级后整个编译挂了,用Git直接回退到昨天的提交,半分钟就恢复了现场。这个习惯在写大论文时尤其珍贵,小论文阶段早点培养起来不亏。
5.3 文献引用不显示?检查编译顺序
“引用的文献编号位置上出现问号”,是BibTeX使用中排名第一的抱怨。多数情况下不是代码写错,而是编译顺序不对。使用BibTeX时,第一遍XeLaTeX只扫描正文中引用,并生成辅助文件;BibTeX通过辅助文件去.bib里找条目并生成参考文献表;第二遍、第三遍XeLaTeX再把这些引用编号补回正文。如果只编译了一遍,文献数据还没生成,自然显示问号。
解决方法有两个层面的思路。一个是用上面配置里的自动化recipe,一次把四次编译跑完。另一个是养成“看到问号先检查编译次数”的思维方式。我见过一个更玄学的问题:引用编号显示为“?”但所有格式都正常,结果发现是BibTeX编译时卡在一个条目缺少必填字段上。比如@article缺了year,BibTeX会悄悄跳过这个条目,导致引用解析失败。这时查看.blg日志文件,通常会有明确警告,按提示补齐字段就行。
5.4 关于从Word迁移的小提醒
热搜里有“word的latex无法正常显示”和“怎么一键将word中latex公式变成公式”这类词,简单说两句。Word自身的LaTeX格式支持在部分版本里并不算完善,遇到公式代码不显示时,可以借助MathType的LaTeX输入模式,或者在在线公式转换工具里先把LaTeX公式转成MathML再贴入Word。这个操作适合偶尔处理外部来的文档,如果自己要长期写论文,还是建议直接在LaTeX环境里整体写作,避免格式转换中引入的不可控问题。转换工具的输出质量参差不齐,尤其是带复杂矩阵和分段函数的公式,转换后很容易丢结构,事后还要人工修复,时间成本并不低。
结尾前再分享一点个人体会
写到这里,把LaTeX写小论文的完整链路梳理完了:先明确为什么用它,再配好发行版和编辑器,然后套用一个靠谱模板,把文档骨架搭起来,接着处理公式、图片、表格、引用这些核心内容,最后学会根据编译日志排查问题。如果第一次用LaTeX写小论文,我的建议是不要追求一次把所有技巧都用上,先确保“能编译、能出PDF、能写段落、能插一张图”这个最小闭环。等第一篇走完,你会明显感受到格式稳定和自动编号带来的好处,之后自然愿意把越来越多的文档迁移到LaTeX里。
我个人在实践中最喜欢的还有一个细节:因为内容和样式分离,同一份内容我想生成单栏草稿版、双栏投稿版、带行号审阅版时,改的只是导言区几行配置,正文完全不动。这种“一次写作、多种输出”的灵活性,是做知识管理时很难舍弃的特点。后续如果你愿意继续深入,还可以研究自定义模板样式、用tcolorbox做漂亮的定理盒子、把图表批量整理到附录等玩法,但那些都是锦上添花,先把这篇小论文写完,你已经领先大多数还在纠结排版的人了。