每个 LaTeX 文档都从一行 \documentclass 开始。这里选择的 document class 决定整篇文档的骨架和外观:它是论文、书籍,还是一组幻灯片。接着,在 \documentclass 到 \begin{document} 之间的 导言区 中声明要使用的包以及作用于全文的设置。本章的目标,是让你在开始写正文前就能判断“用哪个 class,以及哪些内容应放进导言区”。
\documentclass — 第一行
每个文档都以 \documentclass[options]{class} 这个声明开始。这个命令 必不可少,并且必须写在最前面;在它之前除了注释不能有任何内容。花括号 {} 中的 class 名 选择文档类型,方括号 [] 中的 options 则细调字号、纸张等项目(选项可以省略)。
class 掌管的是整体“外观”:标题用什么字体和大小,章、节如何编号,页面边距以及页眉页脚怎样生成。这些规则集中在 class 文件(扩展名 .cls) 中。正文里只写语义,例如 \section{Introduction},而把它转换成具体版式则是 class 的工作。因此只要替换 class,同一份原稿就能改排成另一种体裁。最先选择 class 不只是选择字体,而是在决定文档结构。
标准 class
LaTeX 默认就带有这些 class。article 是最常用的通用 class,适合学术论文和较短文档。它没有章(\chapter),最上层是节(\section)。report 介于 article 和书籍之间,适合技术报告、学位论文这类 有章结构 的较长文档。book 用于正式书籍:有章,默认面向双面印刷,并可在前言部分、正文、后附部分之间切换。letter 用于信函,slides 用于幻灯片,但今天已经很少使用。
| Class | 用途 | 章 / 默认版式 |
|---|---|---|
article | 论文和通用的短/中篇文档 | 无章;默认单面、单栏 |
report | 技术报告和学位论文 | 有章;默认单面,独立标题页 |
book | 书籍 | 有章;默认双面,章从右页开始 |
letter | 信函 | \address、\signature 等专用命令 |
尤其在 book 中,文档前后会用 \frontmatter / \mainmatter / \backmatter 分隔。\frontmatter 区域(序言、目录等)的页码使用 小写罗马数字(i, ii, iii…),章不编号。到 \mainmatter 时页码重置并切换为 阿拉伯数字(1, 2, 3…),章编号也从这里开始。\backmatter(附录、索引等)保持阿拉伯数字页码,但去掉章编号。
标准 class 之外(beamer、KOMA-Script、日文)
除了标准 class,CTAN 还提供许多面向特定用途的 class。制作演示幻灯片时,beamer 是标准选择:它把每个 frame 环境排成一张幻灯片,并提供逐步显示(overlay)和主题。若想用更讲究的默认排版替代标准 class,常用 KOMA-Script 的 scrartcl / scrreprt / scrbook(分别对应 article / report / book),它们也更容易做细节设置。
日文排版要根据引擎选择专用 class。使用 pLaTeX / upLaTeX 时,奥村晴彦的 jsarticle / jsbook(jsclasses)是标准选择;使用 LuaLaTeX 时,则用它们的 LuaLaTeX 版本 ltjsarticle / ltjsbook(ltjsclasses)。较新的 jlreq 基于“日本语组版处理要求(JLReq)”,可在 pLaTeX、upLaTeX、LuaLaTeX 上运行,并自动判别引擎(用 report / book 选项切换为 report 或 book 相当的体裁)。如果大学或期刊提供模板,应先采用那个 class,自己的外观调整只在最后少量补充。
常用选项
选项写在方括号中,用逗号分隔,例如 \documentclass[11pt,a4paper,twoside]{article}。下面是最常见的选项;其中大多数都是作用于整个文档的开关。
| 选项 | 效果 | 默认值 |
|---|---|---|
10pt / 11pt / 12pt | 正文基准字号 | 10pt |
a4paper / letterpaper | 纸张大小(也有 a5paper、b5paper、legalpaper 等) | letterpaper |
twocolumn | 将正文设为双栏 | 单栏(onecolumn) |
twoside / oneside | 双面 / 单面版式 | oneside(但 book 为 twoside) |
landscape | 使用横向纸张 | 纵向 |
titlepage / notitlepage | 标题是否单独成页 | report / book 为 titlepage,其他为 notitlepage |
fleqn | 将行间公式左对齐 | 居中 |
leqno | 把公式编号放在左侧 | 右侧 |
draft | 用黑条标出溢出的行(overfull box) | final |
book 中的章是否从右页(奇数页)开始,由 openright(book 默认)和 openany(report 默认)决定。这里给出的选项不仅传给 class,也会传给之后加载的包(它们作为 全局选项 生效)。
导言区 — \usepackage 与全局设置
从 \documentclass 后一行到 \begin{document} 之前的部分称为 导言区。这里还不是正文,而是为整篇文档做 准备 的地方。正文(实际输出的内容)从 \begin{document} 开始,到 \end{document} 结束。
导言区的主角是 \usepackage[options]{package}。class 决定底层体裁,而 package(扩展名 .sty) 添加不依赖文档类型的功能,例如增强数学的 amsmath、插图用的 graphicx、加入超链接的 hyperref。一个命令也可以一次加载多个包(\usepackage{amsmath,amssymb})。一个好记的区分法是:决定某种文档外观的是 class,添加与文档类型无关的功能的是 package。
除了加载包,导言区还放置 作用于整篇文档的设置和定义:标题信息 \title{...}、\author{...}、\date{...},用 \newcommand 定义自己的命令,用 \setlength 修改长度,用 \pagestyle 设置页面样式,等等。这些必须在正文之前声明;写在正文中可能无效,也可能报错。
下面是一个带有典型导言区的完整例子。它先选择 class,加载编码和语言相关的包,定义自用命令并设置边距与标题信息,然后进入正文。
\documentclass[11pt,a4paper]{article}
% --- preamble: packages ---
\usepackage[T1]{fontenc}
\usepackage{amsmath} % better mathematics
\usepackage{graphicx} % \includegraphics
\usepackage[margin=25mm]{geometry}
\usepackage{hyperref} % load last
% --- preamble: settings & definitions ---
\newcommand{\R}{\mathbb{R}}
\setlength{\parindent}{0pt}
\title{A Short Note}
\author{Ada Lovelace}
\date{\today}
\begin{document}
\maketitle
Hello, \LaTeX! For all $x \in \R$ we have $x^2 \ge 0$.
\end{document}加载顺序也有意义。容易相互干扰的包会因顺序不同而表现不同;有些包,例如 hyperref,通常应靠后加载(也有例外,需要再读某些包,因此要查各包说明)。在日文文档中,第一步是把 class 本身换成 jsarticle、ltjsarticle 等;选择符合引擎的 class 最重要。如果导言区调整已经让你写不了正文,先退回最小配置继续推进正文,也是正确的工程判断。
不要让导言区膨胀到超过文档
导言区是文档的地基,不是杂物堆。只在正文中用一次的外观调整、只是试过的包、没有语义的缩写命令一多,之后就很难追查错误原因。先只放 作用于全文的设置:class、语言和字体、数学、图表、链接。写正文时确实反复出现的结构,再用 \newcommand 定义。使用投稿模板时,要尊重模板给出的导言区,避免擅自替换可能与 class 绑定的包。
- 新报告:从
article或jsarticle开始,直到确实需要前不要加入复杂页面设计。 - 学位论文:优先使用大学模板的 class,自定义边距或标题调整留到最后确认。
- 日文 + OpenType 字体:按引擎选择 class,例如 LuaLaTeX 用
ltjsarticle/jlreq,upLaTeX 用jsarticle。 - 出现错误时:先怀疑最近加入的
\usepackage或\newcommand,再缩减到最小例。