如果你已经照着网上的教程装好了LaTeX,成功编译出一份Hello World,恭喜,你完成了最快乐的一步。但接下来大概率会陷入这种循环:页眉字号怎么调、图片怎么放到右边、cite怎么变上标、编译一次要等半天、写了两天文档突然报错……这才是LaTeX学习的真实曲线。它的门槛从来不是安装,而是安装之后那一长串“看起来很小、不会就是不会”的细节。这篇“LaTeX 2”想写的,就是第二遍系统学习LaTeX的经验沉淀——不是又一份安装教程,而是从装好环境到能独立排版一篇论文的完整链路,适合已经脱离Hello World、却还没能独立应对日常排版需求的人。
1. 为什么说“LaTeX 2”不是版本号,而是第二遍才能真正上手
1.1 LaTeX版本号背后的小历史
很多人看到“LaTeX 2”第一反应是版本号,其实严格说现在跑在绝大多数模板上的体系叫LaTeX 2e,是1994年定型的稳定接口。它确立了Document Class机制、宏包加载机制,以及环境+命令的组织方式。社区后来一直在筹备LaTeX 3内核,但这个新内核折腾了很多年,LaTeX 2e依然因为兼容性而稳坐主流。理解了这层背景,你就不会奇怪“为什么2010年的模板和2025年的模板长得差不多”——文档类和宏包机制几十年没有大变化。你在VSCode里写下的\begin{figure},放进十年前的老模板同样能编译,这种稳定性是LaTeX作为学术排版工具最值钱的资产。
1.2 第一遍和第二遍的差别在哪里
第一遍学习,绝大多数人处在“复制-修改-报错-搜索”的循环里:模板给什么就用什么,\begin{thebibliography}看不懂也照抄,遇到Missing $ inserted直接懵。第二遍学习要做的其实是换一个视角:把LaTeX看成一套排版程序,tex源文件是输入,PDF是输出,中间所有环节都是编译流程里的数据交换。一旦建立这个模型,很多概念自然就通了——为什么目录要编译两三次才更新、为什么.aux辅助文件不能乱删、为什么同一个命令换个宏包就报错。这就像开车,第一遍学的是踩油门和打方向盘,第二遍学的是理解发动机和变速箱之间的配合。
1.3 本文的实战路线
接下来我用“真正用LaTeX写完一篇论文所需的完整链路”来组织内容:先讲环境搭建的底层逻辑,再集中处理数学公式排版,接着拆解论文排版的高频操作,然后聊协作与修订、辅助文件清理,最后解决中文支持和画图方案,并以一个完整工作流收尾。每个部分都会给出可复制的代码和我实际踩过的坑,希望你看完能直接解决手头论文或报告里的问题。
2. 环境搭建的真正逻辑:发行版、编辑器与本地部署的取舍
很多LaTeX下载安装教程只告诉你“下一步、下一步”,结果装完发现中文编译报错、宏包找不到、辅助文件不会清理。环境这件事,知道为什么这么配,比记住点击顺序重要得多。
2.1 发行版选择:TeX Live、MiKTeX还是MacTeX
发行版可以理解成LaTeX的操作系统,常见选择有三个:TeX Live跨平台、宏包最全,学术写作首选;MacTeX是macOS上的TeX Live打包版,装完即用;MiKTeX是Windows老牌发行版,支持按需安装宏包,但写论文写到一半让它联网下载宏包,确实容易打断思路。我的建议很直接:Windows用户直接装TeX Live,接受几个GB的磁盘占用,换来的是稳定;Mac用户装MacTeX;MiKTeX适合快速体验,但不适合作为投稿主力。安装之后重点记住一个命令tlmgr,它是TeX Live的包管理器,缺哪个宏包就tlmgr install 宏包名,比重新走一遍安装流程高效太多。
2.2 VSCode + LaTeX Workshop的合理配置
VSCode是目前最舒服的本地LaTeX编辑环境,核心插件是LaTeX Workshop,它把编译、预览、清理、SyncTeX同步全部集成进编辑器。安装插件后,配置要点在于recipes和tools:tools定义怎么调用底层命令,recipes定义按什么顺序执行哪些工具。下面是一份我实测稳定用的settings.json:
{ "latex-workshop.latex.recipes": [ { "name": "latexmk", "tools": ["latexmk"] } ], "latex-workshop.latex.tools": [ { "name": "latexmk", "command": "latexmk", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "-outdir=out", "%DOC%" ] } ], "latex-workshop.latex.clean.subfolder": "out", "latex-workshop.latex.clean.fileTypes": [ "*.aux", "*.log", "*.toc", "*.out", "*.bbl", "*.blg", "*.synctex.gz", "*.fls", "*.fdb_latexmk" ], "latex-workshop.latex.autoClean.run": "onBuilt" }逐个解释关键点。latexmk是自动构建工具,它会根据文件修改情况判断需要编译几遍,LaTeX存在“引用的值要等上一轮编译结束才知道”的问题,所以必须多次编译,latexmk把这层逻辑自动化了。-outdir=out把编译产生的辅助文件集中放进out子目录,正文目录保持干净,以后把工程发给导师或投稿时,不会被一堆.aux文件淹没。clean.fileTypes配合autoClean.run实现“编译完成后自动清理辅助文件”,这正是很多人在搜的“build latex project clean up auxiliary files”场景。-synctex=1开启正反向同步,PDF里Ctrl+点击能跳回源行,长文档写作的效率神器。
配置不生效时,先确认你改的是用户设置还是工作区设置,再确认VSCode右下角状态栏显示的引擎是latexmk而不是pdflatex。我见过太多人配置写了半天,最后发现根本没用上,问题都出在这两个地方。
2.3 本地部署还是在线编辑器:不是二选一
近两年很多人第一次接触LaTeX用的是在线编辑器,零配置、自动同步、导师可直接批注,确实好用。但“LaTeX本地部署”依然不可替代:一是某些期刊老模板依赖特定宏包,在线编译器的宏包版本可能滞后;二是大文档比如学位论文或百页以上报告,在线编译容易超时、预览卡顿,本地几分钟跑完;三是敏感数据内容不便传云端。我的做法是本地VSCode为主力,在线编辑器作为快速验证与协作辅助,两者互补而不冲突。如果你是在前端项目里要渲染公式,比如Nuxt.js页面,那又完全是另一套体系,通常用MathJax或KaTeX这类JavaScript库,和本地LaTeX编译没有直接关系。另外一定记住编译引擎选择:英文文档用默认的pdfLaTeX即可,写中文则用XeLaTeX或LuaLaTeX,配合\usepackage{ctex}才能真正处理好中文字体和标点。
3. 数学公式排版:从基本规则到多行、矩阵与符号管理
LaTeX最初就是为数学排版而生的,公式相关的技能是使用时的硬通货。关于“latex公式”“latex数学公式”“latex语法”的疑问,绝大多数都集中在数学模式里。
3.1 数学模式的两条铁律
第一条,数学公式有行内和行间两种形态:行内公式用$...$,行间公式用\[...\]。很多人习惯用$$...$$写行间公式,这个写法虽然能编译,但会造成行间距异常、垂直间距不一致,投稿模板里容易出视觉问题,建议一律改成\[...\]。第二条,数学模式下所有空格都会被忽略,a b和ab输出完全一样。想控制间距要用专门命令:\,小空格、\quad一个汉字左右的宽度、\qquad两个。理解了这条,你就能明白为什么公式里“加空格没反应”——不是出bug,是数学排版规则本来如此。
另一个高频困惑是“公式里怎么塞中文”。答案是\text{}命令,比如p = \frac{\text{命中}}{\text{总数}}。直接写中文会得到一堆奇怪的字体错误,这在写技术笔记和交底文档时特别常见。
3.2 多行公式、矩阵、分段函数与二项式系数
多行公式最常用的是align环境,&指定对齐位置,\\换行。矩阵有四种常用形态:matrix无括号、pmatrix圆括号、bmatrix方括号、vmatrix竖线。分段函数用cases环境。下面是一个综合示例,导入amsmath即可使用:
\usepackage{amsmath} \begin{align} f(x) &= \begin{cases} x^2, & x \ge 0 \\ -x, & x < 0 \end{cases} \\ \binom{n}{k} &= \frac{n!}{k!(n-k)!} \end{align}这里特别提醒一个热词问题:很多人搜“latex中binnom”,正确的命令其实是\binom{n}{k},中间没有多余的那个n。二项式系数的排版命令来自amsmath,先\usepackage{amsmath}再使用。矩阵里行数列数多的时候,省略号用\cdots水平、\vdots竖直、\ddots斜向,这三个符号用对了,整个矩阵的专业感立刻不一样。如果你不想给公式编号,用align*环境,或者在某一行末尾加\notag,这个细节在模板要求“公式编号连续且不乱”时很关键。
3.3 从Word公式到LaTeX:识别、转换与检查
“word公式转latex”在工作流里非常常见,尤其是处理历史文档中的旧公式。我的效率方案分两种情况:只有几个公式,直接用Mathpix这类OCR工具截图识别,输出LaTeX代码后人工校对;如果是整篇Word论文,先整体转文本再逐个处理公式,不要指望一次成功。MathType用户有一条更顺手的路径:在MathType的“剪切/复制偏好”里把复制格式设为LaTeX,再把结果粘贴进tex文件即可。
但无论哪种转换,转换后必须手动检查三样东西:分式的括号层级、上下标是否错位、\frac与\text{}的边界。OCR对分式层级的判断经常出错,这是最隐蔽的错误来源。Visio场景下也是这样处理:我通常在流程图里插入公式,先单独编译一个纯公式PDF,再用“插入图片”的方式放进Visio,公式是矢量所以缩放不糊;反过来,Visio画好的图导出成PDF再插入LaTeX,同样保持矢量。这个组合几乎能解决所有图文混排的清晰度问题。
3.4 符号查询:与其背,不如掌握查的路子
“latex符号大全”这种关键词搜索量一直很高,但我的建议是不要背符号表,而是掌握两个工具。第一个是Detexify,在线手写识别网站,用鼠标画出符号,它直接给出对应命令,数学符号基本全覆盖;第二个是本地终端输入texdoc symbols-a4,会打开一份几十页的符号索引文档,离线也能查。更进阶的用法是组合命令自己造符号:\overset{!}{=}让等号上方加标注,\stackrel{def}{=}写定义式,\mathop{\mathrm{arg\,max}}_{x}排定义域下标。具备这种“用基础命令组合出专业符号”的能力,远比背几百个命令效率要高。
4. 论文场景的高频操作:页眉、图片、引用与双栏模板
真正开始写论文时,公式反而不是最花时间的,更多精力耗在页眉页脚、图片位置、引用格式、模板适配这些“琐碎但影响观感”的细节上。这里把高频操作一次讲透。
4.1 页眉:字号调整与中文页眉
页眉字号调整用fancyhdr宏包配合\zihao{}命令就能解决。\zihao{5}是中文字号五号,\zihao{-4}是小四;如果只想精确控制西文字号,用\fontsize{10.5pt}{12.6pt}\selectfont,第一个参数是字号,第二个是行距。最小可用示例:
\usepackage{ctex} \usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyhead[C]{\zihao{5} 第一章 绪论} \fancyfoot[C]{\thepage} \renewcommand{\headrulewidth}{0.4pt}这里有三个坑值得单独说。第一个是“latex页眉加中文”,页眉放汉字时编译引擎必须是XeLaTeX,并且已经加载ctex,否则汉字直接消失或乱码;第二个是不同页码样式,比如前言用罗马数字、正文用阿拉伯数字,需要在章节切换处手动设置\pagenumbering{roman}和\pagenumbering{arabic};第三个是如果发现页面样式没生效,检查是不是某些宏包或模板重置了\pagestyle,可以把\pagestyle{fancy}放到正文开始处再试一次。页眉这种小调整最容易被宏包加载顺序影响,排查时优先检查导言区的宏包顺序。
4.2 图片:插入、局右、浮动体与清晰度
图片插入的核心命令是\includegraphics,前提是导言区加载\usepackage{graphicx}。文件名不要带空格和中文,否则兼容性问题层出不穷。“latex插入图片”最常见的困惑是“图为什么不出现在我想放的位置”——这是浮动体的正常行为,[h]、[ht]、[htbp]都只是建议而非强制。如果严格要求当前位置,用float宏包的[H]参数,但要承受版面空洞的风险。
图片局右的做法有两种。第一种是在浮动体内用\hfill把图片推到右侧:
\begin{figure}[ht] \hfill \includegraphics[width=0.4\linewidth]{fig.pdf} \caption{局右示例} \label{fig:right} \end{figure}第二种是用\raggedleft让后续内容靠右。注意不要在同一个浮动体里既写\centering又写\hfill,二者会互相覆盖,结果往往不是你想要的。还有几个细节:双栏模板里想让图片横跨两栏,要用figure*环境而不是figure;图片清晰度上,矢量图优先用PDF格式,位图至少300dpi,否则打印出来模糊;给图片加路径时如果文件在子目录,写成\includegraphics[width=0.6\linewidth]{figures/fig.pdf},路径里统一用正斜杠。
4.3 引用上标与加粗:小命令解决排版痛点
“latex中cite设置为上标”是数字型参考文献的常见需求。最简单的方案是用cite宏包的superscript选项:
\usepackage[superscript]{cite}之后正文里的\cite{key}会自动显示为上标编号。如果你的模板已经加载了natbib,则改用\usepackage[super]{natbib}。特殊场合下想临时改一处引用,也可以用$^{\cite{key}}$手动制造上标,但这只是兜底方法,整篇论文不要这么干。
加粗方面要分清场景:正文文字加粗用\textbf{};数学符号加粗用\boldsymbol{}或\bm{},前者来自amsmath,后者来自bm宏包;向量符号一般用\vec{}。最容易混淆的是“公式里的变量加粗”和“强调性质的文字加粗”——前者必须用数学粗体才符合排版规范。顺便说一句,\emph{}是斜体强调,\underline{}是下划线,一篇论文里三种强调方式混用会显得很杂乱,建议一套文档只用一到两种。
4.4 模板选择:Springer Nature、竞赛模板与双栏布局
“latex论文模板”的正确获取路径排序是:期刊官网的Submission Guidelines页、Overleaf模板库、CTAN宏包生态站。以“springer nature双栏latex模板”为例,Springer Nature官方在Overleaf上发布了sn-jnl模板,文档类就叫sn-jnl,默认双栏排布,数学类论文可选sn-mathphys选项。拿到模板后的第一原则是:不要往class文件里写正文,而是在模板自带的示例tex文件中替换内容,class文件保持原样,这样以后模板更新也不会冲突。
竞赛类模板同理。像“华为杯”数学建模竞赛的LaTeX模板,一般在竞赛官网的下载区或官方群发布,拿到压缩包先看README,确认需要的编译引擎和宏包版本,再改正文。双栏布局下有个高频问题:宽度超过一栏的表格和图片会导致溢出,解决方法是使用table*、figure*跨栏环境,或者把表格拆成更窄的多个小表。投稿前一定要先在本地完整编译通过,不要指望投稿系统里临时调格式。
5. 写作协作:修订痕迹、注释批注与辅助文件清理
写论文几乎一定涉及改稿:自己改、导师改、合作者改。Word的修订模式人人都会,LaTeX没有内置对应功能,但有两套方案可以做到同等效果。
5.1 没有内置修订模式,但可以用latexdiff
“latex 修订模式”的正确打开方式是latexdiff工具。它的原理是:提供修改前的old.tex和修改后的new.tex,latexdiff会生成一份diff.tex,保留新旧两版文本,并用高亮颜色和删除线标出差异。之后正常编译diff.tex,就得到一份带修订痕迹的PDF。基本用法:
latexdiff old.tex new.tex > diff.tex latexmk -pdf diff.tex中文场景下记得用XeLaTeX编译diff.tex,并确保ctex正常加载。实际使用中有一个体验点:latexdiff默认把删除内容标红、新增内容标蓝,如果模板对颜色有要求,可以加参数调整为整体替换标记模式。这个方案最大的价值在于不改动任何人的源文件,审稿过程完全基于生成的PDF进行,特别适合“作者-审稿人-期刊”的往返修改流程。
5.2 多人协作中的批注与TODO
修订痕迹之外,写作过程中的同行批注也是刚需。两个实用宏包:todonotes提供\todo{}命令,在页边打出待办气泡,\listoftodos汇总所有待办项;changes宏包提供更正式的变更标注,\added{}表示新增、\deleted{}表示删除、\replaced{新}{旧}表示替换,编译时还可以通过选项控制显示哪些作者的标记。多人协同写论文,我习惯在源文件顶部用注释约定每个作者的标识颜色,避免“谁改了哪里”说不清楚。这个习惯看起来小,但对几万字的多作者论文章节合并特别重要。
5.3 辅助文件与clean up:为什么编译后多出一堆文件
第一次用LaTeX的人都会困惑,明明只写了main.tex,编译后项目文件夹里却多出.aux、.log、.toc、.out、.synctex.gz等一大片文件。这些正是辅助文件:.aux保存交叉引用信息,.toc保存目录条目,.synctex.gz支持编辑器与PDF双向跳转,.log是编译日志。LaTeX之所以要编译多次,就是因为这些信息靠文件在轮次之间传递。
对应“build latex project clean up auxiliary files”的需求,推荐三种清理方式:
- VSCode里用LaTeX Workshop命令面板的“Clean up auxiliary files”,它会按你配置的
clean.fileTypes删除中间文件; - 终端执行
latexmk -c,清理辅助文件但保留最终PDF;latexmk -C则连PDF一并清理,适合彻底重建; - 手动删除时务必看清楚,不要误删
.tex源文件、.bib文献库和.bst样式文件。
我踩过一次坑:投稿上传系统前为了“目录干净”把整个out目录删了,结果论文里的交叉引用全部变成问号。原因就是.aux被删后需要重新编译两遍才能恢复引用。所以“清理”的正确用法是:保留和当前PDF同一轮的构建流程,清理只删历史缓存,不删本次构建结果。
6. 中文支持与画图方案:汉化、思维导图与报错排查
LaTeX对中文的支持已经非常成熟,前提是搞对了引擎和宏包。画图相关的需求也越来越高频,这里一并说清楚。
6.1 中文文档:不是装字库,而是选引擎和宏包
中文文档的正确组合是“XeLaTeX编译 + ctex宏包”。在TeX Live下直接\usepackage{ctex}即可,文档类也可以直接用ctexart,对应英文的article。字体会自动探测系统中的中文字体,Windows下一般用中易宋体或等线,Mac下优先宋体-简。最小示例:
\documentclass[12pt]{ctexart} \usepackage{amsmath} \begin{document} 中文文档从这里开始。 \end{document}两个高频问题必须提醒。第一,页眉中文依赖ctex,如果用了fancyhdr却看到页眉汉字是空白,多半是因为编译引擎是pdflatex而不是XeLaTeX,把VSCode的recipe改成xelatex或latexmk的-xelatex参数即可;第二是中文标点与引号,ctex默认处理了全角标点,但如果你习惯用直角引号,在部分模板里可能显示异常,需要确认字体支持。中文论文的行距,一般用\linespread{1.3}拉大到1.3倍,比默认行距更贴合国内排版习惯。
6.2 LaTeX能画思维导图吗:能,但要分清场景
被问过很多次“latex能画思维导图吗”,答案是能。TikZ生态的forest宏包可以画出相当规范的树状思维导图,最简例子:
\usepackage[edges]{forest} \begin{forest} for tree={draw, rounded corners, minimum height=1cm, anchor=north} [LaTeX [文档排版] [数学公式] [参考文献] ] \end{forest}但以我的实际经验,这个问题的正确答法是“分清场景”:如果思维导图是论文中的配图,且文字不多,用forest画能保证字体与正文一致、缩放不模糊,值得投入;如果只是给自己做笔记梳理思路,用XMind、draw.io或Obsidian的Canvas更快,最后导出成图片再插入论文。强行用LaTeX画复杂的思维导图,光布局调整就能消耗半天,收益不成正比。
6.3 让报错不再劝退:常见错误的阅读顺序
报错是学习LaTeX的必修课。看到一大片红色日志别慌,按顺序做三件事:先看第一行!开头的错误信息,那才是真正的原因,后面的多半是连锁反应;再按行号定位源文件,VSCode的LaTeX Workshop会把错误对应到具体行,点击即可跳转;最后查.log文件里“l.XX”附近的内容。常见问题整理成表:
| 报错信息 | 通常原因 | 快速对策 |
|---|---|---|
Missing $ inserted | 数学命令用在了文本模式 | 进入$...$或\[...\]环境 |
Undefined control sequence | 命令拼错或宏包未加载 | 检查拼写,补充\usepackage |
Package x Error: ... | 宏包冲突或缺少依赖 | 看报错提示给出的宏包名 |
Overfull \hbox | 内容超出当前行宽 | 属警告,可忽略;严重则换行或缩行 |
! LaTeX Error: File ... not found | 缺少模板文件或图片 | 检查文件路径与扩展名 |
这里特别想说:Overfull和Underfull是警告而不是错误,很多新手看到Overfull \hbox就以为文档炸了。真正要做的是把警告信息保留下来,投稿前挑影响观感的处理,比如把超宽公式拆成几行、把图片宽度缩到0.9\linewidth。日志文件的阅读能力,某种意义上比记忆命令更重要。
7. 走一遍真实论文工作流:从空白tex到可投稿
所有技巧最终都要落到一个完整流程里。我用一篇文章的实际过程把前面几章的能力串起来,这也是我每次写新文档都会走一遍的路径。
7.1 从模板到骨架:先定结构,再写内容
拿到目标期刊或竞赛模板后,第一步不是写正文,而是先把骨架编译通过:确定\documentclass选项(双栏、字号、引擎),加载需要的宏包(amsmath、graphicx、cite、float、ctex等),把章节标题和参考文献命令先摆好,内容用占位符填。我的原则是“空骨架能编译成功”才算环境就绪,这能避免把环境问题和内容问题混在一起排查。很多时候卡住一小时,最后发现只是宏包加载顺序不对,骨架先行可以让你尽早暴露这类问题。
7.2 内容填充与多轮编译:理解“两次编译”的真实含义
接着开始填正文,每写完一个章节就编译一次。这里解释“明明改了内容,目录和引用却不更新”:LaTeX的编译是多趟的,第一遍读取源文件,把章节编号和标签记录到辅助文件,第二遍读取辅助文件,填充交叉引用和目录。latexmk会在检测到辅助文件变化时自动补跑第二、三遍,但如果你用编辑器里的Build按钮只跑了一遍,交叉引用就可能显示为问号。所以配置好latexmk,或者手动编译两次,是长文档写作的基本纪律。插图、参考文献、索引每增加一处,都要多留一次编译余量。
7.3 投稿前三件套:修订稿、清理与检查
内容定稿后,我给自己定的流程是三件事。第一,用latexdiff生成一份与初稿的对比版本,方便自己和导师快速核查改动范围;第二,用latexmk -c清理辅助文件,确保工程发给任何一个人,对方拿到的源文件都能重新编译;第三,检查最终PDF的投稿要素:公式是否都在数学模式下、图片清晰度是否达标、引用是否上标一致、页眉页脚与页码是否符合期刊要求、参考文献是否按模板样式生成。这步检查很机械,但能拦住绝大多数退修要求。
7.4 个人的一点体会
最后说句掏心窝的话:学LaTeX最有效的路径,就是拿一篇真实文章从头到尾走一遍。第一遍会被各种报错打断,第二遍就能分辨哪些是环境问题、哪些是写法问题。我至今保留着一份“报错速查笔记”,每次遇到新错误就往里记一行,两年下来,绝大多数编译问题看一眼日志就能猜个八九不离十。所谓熟练,说到底就是踩过的坑够多,并且没有白踩。