1. 为什么还要折腾 LaTeX:从一份排版灾难说起
如果你曾经用普通文字处理软件排过一篇带公式、图表、参考文献的长文档,大概率经历过这样的崩溃瞬间:改了一个字号,整篇文章的图全部跑位;插入一个公式,行距突然变得忽大忽小;好不容易调好了目录,正文一改页码又全乱了。我最早接触排版是因为一份几十页的技术报告,当时用常规软件折腾了整整两天,最后交上去还是被反馈“格式不统一、公式编号混乱”。后来一位做科研的朋友甩给我一份.tex源文件,说“你试试这个”,我才第一次真正理解什么叫“内容与格式分离”。
LaTeX 入门这件事,本质上不是学一个软件,而是换一种写文档的思维方式。它是一套基于 TeX 的排版系统,你写的是纯文本,用命令描述“这是一级标题”“这是一个公式”“这里引用文献”,至于最终长什么样,交给编译器去算。它最擅长的是三类场景:含大量数学公式的学术论文、结构复杂的长篇书籍或报告、需要严格统一格式的批量文档。适合谁来学?研究生、科研人员、工程师、技术写作者,以及任何被“格式反复调整”折磨过的人。哪怕你只是想写一份漂亮的简历,LaTeX 也能给你惊喜。
这一讲我不打算堆砌命令手册,而是按一个真实上手路径来拆:先讲清楚它的工作原理和整体设计思路,再拆解最核心的几个概念,然后带你从零跑通第一份文档,最后把我踩过的坑和排查经验整理出来。看完你应该能独立写出结构完整、能编译通过的入门文档,并且知道遇到报错该往哪儿找。
2. 先搞懂原理:LaTeX 到底在背后做了什么
2.1 内容与格式分离,是它一切优势的根源
普通文字处理软件是“所见即所得”,你看到的排版就是最终结果,格式信息藏在每个字符背后。LaTeX 走的是另一条路:你写的是逻辑结构,编译器负责把它翻译成视觉排版。比如你写\section{引言},你表达的是“这里开始一个新章节”,而不是“这里用三号黑体加粗居中”。至于章节标题最终是多大字号、什么字体、上下留多少空白,由文档类(document class)和样式文件统一决定。
这个分离带来的直接好处是:你改一次全局样式,整篇文档所有同类元素同步更新。想把全文正文字体从宋体换成思源宋体?改一行配置即可,不用逐段去调。想统一所有公式编号格式?改一个宏包参数就行。这就是为什么长文档、多人协作的文档,用 LaTeX 会越写越省心——格式的一致性由系统保证,而不是靠人肉记忆。
2.2 编译流程:你的 .tex 是怎么变成 PDF 的
很多人第一次用 LaTeX 会困惑:为什么改了内容要“编译”好几次?这背后是 TeX 引擎的多趟处理机制。简单说,一份.tex源文件要经过引擎(如 pdfLaTeX、XeLaTeX)处理,生成中间文件,再输出 PDF。关键在于交叉引用——目录、图表编号、参考文献、公式编号,这些信息在第一趟编译时还不知道,需要写到辅助文件(.aux)里,第二趟再读回来填进去。
所以标准流程通常是:第一次编译生成辅助信息,第二次编译把引用填上,如果涉及参考文献还要跑一次 BibTeX 再编译两次。这就是为什么新手常遇到“目录是空的”“引用显示问号”——不是代码错了,是编译次数不够。理解这一点,能省下大量无谓的排查时间。
2.3 引擎选择:新手到底该用哪个
这是入门第一个绕不开的决策。常见引擎有 pdfLaTeX、XeLaTeX、LuaLaTeX。我的建议很直接:中文文档一律用 XeLaTeX。原因是 pdfLaTeX 对中文支持需要额外配置字体映射,折腾且容易出错;XeLaTeX 原生支持系统字体调用,配合ctex宏包,中文排版几乎零配置。LuaLaTeX 功能更强但生态和速度上对新手不够友好,入门阶段不必碰。
| 引擎 | 中文支持 | 字体调用 | 适合场景 |
|---|---|---|---|
| pdfLaTeX | 需额外配置 | 受限 | 纯英文、老模板 |
| XeLaTeX | 原生良好 | 直接调用系统字体 | 中英文混排首选 |
| LuaLaTeX | 良好 | 灵活 | 高级定制、脚本扩展 |
选 XeLaTeX 还有一个现实理由:绝大多数中文期刊模板、学位论文模板现在都默认推荐它,你早点适应,后面套模板时不会手忙脚乱。
3. 环境搭建:把工具装对,少走一半弯路
3.1 发行版与编辑器的分工
LaTeX 的“安装”其实分两块:发行版(提供编译引擎和宏包)和编辑器(提供写代码的界面)。发行版是核心,编辑器只是外壳。发行版主流有两个:TeX Live(跨平台,宏包最全)和 MiKTeX(Windows 友好,按需下载宏包)。我推荐 TeX Live,虽然体积大(完整版几个 GB),但胜在宏包齐全,不会出现“缺包”报错。
编辑器方面,新手可以用 TeXstudio 或 VS Code 配 LaTeX Workshop 插件。TeXstudio 开箱即用,按钮齐全,适合完全没接触过命令行的人;VS Code 适合已经习惯现代编辑器的人,配置稍多但体验统一。我个人的路径是先用 TeXstudio 熟悉编译流程,再迁到 VS Code 长期使用。
3.2 安装时的几个关键选择
安装 TeX Live 时,安装程序会问你要装哪些宏包集合。如果你硬盘够,直接选完整版(full scheme),省得后面缺包时反复折腾。如果空间紧张,至少确保collection-langchinese(中文支持)和collection-latexrecommended(常用宏包)被勾选。
提示:安装路径不要带中文和空格,这是很多“莫名报错”的根源。编译器对路径中的特殊字符处理并不总是可靠。
安装完成后,打开命令行输入xelatex --version,能输出版本号就说明引擎就绪。这一步别跳过,很多“编辑器里编译失败”其实是引擎根本没装好。
3.3 第一份文档的目录结构建议
别把所有文件堆在一个文件夹里。我建议从入门就养成这个习惯:
myproject/ ├── main.tex # 主文件,负责组织 ├── chapters/ # 各章节内容 │ └── intro.tex ├── figures/ # 图片 ├── refs.bib # 参考文献 └── styles/ # 自定义样式主文件用\input{}或\include{}把各章节拼进来。这样文档变长后,你改某一章不用在几千行里翻找,编译速度也更快(\include支持只编译改动部分)。
4. 核心概念拆解:读懂一份 .tex 的骨架
4.1 导言区与正文区:文档的两大部分
任何一份.tex文件都分成两段:\documentclass到\begin{document}之间是导言区,负责全局设置;\begin{document}到\end{document}之间是正文区,写实际内容。这个划分非常重要,因为导言区只能放设置,不能放正文内容,反之正文区里临时改全局设置也不规范。
导言区典型内容:文档类、宏包、全局参数、自定义命令。正文区典型内容:章节、段落、公式、图表、引用。新手最常见的错误之一,就是把\usepackage写到了\begin{document}后面,结果报“命令未定义”。
4.2 文档类:决定文档的基本形态
\documentclass{}是整份文档的“基因”。最常用的几个:
article:短篇文档、论文、报告,无章节(chapter)层级report:中长篇,有 chapterbook:书籍,双面排版ctexart/ctexrep/ctexbook:ctex 宏包提供的中文版本,内置中文排版规则
中文文档我建议直接用ctexart这类文档类,而不是在article里手动加载 ctex 宏包,前者配置更省心。文档类后面可以跟参数,比如\documentclass[12pt,a4paper]{ctexart}表示字号 12pt、A4 纸。
4.3 宏包:按需加载的功能模块
宏包(package)是 LaTeX 的扩展机制,用\usepackage{}加载。入门阶段你只需要记住几个高频的:
| 宏包 | 作用 | 加载时机 |
|---|---|---|
| ctex | 中文支持 | 用 ctexart 时可省 |
| amsmath | 数学公式增强 | 写公式必备 |
| graphicx | 插入图片 | 有图就加 |
| geometry | 页面边距 | 想调版心就加 |
| hyperref | 超链接、PDF 书签 | 建议都加 |
加载顺序有讲究:hyperref通常放最后,因为它会重定义很多命令,放前面容易和其他宏包冲突。这是踩过坑才知道的细节。
4.4 命令与环境:LaTeX 的两种语法形态
LaTeX 的语法就两种:命令和环境。命令以反斜杠开头,如\textbf{加粗},花括号里是参数。环境用\begin{}和\end{}包裹,如\begin{equation}...\end{equation},表示“这一段按公式规则处理”。
理解这个二分法,你看任何 LaTeX 代码都不会懵:看到\就是命令,看到\begin就是环境开始。公式、列表、表格、图片、代码块,全都是环境。命令负责“点状”操作,环境负责“块状”区域。
5. 动手实操:从零写出第一份能编译的文档
5.1 最小可运行示例
先别追求复杂,把下面这段敲进去,用 XeLaTeX 编译,看到 PDF 你就成功了一半:
\documentclass[12pt,a4paper]{ctexart} \usepackage{amsmath} \usepackage{graphicx} \usepackage{geometry} \geometry{margin=2.5cm} \usepackage{hyperref} \title{我的第一份 LaTeX 文档} \author{某开发者} \date{\today} \begin{document} \maketitle \tableofcontents \newpage \section{引言} 这是第一段正文。LaTeX 会自动处理换行和段落间距, 你不需要手动敲空格对齐。 \section{数学公式} 行内公式如 $E = mc^2$,行间公式如下: \begin{equation} \int_{0}^{\infty} e^{-x^2} \, dx = \frac{\sqrt{\pi}}{2} \end{equation} \section{列表与表格} 无序列表: \begin{itemize} \item 第一项 \item 第二项 \end{itemize} \end{document}编译顺序:XeLaTeX 跑两遍(第一遍生成目录信息,第二遍填目录)。如果目录是空的,再跑一遍就好。
5.2 章节结构:让文档自动生成目录
\section{}、\subsection{}、\subsubsection{}是层级命令,ctexart里没有\chapter。这些命令不只是加个标题,它们会自动编号、自动进目录、自动生成 PDF 书签。你写\section{引言},编译器给你编号“1”,并在目录里列出。这就是“逻辑结构”的威力——你只声明层级,编号和目录全自动。
注意:
\tableofcontents生成目录,但它依赖辅助文件,所以必须编译至少两遍。很多人第一次看到空目录就以为代码错了,其实只是没编译够。
5.3 数学公式:LaTeX 的看家本领
公式分两种:行内公式用$...$,嵌在文字里;行间公式用equation环境,单独成行并自动编号。多行公式用align环境,用&对齐等号:
\begin{align} f(x) &= x^2 + 2x + 1 \\ &= (x+1)^2 \end{align}&是对齐点,\\是换行。这个环境来自amsmath宏包,所以导言区必须加载它。公式里的希腊字母用\alpha、\beta,上下标用^和_,分数用\frac{分子}{分母}。这些符号不用背,用多了自然记住,记不住就查符号表。
5.4 图片与表格:浮动体的概念
LaTeX 里图片和表格叫浮动体(float),因为它们会自动“浮动”到合适位置,而不是死板地待在你写的地方。图片用figure环境:
\begin{figure}[htbp] \centering \includegraphics[width=0.6\textwidth]{figures/demo.png} \caption{示例图片} \label{fig:demo} \end{figure}[htbp]是位置建议:here、top、bottom、page,编译器会按优先级尝试。\caption生成图注并自动编号,\label给图起个引用名,正文里用\ref{fig:demo}引用,编号自动更新。表格用tabular环境配合table浮动体,列格式l/c/r表示左/中/右对齐。
5.5 参考文献:BibTeX 的自动化引用
参考文献是 LaTeX 最省心的地方之一。你建一个.bib文件,每条文献一个条目:
@article{example2024, author = {某作者}, title = {某篇论文标题}, journal = {某期刊}, year = {2024} }正文里用\cite{example2024}引用,编译时自动生成编号和文末列表。编译流程是:XeLaTeX → BibTeX → XeLaTeX → XeLaTeX,四步走。少一步引用就显示问号。这个流程第一次会觉得很繁琐,但一旦跑通,后面加文献就是复制粘贴的事。
6. 常见报错与排查:新手最容易卡的地方
6.1 报错信息怎么读
LaTeX 的报错信息有个特点:真正的错误往往在报错行的前面几行。因为编译器是读到某处才发现“前面有个括号没闭合”。所以看到报错,先往上翻几行找未闭合的{}或\begin。另外,报错信息里的行号是源文件行号,但有时因为宏包展开会偏移,别死盯行号,看错误类型更靠谱。
6.2 高频问题速查表
| 现象 | 常见原因 | 解决方向 |
|---|---|---|
| 目录为空 | 编译次数不够 | 再编译一遍 |
| 引用显示问号 | 未跑 BibTeX 或次数不够 | 完整四步编译 |
| 中文不显示/乱码 | 用了 pdfLaTeX | 换 XeLaTeX |
| 缺宏包报错 | 发行版未装该包 | 用包管理器安装 |
| 图片找不到 | 路径或格式问题 | 检查相对路径、用 PNG/PDF |
| 公式编号错乱 | 编译辅助文件残留 | 清理 .aux 后重编 |
6.3 几个我踩过的坑
第一个坑:文件名和路径带中文或空格。编译器对这类路径处理不稳定,报错信息还特别隐晦。解决办法就是全用英文小写加下划线。
第二个坑:宏包冲突。两个宏包都重定义了同一个命令,就会报“already defined”。常见于hyperref和其他宏包。解决办法是调整加载顺序,把hyperref放最后,或者用\usepackage{包名}的选项禁用冲突功能。
第三个坑:忘记加载 amsmath 就用 align。报错说align未定义,其实不是拼写问题,是宏包没加载。这类“命令未定义”的报错,第一反应应该是“我加载对应宏包了吗”。
提示:遇到实在搞不定的报错,把
.aux、.log等中间文件全删掉,重新编译一次。很多诡异问题源于中间文件残留了旧信息。
7. 进阶方向与效率技巧
7.1 自定义命令:把重复劳动消灭掉
如果你发现自己反复写同一串命令,就该定义自己的命令了。在导言区写:
\newcommand{\R}{\mathbb{R}} \newcommand{\norm}[1]{\left\lVert #1 \right\rVert}之后正文里\R就代表实数集符号,\norm{x}就生成范数。这不仅省打字,更重要的是保证全文符号一致——哪天想改符号样式,改一处即可。这是 LaTeX 相比手写排版的又一大优势。
7.2 模板复用:站在别人的肩膀上
入门之后,最快的提升方式是找一份成熟模板来读。学位论文模板、期刊模板、简历模板,网上都有开源版本。读模板时重点看三处:导言区加载了哪些宏包、自定义了哪些命令、正文如何组织。你会发现,复杂文档的骨架其实和你的第一份文档一模一样,只是宏包更多、自定义更细。
7.3 版本管理与协作
.tex是纯文本,天生适合用 Git 管理。每次大改前提交一次,改崩了随时回退。多人协作时,把内容拆成多个.tex文件,每人负责不同章节,冲突概率大大降低。这也是“内容与格式分离”带来的额外红利——格式文件由一人维护,其他人只管写内容。
8. 我个人的上手体会
回头看,LaTeX 入门最大的门槛不是命令多,而是思维方式的切换。前一两周你会觉得“这比普通软件麻烦多了”,但当你第一次体验到“改一处样式全文同步”“公式编号全自动”“参考文献一键生成”时,就会明白前面那点学习成本有多值。我的建议是别一上来就啃厚手册,先照着最小示例跑通,然后拿自己手头一份真实文档去改写,遇到问题再查。真实需求驱动下的学习,效率比系统啃书高得多。
最后分享一个小技巧:把编译快捷键设成顺手的位置,养成“改一点就编译一次”的习惯。LaTeX 的报错定位依赖编译,频繁编译能让你第一时间发现错误,而不是攒了一堆问题后面对满屏报错无从下手。入门阶段,跑通比优雅重要,先让文档能编译出来,再慢慢追求精致。