1. LaTeX 的基本概念 #
1.1 概述 #
1.1.1 TeX #
TeX 是高德纳(Donald E. Knuth)为文字和数学公式开发的排版系统。它处理字形、间距、断行和分页等底层工作。“TeX”中的最后一个音接近“赫”,不是英语字母 X 的读音。
1.1.2 LaTeX #
LaTeX 最初由 Leslie Lamport 开发,是建立在 TeX 上的一套文档格式。作者用 \section 表达“这是一个节标题”,由文档类决定标题的字号、间距和编号。
日常使用的 LaTeX 2ε 写成纯文本时也称 LaTeX2e。它不是编辑器;TeXPage 等编辑环境负责帮助你编辑源文件、调用编译器并查看 PDF。
1.1.3 LaTeX 的优缺点 #
LaTeX 的优势是结构清晰、数学排版强、编号和引用自动化、适合复用模板。代价是需要学习命令,通常要编译后才能看到结果,排查复杂宏包冲突和重新设计版式也需要经验。
刚开始先使用合适的文档类,把内容写对。不要为了模仿某个外观而给每行文字手工添加空格、字号和换行。
1.1.4 命令行基础 #
本地编译命令通常在源文件所在目录运行。例如先用 cd 切换目录,再输入:
xelatex main.tex
文件路径含空格时用引号包裹。在 Windows 命令提示符里跨盘切换目录,可用 cd /d "D:\my-project";macOS 和 Linux 路径使用正斜线。
“找不到命令”通常表示程序未安装或不在 PATH 中,不是 LaTeX 源码错误。编辑器上的编译按钮也是在调用这些程序;在 TeXPage 中直接使用编译按钮即可。
1.2 第一次使用 LaTeX #
将以下完整代码保存为 main.tex,使用 XeLaTeX 编译:
\documentclass[UTF8,fontset=fandol]{ctexart}
\title{我的第一份文档}
\author{小林}
\date{\today}
\begin{document}
\maketitle
\section{开始}
你好,世界!这是我用 \LaTeX{} 写的第一份文档。
空一行就开始一个新段落。
\end{document}
成功后得到 main.pdf。试着修改标题、作者和一句正文,再编译一次。\today 表示编译当天的日期;\date{} 可以让标题不显示日期。
纯英文文档可以使用 article。包含中文时,本教程采用 ctexart;不要仅把中文输入到未配置中文支持的英文模板中。
1.3 LaTeX 命令和代码结构 #
1.3.1 LaTeX 命令和环境 #
命令以反斜线 \ 开头,区分大小写。命令名可以是一串字母,也可以是一个非字母字符:
这是 \textbf{加粗文字},完成度为 80\%。
花括号 {...} 一般包裹必选参数,方括号 [...] 一般包裹可选参数。星号形式通常改变命令的行为,例如 \section*{说明} 不自动编号。
字母命令会吃掉紧随其后的空格。英文单词之间要保留空格,可以写 \LaTeX{} users。只想局部改变字体时用分组:
普通文字,{\bfseries 这部分加粗},这里恢复原样。
环境由名称相同的 \begin 和 \end 配对构成:
\begin{quote}
这是一段独立的引用文字。
\end{quote}
嵌套环境要按相反顺序关闭:最后打开的环境最先关闭。大部分局部设置在分组或环境结束后恢复,但计数器等设置可能是全局的。
1.3.2 LaTeX 源代码结构 #
一份文档分为三部分:
\documentclass指定文档类。- 导言区加载宏包、定义命令、设置标题和版式。
\begin{document}与\end{document}之间是正文。
\end{document} 后的内容不会排版。\usepackage 等只能放在导言区;普通段落则应放在正文中。
1.4 LaTeX 宏包和文档类 #
1.4.1 文档类 #
\documentclass[a4paper,11pt]{article}
上面选择文章类,并设置 A4 纸和基本字号。一次编译只能有一个文档类。
| 文档类 | 用途 |
|---|---|
article / ctexart |
文章、笔记、短报告,最高常用层次为 \section。 |
report / ctexrep |
有 \chapter 的长报告。 |
book / ctexbook |
带前言、正文和后记结构的书籍。 |
beamer |
演示文稿。 |
标准文档类常见选项包括:
| 选项 | 作用 |
|---|---|
10pt、11pt、12pt |
基本字号;中文类还支持 zihao。 |
a4paper、letterpaper |
纸张大小。 |
oneside、twoside |
单面或双面版式,不是打印机设置。 |
onecolumn、twocolumn |
单栏或双栏。 |
openright、openany |
在 book/report 中控制新章的起始页。 |
titlepage、notitlepage |
标题是否单独成页。 |
fleqn、leqno |
行间公式左对齐、公式编号放左侧。 |
draft、final |
草稿或终稿;也可能影响图片和链接。 |
不同文档类不一定支持相同选项。使用期刊或学校模板时,应按模板文档填写,而不是盲目照搬标准类配置。
1.4.2 宏包 #
宏包扩展 LaTeX 的功能,用 \usepackage 加载:
% 导言区
\usepackage{graphicx}
\usepackage[margin=2.5cm]{geometry}
graphicx 提供插图命令,geometry 管理页面参数。可以一次加载多个不带选项的宏包,如 \usepackage{amsmath,amssymb}。
同一个宏包不要以不同选项反复加载。它也可能已由文档类或其他宏包加载,发生冲突时要检查加载来源和顺序。本地可用 texdoc geometry 阅读宏包手册;常用宏包见附录 B。
1.5 LaTeX 用到的文件一览 #
| 扩展名 | 作用 |
|---|---|
.tex |
主要源文件和章节文件。 |
.sty、.cls |
宏包、文档类。 |
.bib、.bst |
文献数据库、传统 BibTeX 样式。 |
.pdf |
编译后的文档。 |
.log |
编译日志。 |
.aux、.toc |
引用等辅助信息、目录。 |
.lof、.lot |
插图目录、表格目录。 |
.bbl、.blg |
文献处理结果、文献处理日志。 |
.bcf |
biblatex 写给 Biber 的控制文件。 |
.idx、.ind、.ilg |
原始索引、排版用索引、MakeIndex 日志。 |
.out |
hyperref 的书签辅助信息。 |
目录和引用依赖上一次编译写出的辅助文件,所以有时需要再次编译。清理辅助文件不能代替修复源码错误,也不要把 .tex、.bib 或图片误当作缓存删除。
1.6 文件的组织方式 #
长文档可以分文件组织。假设正文位于 chapters/introduction.tex:
% 放在主文件正文中
\input{chapters/introduction}
被读入的章节文件只写章节和正文,不再写 \documentclass 或 document 环境。
\include{chapters/introduction} 也能读入章节,但会在前后执行分页,适合书籍的大章;它不能嵌套使用。\input 不强制分页,也可以在导言区读入公共设置。
导言区中的 \includeonly{chapters/introduction} 可以仅处理指定的 \include 文件。为保留其他章节的引用,应先完整编译一次;它对 \input 无效。
图片等资源最好使用相对路径,文件名保持简洁。syntonly 宏包配合 \syntaxonly 可用于只检查语法而不输出 PDF;初学时正常编译并查看输出更直观。
1.7 LaTeX 和 TeX 相关的术语和概念 #
| 概念 | 含义与例子 |
|---|---|
| 引擎 | 执行底层排版的程序,例如 pdfTeX、XeTeX、LuaTeX。 |
| 格式 | 预定义的一套命令,例如 plain TeX、LaTeX。 |
| 编译命令 | 调用引擎和格式,例如 pdflatex、xelatex、lualatex。 |
| 发行版 | 打包引擎、宏包、字体和配套工具的集合。 |
| 编辑器 | 编辑源码并调用编译工具的界面。 |
pdflatex 使用 pdfTeX;xelatex 使用 XeTeX;lualatex 使用 LuaTeX 系列引擎。latex 这个命令通常生成 DVI,不能与泛指文档格式的“LaTeX”混为一谈。
XeLaTeX 和 LuaLaTeX 能处理 Unicode 和 OpenType 字体。中文排版还需要 ctex 等处理中文字体、断行和标点规则,不能只看引擎是否支持 UTF-8。