LaTeX 入门 · 第1篇 认识 LaTeX 与基本语法

3612 字
18 分钟
LaTeX 入门 · 第1篇 认识 LaTeX 与基本语法

0. 先搞清楚一件事:LaTeX 是怎么工作的#

写 Word 时,敲一个字,屏幕上立刻显示一个字。LaTeX 不是这样,它的工作方式分三步:

LaTeX 工作流程:源文件经过编译引擎生成 PDF

纯文本写一个 .tex 源文件(内容是带标记的文字),再用编译引擎(pdflatex / xelatex)把它编译成 .pdf。编译过程中还会产生一些辅助文件(.aux.log 等),服务于编译本身;最终交付阅读的只有那个 PDF。

这张图是后面所有操作的框架。


1. TeX 与 LaTeX 是什么#

TeX 是高德纳(Donald E. Knuth)从 1977 年开始开发的排版系统,特别擅长处理数学公式和结构复杂的长篇文档。(一个有趣的小细节:TeX 的版本号是圆周率 3.14159265——每修一个 bug 版本号就往圆周率后推一位,作者的数学品味可见一斑。)

LaTeX 是 Leslie Lamport 在 TeX 之上做的一层封装。可以粗略地理解为:LaTeX 把 TeX 难记的底层命令,包装成了一套更易用的命令集。作者写 LaTeX 命令描述文档结构,底层的 TeX 引擎负责真正的排版。

1.1 核心理念:内容与格式分离#

这是 LaTeX 和 Word 最根本的区别,用一张图说清楚:

Word 所见即所得 vs LaTeX 内容与格式分离
  • Word:直接选中文字,用工具栏调字体、字号、颜色,屏幕上看到的就是最终效果——这叫「所见即所得」(WYSIWYG)。代价是格式和内容混在一起,改样式要满文档地手动调。
  • LaTeX:只声明结构——「这是一级标题」「这是正文」「这是公式」——具体的字体、间距、编号、页面布局全部交给文档类统一处理。源代码只关心「写什么」,不关心「长什么样」。

类比:LaTeX 之于 Word,就像 HTML + CSS 之于 Dreamweaver。.tex 源文件是 HTML(结构和语义),文档类和宏包是 CSS(样式)。不会在 HTML 里写死每个字的颜色,同理也不该在 LaTeX 里手动调每个标题的字号。

这种分离带来的好处是:一旦样式设定好,全文统一;要换风格(比如从论文模板换成幻灯片),只需换文档类,内容几乎不用动。


2. 第一段 LaTeX 代码#

最简单的 LaTeX 源文件:

\documentclass{article}
\begin{document}
``Hello, world!'' from \LaTeX.
\end{document}

保存为 helloworld.tex,用 pdflatex 编译,得到:

Hello world 英文版渲染效果
Hello world 英文版渲染效果

即使暂时看不懂每个符号,也能注意到两件事:

  • 左双引号是 两个反引号 连写,右双引号是 两个直引号 连写。
  • LaTeX 里 没有直引号,要打出 “Hello” 这样的左右双引号,必须用 反引号 + 直引号 的组合。
  • 例子(用四反引号围栏保证原样显示):
``Hello''

渲染后就是左右弯引号 "Hello"

  • \LaTeX 输出了排版规范的「LaTeX」标志——这就是一个命令

2.1 中文文档#

如果文档包含中文,把 \documentclass{article} 换成 ctexart,并用 xelatex 编译:

\documentclass{ctexart}
\begin{document}
你好,\LaTeX{} 世界!
\end{document}

用 xelatex 编译后的效果:

Hello world 中文版渲染效果
Hello world 中文版渲染效果

编译器要选对:纯英文文档用 pdflatex 即可;含中文的文档用 xelatex,并配合 ctexart / ctexbook / ctexrep 文档类(第 5 篇会详细讲中文处理)。注意 \LaTeX 后面那个 {}——它不是装饰,下一节会解释为什么需要它。


3. LaTeX 的语法:命令、环境、注释#

这一节是本篇的重点,掌握了它,后续所有篇章的代码都能看懂结构。

先看这张「源码解剖图」,把一段典型 LaTeX 代码的每个组成部分用颜色区分出来:

