跳到主要内容

基础语法

LaTeX 的语法设计遵循"内容与格式分离"的原则。掌握基础语法是编写 LaTeX 文档的关键,本章将深入讲解 LaTeX 的核心语法概念。

理解 LaTeX 的工作方式

LaTeX 文档本质上是一个纯文本文件,包含文档内容和排版指令。编译器(如 pdfLaTeX、XeLaTeX 或 LuaLaTeX)会读取这个文件,根据指令生成格式化的输出文档(通常是 PDF)。

这种工作方式带来几个重要的优势:

  • 可版本控制:纯文本格式便于使用 Git 等工具管理
  • 可编程:可以定义宏、条件判断、循环等
  • 跨平台:同一份源文件在不同操作系统上产生相同输出
  • 可重复:任何时候重新编译都能得到一致的结果

特殊字符详解

LaTeX 预留了若干字符用于特殊目的,这些字符被称为"保留字符"或"特殊字符"。理解它们的作用对于正确编写文档至关重要。

特殊字符及其含义

字符名称LaTeX 中的含义示例场景
\反斜杠命令前缀,所有命令都以反斜杠开头\textbf{}
{ }花括号分组,限定命令作用范围或传递参数{\bfseries 粗体}
%百分号注释开始,该行后续内容被忽略% 这是注释
$美元符号进入或退出数学模式$E=mc^2$
&和号表格中对齐符,分隔列表格、align 环境
_下划线数学模式中的下标$x_i$
^脱字符数学模式中的上标$x^2$
#井号宏定义中的参数占位符\newcommand{\cmd}[1]{#1}
~波浪号不间断空格,防止在此处换行图~1

为什么需要特殊字符?

这些特殊字符的设计有其深层次的原因:

反斜杠 \:作为命令前缀,它明确标记了"这里开始是一个排版指令"。这种设计让 LaTeX 源文件具有良好的可读性——一眼就能区分命令和普通文本。

花括号 {}:它们有两个关键作用。一是界定命令参数的范围,如 \textbf{粗体文本} 明确表示"粗体"命令作用于"粗体文本"这几个字。二是创建分组,在组内设置的格式不会影响组外,例如 {\bfseries 这段是粗体} 这段恢复正常

百分号 %:注释功能让源文件可以包含说明性文字而不影响最终输出。这在调试时特别有用,可以暂时禁用某些代码而不删除它们。

美元符号 $:数学公式是 LaTeX 的核心优势之一。$ 符号清晰地划分了"数学世界"和"文本世界"的边界,两套排版规则截然不同。

和号 &:在表格环境和多行公式对齐中,& 标记对齐位置。这是 TeX 设计中"制表符"概念的延续。

下划线 _ 和脱字符 ^:数学公式中的下标和上标极为常见,这两个符号简洁直观。但必须注意它们只能在数学模式中使用,否则会报错。

输出特殊字符

当需要在文档中显示这些特殊字符本身时,需要使用转义命令:

% 在正文中输出特殊字符
\# \$ \% \& \_ \{ \}

% 波浪号(作为字符,而非不间断空格)
\textasciitilde

% 脱字符(作为字符)
\textasciicircum

% 反斜杠
\textbackslash

最佳实践:在输入文件名、价格、编程代码等场景时,经常需要输出这些特殊字符。建议熟记常用的转义方式。

% 实际应用示例
文件名为 \texttt{document\_v1.tex},售价 \$19.99。
电子邮件:user\@example.com(需要转义 @)

注释机制

单行注释

使用 % 开始单行注释,注释内容不会出现在最终输出中:

这是正文内容。% 这是注释,编译时会被忽略
这也是正文内容。

注释的一个实用技巧是在调试时"临时删除"代码:

\section{实验结果}
% 以下段落暂时不显示
% 实验表明我们的方法在准确率上提升了 15\%。
% 与基准方法相比,我们的方法在处理大规模数据时表现更优。

多行注释

使用 verbatim 宏包的 comment 环境实现多行注释:

\usepackage{verbatim}

\begin{comment}
这段内容跨越多行,
全部会被忽略,
适合临时禁用大段代码。
\end{comment}

条件注释

在宏包开发中,注释还可以配合条件判断使用:

\newif\ifdebug
\debugtrue % 开启调试模式

\ifdebug
% 调试时显示的内容
调试信息:当前变量值是 \the\value{section}
\fi

命令语法

命令的基本形式

LaTeX 命令以反斜杠 \ 开头,有以下几种基本形式:

\command                    % 无参数命令
\command{argument} % 带必选参数
\command[option]{argument} % 带可选参数和必选参数
\command{arg1}{arg2} % 多个参数

命令名称规则

命令名称的组成有一定规则:

  • 命令名只能包含字母,如 \textbf\section
  • 命令名区分大小写,\Textbf\textbf 是不同的
  • 命令名后的非字母字符会终止命令名

理解最后一条规则很重要:

\textbf粗体文本        % 错误!命令名是 \textbf,后面紧跟非字母
\textbf{粗体文本} % 正确:参数用花括号包围
\textbf 粗体文本 % 正确:空格终止命令名,但只作用于"粗"字

参数类型

必选参数:用花括号 {} 包围,必须提供:

\textbf{必选参数}
\section{节标题}

可选参数:用方括号 [] 包围,可以省略,通常有默认值:

\documentclass{article}           % 无可选参数
\documentclass[12pt]{article} % 指定 12pt 字号
\includegraphics[width=5cm]{img} % 指定图片宽度

星号变体:许多命令有带星号的变体,通常表示"不编号":

\section{有编号的节}      % 输出:1 有编号的节
\section*{无编号的节} % 输出:无编号的节

命令的分类

根据作用范围,命令可以分为两类:

声明式命令:改变后续内容的格式,直到组结束:

{\bfseries 这段是粗体,} 这段恢复正常。
{\centering 这段居中,} 这段恢复正常对齐。

文本式命令:带参数,只作用于参数内容:

\textbf{只有这里是粗体},这里正常。
\centerline{只有这一行居中}

常用命令速查

文档结构

\documentclass{article}   % 声明文档类
\usepackage{amsmath} % 加载宏包
\begin{document} % 文档开始
\end{document} % 文档结束

章节命令

\part{部分}               % 仅 book/report 类
\chapter{章} % 仅 book/report 类
\section{节} % 一级标题
\subsection{小节} % 二级标题
\subsubsection{子小节} % 三级标题
\paragraph{段落} % 段落标题
\subparagraph{子段落} % 子段落标题

文本格式

\textbf{粗体}
\textit{斜体}
\underline{下划线}
\texttt{等宽字体}
\textsc{小型大写}

环境语法

环境的基本形式

环境用于创建具有特定格式的区域,基本语法为:

\begin{environment}
内容
\end{environment}

% 带可选参数
\begin{environment}[options]
内容
\end{environment}

环境的作用

环境相当于一个自动的"分组",其内部设置的格式不会影响外部:

% 列表环境
\begin{itemize}
\item 第一项
\item 第二项
\end{itemize}

% 居中环境
\begin{center}
这段内容居中显示
\end{center}

环境嵌套

环境可以嵌套,但必须正确配对:

\begin{itemize}
\item 第一项
\begin{enumerate}
\item 子项 1
\item 子项 2
\end{enumerate}
\item 第二项
\end{itemize}

常见错误:环境未正确闭合或嵌套顺序错误。

% 错误示例
\begin{itemize}
\item 内容
\end{enumerate} % 错误:开始和结束的环境不匹配

\begin{itemize}
\begin{enumerate}
\end{itemize} % 错误:嵌套顺序错误
\end{enumerate}

分组机制

为什么需要分组?

分组是 LaTeX 中控制格式作用范围的核心机制。在组内设置的格式、定义的命令、修改的计数器等,都不会影响组外。

花括号分组

最简单的分组方式是使用花括号:

{\bfseries 这段是粗体} 这段恢复正常

{\Large 大号字体} 正常大小

{\color{red} 红色文字} 正常颜色

环境分组

每个环境本身就是一个分组:

\begin{center}
\bfseries 居中的粗体文本
\end{center}
% 离开环境后,\bfseries 的效果消失

分组的实际应用

临时改变格式

正文使用默认字体,{\small 这部分用小号字},继续正文。

保护参数中的格式

