文档类与导言区

每个 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-Scriptscrartcl / 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纸张大小(也有 a5paperb5paperlegalpaper 等)letterpaper
twocolumn将正文设为双栏单栏(onecolumn
twoside / oneside双面 / 单面版式oneside(但 booktwoside
landscape使用横向纸张纵向
titlepage / notitlepage标题是否单独成页report / booktitlepage,其他为 notitlepage
fleqn将行间公式左对齐居中
leqno把公式编号放在左侧右侧
draft用黑条标出溢出的行(overfull box)final

book 中的章是否从右页(奇数页)开始,由 openrightbook 默认)和 openanyreport 默认)决定。这里给出的选项不仅传给 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,加载编码和语言相关的包,定义自用命令并设置边距与标题信息,然后进入正文。

latex
\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 本身换成 jsarticleltjsarticle 等;选择符合引擎的 class 最重要。如果导言区调整已经让你写不了正文,先退回最小配置继续推进正文,也是正确的工程判断。

不要让导言区膨胀到超过文档

导言区是文档的地基,不是杂物堆。只在正文中用一次的外观调整、只是试过的包、没有语义的缩写命令一多,之后就很难追查错误原因。先只放 作用于全文的设置:class、语言和字体、数学、图表、链接。写正文时确实反复出现的结构,再用 \newcommand 定义。使用投稿模板时,要尊重模板给出的导言区,避免擅自替换可能与 class 绑定的包。

  • 新报告:从 articlejsarticle 开始,直到确实需要前不要加入复杂页面设计。
  • 学位论文:优先使用大学模板的 class,自定义边距或标题调整留到最后确认。
  • 日文 + OpenType 字体:按引擎选择 class,例如 LuaLaTeX 用 ltjsarticle/jlreq,upLaTeX 用 jsarticle
  • 出现错误时:先怀疑最近加入的 \usepackage\newcommand,再缩减到最小例。