LaTeX 源码结构解剖:命令、参数、环境、注释

下面逐个讲解。

3.1 命令:以反斜杠开头#

LaTeX 命令都以 \(反斜杠)开头,后面跟命令名。命令名区分大小写\LaTeX 是正确的,写成 \Latex\LaTex 都会报错。

命令可以带参数:

  • 必选参数用花括号 { } 包裹,如 \documentclass{article} 里的 {article}
  • 可选参数用方括号 [ ] 包裹,如 \documentclass[11pt]{article} 里的 [11pt]

3.2 空格吞噬:新手第一个坑#

看这个例子:

Shall we call ourselves \TeX users?
Shall we call ourselves \TeX{} users?
Shall we call ourselves \TeX\ users?

渲染效果:

空格吞噬问题对比
空格吞噬问题对比

问题出在第一行:\TeX 是一个命令,LaTeX 会把它后面的空格「吃掉」(当作命令名结束的标志),结果「TeX」和「users」粘在了一起。

解决办法有两种:

  1. \TeX{}:空花括号强行结束命令,后面的空格保留;
  2. \TeX\ :反斜杠加空格,显式插入一个空格。

经验法则:任何以命令结尾、后面紧跟普通文字的地方,都要留意空格。用 {} 是最安全的写法,这也是前面 \LaTeX{} 里那个空花括号的用途。

3.3 特殊字符:10 个需要转义的符号#

LaTeX 里有 10 个保留字符,它们有特殊含义,不能直接打出来。要输出它们本身,需要用反斜杠「转义」:

LaTeX has 10 reserved characters:
\# \$ \% \& \_ \{ \} \textasciitilde{} \textasciicircum{} \textbackslash{}
In practice:
Price: \$100, discount 30\%, item \#42.
Underscore in code: my\_variable.

渲染效果:

10 个特殊字符的转义写法
10 个特殊字符的转义写法

想要输出写法说明
$\$数学公式定界符
%\%注释符
&\&表格对齐符
#\#宏参数符
_\_数学下标
{ }\{ \}参数分组符
~\textasciitilde{}\~{}不可断空格
^\textasciicircum{}\^{}数学上标
\\textbackslash{}命令引导符

\^~ 不能简单用 \ 转义(因为 \ 后面跟它们本身有别的含义),要用上表中的命令形式。

3.4 环境:成对出现的 begin / end#

有些排版效果需要作用于一段内容,这时用环境

\begin{environment name}[optional arguments]{mandatory arguments}
...内容...
\end{environment name}

\begin\end 必须成对出现,且环境名一致。环境可以嵌套。后面会大量用到的列表、公式、图片环境,都是这种结构。

3.5 注释:百分号之后的内容#

% 之后到行尾的内容是注释,编译时会被忽略。这和编程语言里的注释一样,用来给源代码写说明:

\documentclass{article} % 指定文档类型为普通文章
\usepackage{geometry} % 加载页面设置宏包

4. 一份 LaTeX 文档的骨架#

把前面的内容拼起来,一份完整的 LaTeX 文档长这样:

LaTeX 文档骨架:导言区与正文区

一份文档被 \begin{document}\end{document} 分成两个区域:

  • 导言区(Preamble):从 \documentclass\begin{document} 之间。这里写的是设置——指定文档类、加载宏包、定义标题作者等。导言区的内容不会直接出现在 PDF 里
  • 正文区(Document body)\begin{document}\end{document} 之间。这里写的是真正会出现在 PDF 里的内容

\end{document} 之后的所有内容都会被忽略,可以在文档末尾随意写备忘。

常见困惑:为什么 \section{...} 没出现在 PDF 里?——多半是写在了导言区(\begin{document} 之前)。


5. 文档类与常用选项#

\documentclass{...} 是每个文档的第一条命令,决定整个文档的基本样式。完整语法是:

\documentclass[options]{class-name}

5.1 常用文档类#

文档类适用场景
article短篇文章、报告、论文(最常用)
report较长的报告,含章节
book书籍,含章节、前言、附录,默认双面排版
proc会议论文集
slides幻灯片(现已多用 Beamer 替代)
minimal最小文档,常用于测试(MWE)