% 在章节标题中临时改变格式
\section{关于 \texttt{printf} 函数}

定义局部命令

{
\newcommand{\R}{\mathbb{R}}
实数集 $\R$ 的定义
}
% 组外 \R 未定义

长度与单位

绝对长度单位

LaTeX 支持多种绝对长度单位:

单位名称换算关系说明
pt1pt ≈ 0.351mm传统排版单位,TeX 的基本单位
pc皮卡1pc = 12pt传统排版单位
in英寸1in = 72.27pt英制单位
bp大点1bp = 1/72in ≈ 1ptPostScript 标准,PDF 使用
mm毫米1mm ≈ 2.845pt公制单位
cm厘米1cm = 10mm公制单位
dd迪多1dd ≈ 1.07pt欧洲传统排版单位
cc西塞罗1cc = 12dd欧洲传统排版单位
sp缩放点1sp = 1/65536ptTeX 内部最小单位

相对长度单位

相对单位根据当前字体设置动态计算,更适合跨字体使用:

单位含义典型用途
em当前字体中字母 M 的宽度水平间距、缩进
ex当前字体中字母 x 的高度垂直间距
mu数学单位,1em = 18mu数学模式中的间距

为什么推荐使用相对单位?

使用 emex 定义长度,当字体大小改变时,相关间距会自动按比例调整,保持文档的视觉协调:

% 使用相对单位:改变字号时间距自动调整
\setlength{\parindent}{2em} % 首行缩进约两个字符
\setlength{\itemsep}{1ex} % 列表项间距约一个字符高度

% 使用绝对单位:改变字号时可能出现不协调
\setlength{\parindent}{20pt} % 固定 20pt

长度命令

设置长度

\setlength{\parindent}{2em}      % 设置段落缩进
\setlength{\textwidth}{15cm} % 设置文本宽度

增加长度

\addtolength{\parindent}{1em}    % 在原基础上增加

定义新长度

\newlength{\mywidth}             % 声明新长度变量
\setlength{\mywidth}{5cm} % 设置值

测量长度

\settowidth{\mywidth}{示例文本}  % 测量文本宽度
\settoheight{\mywidth}{示例文本} % 测量文本高度
\settodepth{\mywidth}{示例文本} % 测量文本深度

空白处理

LaTeX 对空白有特殊的处理规则,理解这些规则可以避免许多困惑。

空格处理

基本规则:多个连续空格被视为一个空格,行首的空格被忽略。

这是一个空格。
这是 多个空格,但显示为一个。

这行前面有空格,但会被忽略。

命令后的空格:命令名后的空格会被吞掉:

\LaTeX 是一个排版系统。    % 输出:LaTeX是一个排版系统
\LaTeX\ 是一个排版系统。 % 正确:LaTeX 是一个排版系统
\LaTeX{} 是一个排版系统。 % 正确:LaTeX 是一个排版系统

换行与分页

换行命令

\\           % 换行
\\[1cm] % 换行并增加 1cm 垂直间距
\newline % 换行(在段落内)
\linebreak % 允许在此处换行(会拉伸前面的行)

分页命令

\newpage     % 开始新页
\clearpage % 输出所有浮动体后开始新页
\pagebreak % 允许在此处分页
\nopagebreak % 阻止在此处分页

空格命令

\quad        % 1em 宽度(约一个 M 字母宽)
\qquad % 2em 宽度
\enspace % 0.5em 宽度
\ % 普通空格(反斜杠后跟空格)
~ % 不间断空格,防止在此换行

数学模式中的空格

$\,$         % 窄空格(3/18 em)
$\:$ % 中等空格(4/18 em)
$\;$ % 较宽空格(5/18 em)
$\!$ % 负空格(-3/18 em)

不间断空格的应用

波浪号 ~ 创建不间断空格,防止在该位置换行:

% 防止编号与单位分开
第~1~章
图~2
表~3

% 防止人名分开
Donald~E.~Knuth

% 防止引用分开
参见文献~[1]

计数器

LaTeX 内部使用计数器来跟踪页码、章节号、图表编号等。理解计数器机制有助于自定义编号格式。

内置计数器

计数器用途
page页码
part部分编号
chapter章编号
section节编号
subsection小节编号
figure图编号
table表编号
equation公式编号
footnote脚注编号

