基础语法
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 支持多种绝对长度单位:
| 单位 | 名称 | 换算关系 | 说明 |
|---|---|---|---|
pt | 点 | 1pt ≈ 0.351mm | 传统排版单位,TeX 的基本单位 |
pc | 皮卡 | 1pc = 12pt | 传统排版单位 |
in | 英寸 | 1in = 72.27pt | 英制单位 |
bp | 大点 | 1bp = 1/72in ≈ 1pt | PostScript 标准,PDF 使用 |
mm | 毫米 | 1mm ≈ 2.845pt | 公制单位 |
cm | 厘米 | 1cm = 10mm | 公制单位 |
dd | 迪多 | 1dd ≈ 1.07pt | 欧洲传统排版单位 |
cc | 西塞罗 | 1cc = 12dd | 欧洲传统排版单位 |
sp | 缩放点 | 1sp = 1/65536pt | TeX 内部最小单位 |
相对长度单位
相对单位根据当前字体设置动态计算,更适合跨字体使用:
| 单位 | 含义 | 典型用途 |
|---|---|---|
em | 当前字体中字母 M 的宽度 | 水平间距、缩进 |
ex | 当前字体中字母 x 的高度 | 垂直间距 |
mu | 数学单位,1em = 18mu | 数学模式中的间距 |
为什么推荐使用相对单位?
使用 em 和 ex 定义长度,当字体大小改变时,相关间距会自动按比例调整,保持文档的视觉协调:
% 使用相对单位:改变字号时间距自动调整
\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 文档的基础。下一章将介绍文本格式化的详细内容。