中文文档对应地把它们换成 ctexart / ctexrep / ctexbook

5.2 常用选项#

options 是逗号分隔的键值,用来微调文档类的默认行为。比如:

\documentclass[11pt,twoside,a4paper]{article}

这条命令把文档设为 11 磅字号、双面排版、A4 纸张。完整选项表:

选项含义默认值
10pt / 11pt / 12pt基础字号10pt
a4paper / letterpaper / a5paper纸张大小letterpaper(美制)
twoside / oneside单面/双面排版(双面会区分奇偶页边距)article/report 用 oneside,book 用 twoside
onecolumn / twocolumn单栏/双栏onecolumn
landscape横向纸张纵向
titlepage / notitlepage标题是否单独成页article 为 notitlepage,report/book 为 titlepage
fleqn公式左对齐(默认居中)居中
leqno公式编号在左侧(默认右侧)右侧
draft / final草稿模式(会标出排版溢出的行)/ 正式模式final

实际效果对比,下面这个文档用了 11pt, twoside, a4paper

\documentclass[11pt,twoside,a4paper]{article}
\usepackage[margin=2.5cm]{geometry}
\title{Document Class Options Demo}
\author{Author Name}
\date{\today}
\begin{document}
\maketitle
\section{What Changed?}
This document uses three options...
\end{document}

渲染效果(注意字号比默认的 10pt 大):

文档类选项效果:11pt 字号
文档类选项效果:11pt 字号

draft 选项会在 Overfull \hbox 的右端添加黑色标记,帮助定位水平溢出问题:

\documentclass[draft]{article}
\begin{document}
This is a normal line of text.
ThisIsAnExtremelyLongWordThatCannotBeBrokenAutomaticallyByLaTeX.
\end{document}

draft 模式:溢出行标出黑色方块
draft 模式:溢出行标出黑色方块

注意:如果内容溢出过多,标记本身可能落在页面范围之外,因此在 PDF 中看不到。在 LaTeX 标准 article 类中,draft 选项会自动执行 \setlength\overfullrule{5pt}——也就是为溢出的行添加宽度为 5pt 的黑色标记。如果你觉得默认 5pt 不够明显,可以手动改大,比如 \overfullrule=10pt。但加宽标记不能解决标记跑到页面外的问题,测试内容仍然不能溢出太多。

实用建议:正式投稿前用 final;写作过程中临时打开 draft,能快速发现哪些行超出了页边距。


6. 宏包:扩展 LaTeX 的能力#

LaTeX 本身只提供基础功能。要排公式表、插图片、设页面、做幻灯片……都靠加载宏包(package)。加载命令是:

\usepackage[options]{package-name}

多个无选项的宏包可以写在一行:

\usepackage{tabularx, makecell, multirow}

\usepackage 必须写在导言区\begin{document} 之前)。后面几乎每一篇都会加载新的宏包。

6.1 texdoc:随时查阅宏包文档#

安装了 TeX Live 后,系统里其实自带了几乎所有常用宏包的官方文档。在终端输入:

texdoc ctex

就会弹出 ctex 宏包的使用手册 PDF。把 ctex 换成任何宏包名都行,比如 texdoc geometrytexdoc amsmathtexdoc hyperref

这是学 LaTeX 最被低估的技能。遇到不会用的宏包,第一反应应该是 texdoc 包名,比搜索引擎更快更准。


7. 让 LaTeX 自动生成目录#

写长文档时,目录几乎必不可少。LaTeX 生成目录只需一条命令:

\tableofcontents

把它放在正文里希望目录出现的位置(通常是 \maketitle 之后)。LaTeX 会自动扫描全文的 \section\subsection 等命令,生成带页码的目录:

\documentclass{article}
\usepackage[margin=2.5cm]{geometry}
\title{Generating a Table of Contents}
\author{Author Name}
\date{\today}
\begin{document}
\maketitle
\tableofcontents
\section{Introduction}
This is the introduction section.
\subsection{Background}
Some background information here.
\subsection{Motivation}
Why we study this topic.
\section{Methodology}
How we approach the problem.
\subsection{Data Collection}
Details about data.
\section{Results}
The final results of our study.
\end{document}

自动生成的文档目录
自动生成的文档目录