计数器操作

\setcounter{page}{1}       % 设置页码为 1
\addtocounter{page}{10} % 页码加 10
\stepcounter{section} % 节编号加 1(触发相关计数器重置)
\refstepcounter{figure} % 编号加 1 并设置为引用目标

\value{page} % 获取页码数值(用于计算)
\thepage % 显示页码(格式化输出)

计数器显示格式

\arabic{counter}    % 阿拉伯数字:1, 2, 3
\roman{counter} % 小写罗马数字:i, ii, iii
\Roman{counter} % 大写罗马数字:I, II, III
\alph{counter} % 小写字母:a, b, c
\Alph{counter} % 大写字母:A, B, C
\fnsymbol{counter} % 符号:*, †, ‡, §, ¶, ...

自定义计数器

\newcounter{example}[section]          % 创建计数器,随 section 重置
\setcounter{example}{0} % 设置初始值
\renewcommand{\theexample}{\thesection.\arabic{example}} % 显示格式

\refstepcounter{example} % 增加并允许引用
例~\theexample % 显示编号

盒子概念

盒子是 TeX 排版的基础单元。每个字符、单词、段落都是一个盒子。理解盒子概念有助于处理复杂的排版问题。

基本盒子命令

\mbox:创建不换行的盒子

\mbox{这些文字不会分开}

% 实际应用:防止连字符
\mbox{hyphen-ation} % hyphen-ation 不会在连字符处换行

\fbox:创建带边框的盒子

\fbox{带边框的文字}

% 调整边框距离
\setlength{\fboxsep}{1em} % 内容与边框的距离
\setlength{\fboxrule}{2pt} % 边框粗细
\fbox{调整后的边框}

\makebox:创建指定宽度的盒子

\makebox[5cm]{内容}           % 5cm 宽的盒子
\makebox[5cm][l]{左对齐} % 左对齐
\makebox[5cm][r]{右对齐} % 右对齐
\makebox[5cm][c]{居中} % 居中
\makebox[5cm][s]{分散对齐} % 分散对齐

\framebox:带边框的 makebox

\framebox[5cm]{内容}
\framebox[5cm][c]{居中内容}

段落盒子

\parbox:创建段落盒子,支持自动换行

\parbox{5cm}{
这是一段较长的文字,
会在指定宽度内自动换行。
可以包含多个段落。
}

minipage 环境:功能更强大,支持更多内容

\begin{minipage}[位置]{宽度}
可以包含列表、图片、表格等复杂内容。
位置选项:t(顶部对齐)、c(居中)、b(底部对齐)
\end{minipage}

盒子的实际应用

并排显示

\begin{figure}
\centering
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{left.png}
\caption{左图}
\end{minipage}
\hfill
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{right.png}
\caption{右图}
\end{minipage}
\end{figure}

常见错误与解决

错误1:特殊字符未转义

! Missing $ inserted.

原因:在文本模式中使用了 _^

% 错误
变量 x_1 的值

% 正确
变量 $x_1$ 的值

错误2:花括号不匹配

! Too many }'s.
! Missing } inserted.

解决:使用支持括号配对的编辑器,仔细检查每个 \begin 是否有对应的 \end

错误3:命令拼写错误

! Undefined control sequence.

解决:检查命令拼写,确认宏包是否已加载。

错误4:空格消失

% 问题
\LaTeX是排版系统。 % 输出:LaTeX是排版系统

% 解决
\LaTeX\ 是排版系统 % 或
\LaTeX{} 是排版系统

小结

本章深入讲解了 LaTeX 的基础语法:

  • 特殊字符:理解每个保留字符的含义和转义方法
  • 注释机制:单行注释和多行注释的使用
  • 命令语法:命令的形式、参数类型和作用范围
  • 环境语法:环境的嵌套和配对
  • 分组机制:控制格式作用范围的核心方法
  • 长度单位:绝对单位和相对单位的选择
  • 空白处理:空格、换行、分页的规则
  • 计数器:编号系统的底层机制
  • 盒子概念:排版的基本单元

掌握这些基础知识,是编写复杂 LaTeX 文档的基础。下一章将介绍文本格式化的详细内容。