目录必须编译两次。 第一次编译时,LaTeX 把各级标题和页码写进辅助文件 .aux / .toc;第二次编译时才读这些信息生成目录。所以第一次编译出来的目录页码是空的或旧的——再编译一次就好了。这也是前面第 0 节那张流程图里「辅助文件」的作用:它们在多次编译之间传递信息。

VS Code + LaTeX Workshop 默认配置下,latexmk 会自动处理多次编译。但在命令行手动编译时,目录相关的内容都要编译两遍。


8. 编译出错了怎么办#

学 LaTeX 必然会碰到编译报错——这是常态。关键是学会读错误信息

8.1 一个典型的报错#

下面这段代码用了一个不存在的命令 \nonexistentcommand

\documentclass{article}
\begin{document}
This line uses a command that does not exist: \nonexistentcommand here.
\end{document}

编译时 LaTeX 会停下来,打印类似这样的信息:

! Undefined control sequence.
l.4 ...nd that does not exist: \nonexistentcommand
here.

读报错信息抓三个要点:

  1. 错误类型! Undefined control sequence——「未定义的命令」,说明用了一个 LaTeX 不认识的命令(多半是拼写错误,或忘了加载某个宏包)。
  2. 行号l.4——第 4 行。
  3. 上下文:下面两行展示了出错位置,第一个换行处就是 LaTeX 卡住的地方。

8.2 命令行里的交互提示#

在命令行直接编译时,遇到错误 LaTeX 会停在 ? 提示符等待输入:

  • 回车:忽略这个错误,继续编译(可能连锁报更多错);
  • 输入 x 然后回车:放弃编译,退出;
  • Ctrl + C:强制中断。

排查问题时,建议先输入 x 退出,修好源代码再重新编译,而不是一路回车硬编译——那样会产生一堆连锁错误,反而看不清真正的问题在哪。

8.3 在 VS Code 里看错误#

LaTeX Workshop 会把错误信息收集到「问题」面板和编译日志里,并标红出错的行。比起命令行,定位更直观。

8.4 常见错误 Top 5#

报错信息原因排查方向
! Undefined control sequence用了未定义的命令检查拼写;检查是否忘了 \usepackage
! Missing $ inserted在正文里用了数学符号(如 _ ^数学符号要放在 \( \)\[ \]
! LaTeX Error: File 'xxx' not found引用了不存在的文件(图片、bib 等)检查路径和文件名,注意大小写
! Missing \begin{document}导言区写了正文内容把内容移到 \begin{document} 之后
! LaTeX Error: Environment xxx undefined用了未定义的环境检查环境名拼写;检查是否忘了加载宏包

一条总原则:错误信息里的第一个 ! 通常就是真正的病因,后面的连锁错误修好第一个后往往自动消失。


9. 小结#

本篇覆盖了看懂任何 LaTeX 代码的全部基础:

  • TeX / LaTeX 的关系:LaTeX 是 TeX 的封装,核心思想是内容与格式分离;
  • 工作流程:写 .tex 源文件 → 编译 → 得到 .pdf
  • 语法三件套:命令(\name)、环境(\begin..\end)、注释(%),外加参数({ } 必选、[ ] 可选);
  • 文档骨架:导言区写设置,正文区写内容,以 \begin{document} 为界;
  • 文档类与选项\documentclass[options]{class} 决定基本样式;
  • 宏包\usepackage 扩展功能,配合 texdoc 查文档;
  • 目录\tableofcontents 一行搞定,但要编译两次;
  • 错误处理:抓「错误类型 + 行号 + 上下文」,先修第一个 !

下一篇开始真正动手写内容——文字、段落、标题、章节、列表,搭起一篇完整文档的骨架。


本系列基于《一份(不太)简短的 LaTeX2e 介绍》(lshort-zh-cn)整理,辅以实战讲解和渲染示例。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
LaTeX 入门 · 第1篇 认识 LaTeX 与基本语法
https://xingyun8.fun/posts/latex-basics/
作者
nanashi
发布于
2026-07-06
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
nanashi
众生皆苦,唯有自渡
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
20
分类
3
标签
37
总字数
27,069
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.8
文章许可
CC BY-NC-SA 4.0