summaryrefslogtreecommitdiff
path: root/info/lshort/chinese/src/chap/chap.01.basics.tex
diff options
context:
space:
mode:
Diffstat (limited to 'info/lshort/chinese/src/chap/chap.01.basics.tex')
-rw-r--r--info/lshort/chinese/src/chap/chap.01.basics.tex451
1 files changed, 451 insertions, 0 deletions
diff --git a/info/lshort/chinese/src/chap/chap.01.basics.tex b/info/lshort/chinese/src/chap/chap.01.basics.tex
new file mode 100644
index 0000000000..ef0471b0f6
--- /dev/null
+++ b/info/lshort/chinese/src/chap/chap.01.basics.tex
@@ -0,0 +1,451 @@
+\chapter{\LaTeX{} 的基本概念}\label{chap:basics}
+\addtocontents{los}{\protect\addvspace{10pt}}
+
+\begin{intro}
+欢迎使用 \LaTeX{}!本章开头用简短的篇幅介绍了 \LaTeX{} 的来源,
+然后介绍了 \LaTeX{} 源代码的写法,编译 \LaTeX{} 源代码生成文档的方法,以及理解接下来的章节的一些必要知识。
+\end{intro}
+
+\section{概述}\label{sec:intro}
+
+\subsection{\protect\TeX}\label{subsec:tex}
+
+\index{Knuth@Knuth, Donald E. (\textit{高德纳})}
+\index{TeX@\TeX}
+\TeX{} 是高德纳 (Donald E.~Knuth) 为排版文字和数学公式而开发的软件\cite{texbook}。
+1977 年,正在编写《计算机程序设计艺术》的高德纳意识到每况愈下的排版质量将影响其著作的发行,
+为扭转这种状况,他着手开发 \TeX{},发掘当时刚刚用于出版工业的数字印刷设备的潜力。
+1982 年,高德纳发布 \TeX{} 排版引擎,而后在 1989 年又为更好地支持 8-bit 字符和多语言排版而予以改进。
+\TeX{} 以其卓越的稳定性、跨平台能力和几乎没有 bug 的特性而著称。
+它的版本号不断趋近于 $\pi$,当前为 3.14159265。
+
+\TeX{} 读作 ``Tech'',与汉字“泰赫”的发音相近,其中 ``ch'' 的发音类似于 ``h''。\TeX{} 的拼写来自希腊词语
+τεχνική (technique,技术) 开头的几个字母,在 ASCII 字符环境中写作 \texttt{TeX}。
+
+\subsection{\LaTeX}\label{subsec:latex}
+
+\index{LaTeX@\LaTeX}
+\index{LaTeX2e@\LaTeXe}
+\LaTeX{} 是一种使用 \TeX{} 程序作为排版引擎的格式(format),可以粗略地将它理解成是对 \TeX{} 的一层封装。
+\LaTeX{} 最初的设计目标是分离内容与格式,以便作者能够专注于内容创作而非版式设计,并能以此得到高质量排版的作品。
+\LaTeX{} 起初由 Leslie Lamport 博士\cite{manual}开发,目前由 \LaTeX 3 工作组%
+\footnote{\url{https://www.latex-project.org}}进行维护。
+
+\LaTeX{} 读作 ``Lah-tech'' 或者 ``Lay-tech'',与汉字“拉泰赫”或“雷泰赫”的发音相近,在 ASCII 字符环境写作 \texttt{LaTeX}。
+\LaTeXe{} 是 \LaTeX{} 的当前版本,意思是超出了第二版,但还远未达到第三版,在 ASCII 字符环境写作 \texttt{LaTeX2e}。
+
+\subsection{\LaTeX{} 的优缺点}\label{subec:advs}
+
+经常有人喜欢对比 \LaTeX{} 和以 Microsoft Office Word 为代表的“所见即所得”%
+(What You See Is What You Get)字处理工具。
+这种对比是没有意义的,因为 \TeX{} 是一个排版引擎,\LaTeX{} 是其封装,而 Word 是字处理工具。
+二者的设计目标不一致,也各自有自己的适用范围。
+
+不过,这里仍旧总结 \LaTeX{} 的一些优点:
+\begin{itemize}
+ \item 具有专业的排版输出能力,产生的文档看上去就像“印刷品”一样。
+ \item 具有方便而强大的数学公式排版能力,无出其右者。
+ \item 绝大多数时候,用户只需专注于一些组织文档结构的基础命令,无需(或很少)操心文档的版面设计。
+ \item 很容易生成复杂的专业排版元素,如脚注、交叉引用、参考文献、目录等。
+ \item 强大的可扩展性。世界各地的人开发了数以千计的 \LaTeX{} 宏包用于补充和扩展 \LaTeX{} 的功能。
+ 本手册附录中的 \ref{sec:pkg-list} 小节可见一瞥。更多的宏包参考 \textit{The \LaTeX{} companion}\cite{companion}。
+ \item 能够促使用户写出结构良好的文档——而这也是 \LaTeX{} 存在的初衷。
+ \item \LaTeX{} 和 \TeX{} 及相关软件是跨平台、免费、开源的。
+ 无论用户使用的是 Windows,macOS(OS X),GNU/Linux 还是 FreeBSD 等操作系统,都能轻松获得和使用这一强大的排版工具,并且获得稳定的输出。
+\end{itemize}
+
+\LaTeX{} 的缺点也是显而易见的:
+\begin{itemize}
+ \item 入门门槛高。本手册的副标题叫做 “\pageref{lshort-minutes}~分钟了解 \LaTeXe ”,
+ 实际上 \pageref{lshort-minutes} 是本手册正文部分(包括附录)的页数。如果你以平均一页一分钟的速度看完了本手册,
+ 你只是粗窥门径而已,离学会它还很远。
+ \item 不容易排查错误。\LaTeX{} 作为一个依靠编写代码工作的排版工具,其使用的宏语言比 C++ 或 Python 等程序设计语言在错误排查方面困难得多。
+ 它虽然能够提示错误,但不提供调试的机制,有时错误提示还很难理解。
+ \item 不容易定制样式。\LaTeX{} 提供了一个基本上良好的样式,为了让用户不去关注样式而专注于文档结构。
+ 但如果想要改进 \LaTeX{} 生成的文档样式则是十分困难。
+ \item 相比“所见即所得”的模式有一些不便,为了查看生成文档的效果,用户总要不停地编译。
+\end{itemize}
+
+\subsection{命令行基础}
+
+\LaTeX{} 和 \TeX{} 及相关软件大多仅提供了命令行接口,而不像 Word、Adobe InDesign 一样有图形用户界面。
+命令行程序的结构往往比较简单,它们接受用户输入,读取相关文件,进行一些操作和运算后输出目标文件,
+有时还会将提示信息、运行结果显示在屏幕上。在 Windows 系统上,如需进入命令行,可在开始菜单中搜索
+“命令提示符”,也可在“运行”窗口中输入 \texttt{cmd} 打开;Linux 或 macOS 等 *nix %
+\footnote{类 Unix 操作系统,包含 Linux、macOS(OS X)。}
+系统中可搜索“Terminal”打开终端。部分系统也提供了一些快捷方式,具体请参考相关手册。
+
+与常规软件类似,命令行程序也都是可执行程序,在 Windows 上后缀名为 \texttt{.exe},而在类 Unix 系统上
+则需要带有 \texttt{x} 权限。在大多数命令行环境中,系统会根据\textbf{环境变量} \texttt{PATH} 中存储
+的路径来搜索可供执行的程序。因此在运行之前,需确保 \LaTeX 、\TeX{} 及相关程序所在路径已包含在
+\texttt{PATH} 中。
+
+在命令行中运行程序时,需要先输入程序名,其后可加一系列用空格分隔的参数,并按下 Enter 键执行。
+一般情况下,命令行程序执行完毕会自行退出。若遇到错误或中断,可输入 Ctrl+C 以强制结束。
+
+使用命令行程序输入、输出文件时,需确保文件路径正确。通常需要先切换到文件所在目录,再执行有关程序。
+切换路径可以执行
+\begin{command}
+\verb|cd| \Arg{path}
+\end{command}
+注意 \Arg{path} 中的多级目录在 Windows 系统上使用反斜线 \verb|\| 分隔,而在类 Unix 系统上使用正斜线
+\verb|/| 分隔。如果 \Arg{path} 中带有空格,则需加上引号 \verb|"|。此外,在 Windows 系统上如果要切换
+到其他分区,还需加上 \verb|/d| 选项,例如 \verb|cd /d "C:\Program Files (x86)\"|。
+
+许多用户会使用 TeXworks 或 TeXstudio 等编辑器来编写 \LaTeX{} 文档。这些编辑器提供的编译功能,
+实际上只是对特定命令行程序的封装,而并非魔法。
+
+\section{第一次使用 \LaTeX}\label{sec:run}
+
+源代码~\ref{code:hello-world}~是一份最短的 \LaTeX{} 源代码示例。
+
+\begin{sourcecode}[htp]
+\begin{Verbatim}
+\documentclass{article}
+\begin{document}
+``Hello world!'' from \LaTeX.
+\end{document}
+\end{Verbatim}
+\caption{\LaTeX{} 的一个最简单的源代码示例。}\label{code:hello-world}
+\end{sourcecode}
+
+这里首先介绍如何编译使用这份源代码,在后续小节中再介绍源代码的细节。
+你可以将这份源代码保存为 \texttt{helloworld.tex},而后编译。具体来说:
+\begin{itemize}
+ \item 如果使用 TeXworks 或 TeXstudio 等编辑器,你可以使用编辑器提供的“编译”按钮或者“排版”
+ 按钮。建议使用 \hologo{pdfLaTeX} 或 \hologo{XeLaTeX} 作为默认的编译方式(不同编译方式的差别,
+ 见~\ref{sec:concepts}~节)。
+ \item 如果使用命令行方式进行编译,则需打开 Windows 命令提示符或者 *nix 的终端,
+ 在源代码所在的目录下输入:
+\begin{verbatim}
+pdflatex helloworld
+\end{verbatim}
+或者
+\begin{verbatim}
+xelatex helloworld
+\end{verbatim}
+\end{itemize}
+
+如果编译成功,可以在 \texttt{helloworld.tex} 所在目录看到生成的 \texttt{helloworld.pdf} 以及一些其它文件。
+
+源代码~\ref{code:hello-world-chinese}~是在 \LaTeX{} 排版中文的一个最简示例。
+编译的方式与上一份源代码相同,但需使用 \hologo{XeLaTeX} 编译方式%
+\footnote{注意两个问题:1. 文档保存为 UTF-8 编码;2. 某些发行版需要补充安装较多宏包(如 \hologo{MiKTeX})。}。
+中文支持的详细内容见 \ref{sec:chinese} 节。
+
+\begin{sourcecode}[htp]
+ \begin{Verbatim}
+ \documentclass{ctexart}
+ \begin{document}
+ “你好,世界!” 来自 \LaTeX{} 的问候。
+ \end{document}
+ \end{Verbatim}
+ \caption{在\LaTeX{} 中排版中文的最简源代码示例。}\label{code:hello-world-chinese}
+\end{sourcecode}
+
+\section{\LaTeX{} 命令和代码结构}\label{sec:src}
+
+\LaTeX{} 的源代码为文本文件。这些文本除了文字本身,还包括各种命令,
+用在排版公式、划分文档结构、控制样式等等不同的地方。
+
+\subsection{\LaTeX{} 命令和环境}\label{subsec:cmds}
+
+\index{LaTeX macro@\LaTeX{} 命令}
+\LaTeX{} 中命令\footnote{也叫作控制序列(control sequence)。}以反斜线 \texttt{\textbackslash} 开头,为以下两种形式之一:
+\begin{itemize}
+ \item 反斜线和后面的一串字母,如 \cmd{LaTeX}。它们以任意非字母符号(空格、数字、标点等)为界限。
+ \item 反斜线和后面的单个非字母符号,如 \cmd{\$}。
+\end{itemize}
+
+要注意 \LaTeX{} 命令是\textbf{对大小写敏感}的,比如输入 \cmd{LaTeX} 命令可以生成错落有致的 \LaTeX{} 字母组合,
+但输入 \cmd{Latex} 或者 \cmd{LaTex} 什么都得不到,还会报错;它们与 \cmd{LaTeX} 是不同的命令。
+
+字母形式的 \LaTeX{} 命令忽略其后的所有连续空格。
+如果要人为引入空格,需要在命令后面加一对花括号阻止其忽略空格%
+\footnote{另外也可以在命令后面紧跟一个 \cmd{\textvisiblespace} 命令(反斜线加空格),代表插入一个间距。
+比如 \cmd{TeX}\cmd{\textvisiblespace}\texttt{user} 的输出效果就是 \TeX{} user。}:
+\begin{example}
+Shall we call ourselves
+\TeX users
+
+or \TeX{} users?
+\end{example}
+
+\pinyinindex{canshu}{参数}
+一些 \LaTeX{} 命令可以接收一些参数,参数的内容会影响命令的效果。
+\LaTeX{} 的参数分为可选参数和必选参数。
+可选参数以方括号 \texttt[ 和 \texttt] 包裹;必选参数一般以花括号 \texttt\{ 和 \texttt\} 包裹%
+\footnote{以单个字符作为命令的参数时,可以不加括号。例如,在数学环境下,
+\cmd{frac}\texttt{12} 和 \cmd{frac}\texttt{\{1\}\{2\}} 的效果是一样的。}。
+还有些命令可以带一个星号 \texttt*,带星号和不带星号的命令效果有一定差异。
+初次接触这些概念时,可以粗略地把星号看作一种特殊的可选参数。
+
+\index{LaTeX environment@\LaTeX{} 环境}
+\cmdindex{begin,end}
+\LaTeX{} 中还包括\textbf{环境},用以令一些效果在局部生效,或是生成特殊的文档元素。
+\LaTeX{} 环境的用法为一对命令 \cmd{begin} 和 \cmd{end}:
+\begin{command}
+\cmd{begin}\marg{environment name}\oarg{optional arguments}\marg{mandatory arguments} \\
+\ldots \\
+\cmd{end}\marg{environment name}
+\end{command}
+
+其中 \Arg{environment name} 为环境名,\cmd{begin} 和 \cmd{end} 中填写的环境名应当一致。
+类似命令,\marg{mandatory arguments} 和 \oarg{optional arguments} 为环境所需的必选和可选参数。
+\LaTeX{} 环境可能需要一个或多个必选/可选参数,也可能完全不需要参数。
+部分环境允许嵌套使用。
+
+\pinyinindex{fenzu}{分组}
+有些命令(如 \cmd{bfseries})会对其后所有内容产生作用。若要限制其作用范围,则需要使用\textbf{分组}。
+\LaTeX{} 使用一对花括号 \verb|{| 和 \verb|}| 作为分组,在分组中使用的命令被限制在分组内,不会影响到分组外的内容%
+\footnote{个别命令在分组内仍然会产生全局作用,例如第 \ref{sec:counters} 节介绍的 \cmd{setcounter} 等命令。}。
+上文提到的 \LaTeX{} 环境隐含了一个分组,在环境中的命令被包裹在分组内。
+\ref{subsec:fontshape} 和 \ref{subsec:fontsize} 小节中介绍的修改字体和字号的命令用法,即属此类。
+
+\subsection{\LaTeX{} 源代码结构}\label{subsec:struct}
+
+\cmdindex{documentclass}
+\envindex{document}
+\pinyinindex{wendanglei}{文档类}
+\pinyinindex{hongbao}{宏包}
+\LaTeX{} 源代码以一个 \cmd{document\-class} 命令作为开头,它指定了文档使用的\textbf{文档类}。
+\env{document} 环境当中的内容是文档正文。
+
+\cmdindex{usepackage}
+\pinyinindex{daoyanqu}{导言区}
+在 \cmd{documentclass} 和 \cmd{begin}\marg*{document} 之间的位置称为\textbf{导言区}。
+在导言区中一般会使用 \cmd{use\-package} 命令调用\textbf{宏包},还会进行文档的全局设置。
+\begin{verbatim}
+\documentclass{...} % ... 为某文档类
+% 导言区
+\begin{document}
+% 正文内容
+\end{document}
+% 此后内容会被忽略
+\end{verbatim}
+
+\section{\LaTeX{} 宏包和文档类}\label{sec:latex-pkgs}
+
+本节将仔细解释在 \ref{subsec:struct} 小节中出现的宏包和文档类的概念以及详细用法。
+
+\subsection{文档类}\label{subsec:classes}
+
+\pinyinindex{wendanglei}{文档类}
+\textbf{文档类}规定了 \LaTeX{} 源代码所要生成的文档的性质——普通文章、书籍、演示文稿、
+个人简历等等。\LaTeX{} 源代码的开头须用\cmd{document\-class}指定文档类:
+\begin{command}
+\cmd{documentclass}\oarg{options}\marg{class-name}
+\end{command}
+
+\clsindex{article,book,report}
+\clsindex{ctexart,ctexrep,ctexbook}
+其中 \Arg{class-name} 为文档类的名称,如 \LaTeX{} 提供的 \cls{article}, \cls{book}, \cls{report},
+在其基础上派生的一些文档类如支持中文排版的 \cls{ctexart} / \cls{ctexbook} / \cls{ctexrep},
+或者有其它功能的一些文档类,如 \cls{moderncv} / \cls{beamer} 等。
+\LaTeX{} 提供的基础文档类见表 \ref{tbl:ltx-classes},其中前三个习惯上称为“标准文档类”。
+
+\begin{table}[htp]
+\centering
+\caption{\LaTeX{} 提供的基础文档类}\label{tbl:ltx-classes}
+\begin{tabular}{lp{30em}}
+ \hline
+ \cls{article} & 文章格式的文档类,广泛用于科技论文、报告、说明文档等。\\
+ \cls{report} & 长篇报告格式的文档类,具有章节结构,用于综述、长篇论文、简单的书籍等。\\
+ \cls{book} & 书籍文档类,包含章节结构和前言、正文、后记等结构。\\
+ \hline
+ \cls{proc} & 基于 \cls{article} 文档类的一个简单的学术文档模板。\\
+ \cls{slides} & 幻灯格式的文档类,使用无衬线字体。\\
+ \cls{minimal} & 一个极其精简的文档类,只设定了纸张大小和基本字号,
+ 用作代码测试的最小工作示例(Minimal Working Example)。 \\
+ \hline
+\end{tabular}
+\end{table}
+
+\pinyinindex{xuanxiang}{选项(宏包/文档类)}
+可选参数 \Arg{options} 为文档类指定选项,以全局地规定一些排版的参数,如字号、纸张大小、单双面等等。
+比如调用 \cls{article} 文档类排版文章,指定纸张为 A4 大小,基本字号为 11pt,双面排版:
+\begin{verbatim}
+\documentclass[11pt,twoside,a4paper]{article}
+\end{verbatim}
+
+\LaTeX{} 的三个标准文档类可指定的选项包括:
+\begin{description}
+\item[\texttt{10pt, 11pt, 12pt}] \quad 指定文档的基本字号。默认为 \texttt{10pt}。
+\item[\texttt{a4paper, letterpaper, \ldots}] \quad 指定纸张大小,默认为美式信纸 \texttt{letterpaper} ($8.5\times11$英寸)。
+可指定选项还包括 \texttt{a5paper},\texttt{b5paper},\texttt{executivepaper} 和 \texttt{legalpaper}。
+\item[\texttt{twoside, oneside}] \quad 指定单面/双面排版。双面排版时,奇偶页的页眉页脚、页边距不同。
+\cls{article} 和 \cls{report} 默认为 \texttt{oneside},\cls{book} 默认为 \texttt{twoside}。
+\item[\texttt{onecolumn, twocolumn}] \quad 指定单栏/双栏排版。默认为 \texttt{onecolumn}。
+\item[\texttt{openright, openany}] \quad 指定新的一章 \cmd{chapter} 是在奇数页(右侧)开始,还是直接紧跟着上一页开始。
+\cls{report} 默认为 \texttt{openany},\cls{book} 默认为 \texttt{openright}。对 \cls{article} 无效。
+\item[\texttt{landscape}] \quad 指定横向排版。默认为纵向。
+\item[\texttt{titlepage, notitlepage}] 指定标题命令 \cmd{maketitle} 是否生成单独的标题页。
+\cls{article} 默认为 \texttt{notitlepage},\cls{report} 和 \cls{book} 默认为 \texttt{titlepage}。
+\item[\texttt{fleqn}] \quad 令行间公式左对齐。默认为居中对齐。
+\item[\texttt{leqno}] \quad 将公式编号放在左边。默认为右边。
+\item[\texttt{draft, final}] \quad 指定草稿/终稿模式。
+草稿模式下,断行不良的地方会在行尾添加一个黑色方块。默认为 \texttt{final}。
+\end{description}
+
+\subsection{宏包}\label{subsec:packages}
+
+\cmdindex{usepackage}
+\pinyinindex{hongbao}{宏包}
+\pinyinindex{xuanxiang}{选项(宏包/文档类)}
+在使用 \LaTeX{} 时,时常需要依赖一些扩展来增强或补充 \LaTeX{} 的功能,比如排版复杂的表格、插入图片、增加颜色甚至超链接等等。
+这些扩展称为\textbf{宏包}。调用宏包的方法非常类似调用文档类的方法:
+\begin{command}
+\cmd{usepackage}\oarg{options}\marg{package-name}
+\end{command}
+
+\cmd{usepackage}~可以一次性调用多个宏包,在 \Arg{package-name} 中用逗号隔开。这种用法一般不要指定选项%
+\footnote{使用多个宏包时指定选项,相当于给每个宏包指定同样的选项。如果有某个宏包不能识别指定的选项,则会出错。}:
+\begin{verbatim}
+% 一次性调用三个排版表格常用的宏包
+\usepackage{tabularx, makecell, multirow}
+\end{verbatim}
+
+附录 \ref{sec:pkg-list} 汇总了常用的一些宏包。我们在手册接下来的章节中,也会穿插介绍一些最常用的宏包的使用方法。
+
+在使用宏包和文档类之前,一定要首先确认它们是否安装在你的计算机中,否则 \cmd{use\-package} 等命令会报错误。
+详见附录 \ref{sec:pkg-manager}。
+
+宏包(包括前面所说的文档类)可能定义了许多命令和环境,或者修改了 \LaTeX{} 已有的命令和环境。
+它们的用法说明记在相应宏包和文档类的帮助文档。在 Windows 命令提示符或者 Linux 终端下输入命令可查阅相应文档:
+\begin{command}
+\texttt{texdoc} \Arg{pkg-name}
+\end{command}
+
+其中 \Arg{pkg-name} 是宏包或者文档类的名称。更多获得帮助的方法见附录 \ref{sec:texdoc}。
+
+\section{\LaTeX{} 用到的文件一览}\label{sec:latex-files}
+
+除了源代码文件 \texttt{.tex} 以外,我们在使用 \LaTeX{} 时还可能接触到各种格式的文件。
+本节简单介绍一下在使用 \LaTeX{} 时能够经常见到的文件。
+
+每个宏包和文档类都是带特定扩展名的文件,除此之外也有一些文件出现于 \LaTeX{} 模板中:
+\begin{description}
+ \item[\texttt{.sty}] 宏包文件。宏包的名称与文件名一致。
+ \item[\texttt{.cls}] 文档类文件。文档类名称与文件名一致。
+ \item[\texttt{.bib}] \hologo{BibTeX} 参考文献数据库文件。
+ \item[\texttt{.bst}] \hologo{BibTeX} 用到的参考文献格式模板。详见 \ref{subsec:bibtex-use} 小节。
+\end{description}
+
+\LaTeX{} 在编译过程中除了生成 \texttt{.dvi} 或 \texttt{.pdf} 格式的文档外%
+\footnote{\hologo{XeLaTeX} 还可能生成 \texttt{.xdv} 文件。},还可能会生成相当多的辅助文件和日志。
+一些功能如交叉引用、参考文献、目录、索引等,需要先通过编译生成辅助文件,
+然后再次编译时读入辅助文件得到正确的结果,所以复杂的 \LaTeX{} 源代码可能要编译多次:
+\begin{description}
+ \item[\texttt{.log}] 排版引擎生成的日志文件,供排查错误使用。
+ \item[\texttt{.aux}] \LaTeX{} 生成的主辅助文件,记录交叉引用、目录、参考文献的引用等。
+ \item[\texttt{.toc}] \LaTeX{} 生成的目录记录文件。
+ \item[\texttt{.lof}] \LaTeX{} 生成的图片目录记录文件。
+ \item[\texttt{.lot}] \LaTeX{} 生成的表格目录记录文件。
+ \item[\texttt{.bbl}] \hologo{BibTeX} 生成的参考文献记录文件。
+ \item[\texttt{.blg}] \hologo{BibTeX} 生成的日志文件。
+ \item[\texttt{.idx}] \LaTeX{} 生成的供 makeindex 处理的索引记录文件。
+ \item[\texttt{.ind}] makeindex 处理 \texttt{.idx} 生成的用于排版的格式化索引文件。
+ \item[\texttt{.ilg}] makeindex 生成的日志文件。
+ \item[\texttt{.out}] \pkg{hyperref} 宏包生成的 PDF 书签记录文件。
+\end{description}
+
+\section{文件的组织方式}\label{sec:latex-multi-files}
+
+当编写长篇文档时,例如当编写书籍、毕业论文时,单个源文件会使修改、校对变得十分困难。
+将源文件分割成若干个文件,例如将每章内容单独写在一个文件中,会大大简化修改和校对的工作。
+可参考源代码 \ref{code:book-struct} 的写法。
+
+\cmdindex{include}
+\LaTeX{} 提供了命令 \cmd{include} 用来在源代码里插入文件:
+\begin{command}
+\cmd{include}\marg{filename}
+\end{command}
+\Arg{filename} 为文件名,如果和要编译的主文件不在一个目录中,则要加上相对或绝对路径,例如:
+\begin{verbatim}
+\include{chapters/a.tex} % 相对路径
+\include{/home/Bob/file.tex} % *nix (包含 Linux、macOS(OS X))绝对路径
+\include{D:/file.tex} % Windows 绝对路径,用正斜线
+\end{verbatim}
+
+\Arg{filename} 可以不带扩展名,此时默认扩展名为 \texttt{.tex}。
+
+\cmdindex{input}
+值得注意的是 \cmd{include} 在读入 \Arg{filename} 之前会另起一页。有的时候我们并不需要这样,而是用
+\cmd{input} 命令,它纯粹是把文件里的内容插入:
+\begin{command}
+\cmd{input}\marg{filename}
+\end{command}
+
+特别要注意的是,使用 \cmd{include} 和 \cmd{input} 命令载入的文件名\textbf{一定不要加空格},否则通常会出错。
+
+\cmdindex{includeonly}
+另外 \LaTeX{} 提供了一个 \cmd{includeonly} 命令来组织文件,用于\textbf{导言区},指定只载入某些文件:
+\begin{command}
+\cmd{includeonly}\marg*{\Arg{filename1},\Arg{filename2},\ldots}
+\end{command}
+
+导言区使用了 \cmd{includeonly} 后,正文中不在其列表范围的 \cmd{include} 命令不会起效。
+
+\pkgindex{syntonly}
+最后介绍一个实用的工具宏包 \pkg{syntonly}。加载这个宏包后,在导言区使用 \cmd{syntaxonly} 命令,
+可令 \LaTeX{} 编译后不生成 DVI 或者 PDF 文档,只排查错误,编译速度会快不少:
+\begin{verbatim}
+\usepackage{syntonly}
+\syntaxonly
+\end{verbatim}
+
+如果想生成文档,则用 \texttt\% 注释掉 \cmd{syntaxonly} 命令即可。
+
+\section{\LaTeX{} 和 \TeX{} 相关的术语和概念}\label{sec:concepts}
+
+\pinyinindex{paibanyinqing}{排版引擎}
+\index{pdfTeX@\hologo{pdfTeX}}
+\index{XeTeX@\hologo{XeTeX}}
+在本章的最后有必要澄清几个概念:
+\begin{description}
+ \item[引擎] 全称为排版引擎,是编译源代码并生成文档的程序,如 \hologo{pdfTeX}、\hologo{XeTeX} 等。有时也称为编译器。
+ \item[格式] 是定义了一组命令的代码集。\LaTeX{} 就是最广泛应用的一个格式,高德纳本人还编写了一个简单的 \hologo{plainTeX} 格式,
+ 没有定义诸如 \cmd{document\-class} 和 \cmd{section} 等等命令。
+ \item[编译命令] 是实际调用的、结合了引擎和格式的命令。如 \texttt{xelatex} 命令是结合 \hologo{XeTeX}
+ 引擎和 \LaTeX{} 格式的一个编译命令。
+\end{description}
+常见的引擎、格式和编译命令的关系总结于表 \ref{tbl:engine-format-command}。
+
+\begin{table}[htp]
+ \centering
+ \caption{\TeX{} 引擎、格式及其对应的编译命令。}
+ \label{tbl:engine-format-command}
+ \begin{tabular}{cccc}
+ \hline
+ & \textbf{文档格式} & \textbf{\hologo{plainTeX} 格式} & \textbf{\LaTeX{} 格式} \\
+ \hline
+ \TeX{} 引擎 & DVI & \texttt{tex} & N/A \\
+ \hologo{pdfTeX} 引擎 & DVI & \texttt{etex} & \texttt{latex} \\
+ & PDF & \texttt{pdftex} & \texttt{pdflatex} \\
+ \hologo{XeTeX} 引擎 & PDF & \texttt{xetex} & \texttt{xelatex} \\
+ \hologo{LuaTeX} 引擎 & PDF & \texttt{luatex} & \texttt{lualatex} \\
+ \hline
+ \end{tabular}
+\end{table}
+
+\texttt{latex} 编译命令和 \LaTeX{} 格式往往容易混淆,在讨论关于 \LaTeX{} 的时候需要明确。
+为避免混淆,本手册中的 \LaTeX{} 一律指的是\textbf{格式},\textbf{编译命令}则用等宽字体 \texttt{latex} 表示。
+
+在此介绍一下几个编译命令的基本特点:
+\begin{description}
+ \item[\texttt{latex}]
+ 虽然名为 \texttt{latex} 命令,底层调用的引擎其实是 \hologo{pdfTeX}。
+ 该命令生成 \texttt{dvi}(Device Independent)格式的文档,
+ 用 \texttt{dvipdfmx} 命令可以将其转为 \texttt{pdf}。
+ \item[\texttt{pdflatex}]
+ 底层调用的引擎也是 \hologo{pdfTeX},可以直接生成 \texttt{pdf} 格式的文档。
+ \item[\texttt{xelatex}]
+ 底层调用的引擎是 \hologo{XeTeX},支持 UTF-8 编码和对 TrueType / OpenType 字体的调用。
+ 当前较为方便的中文排版解决方案基于 \texttt{xelatex},详见 \ref{sec:chinese} 节。
+ \item[\texttt{lualatex}]
+ 底层调用的引擎是 \hologo{LuaTeX},这个引擎在 \hologo{pdfTeX} 引擎基础上发展而来,
+ 除了支持 UTF-8 编码和对 TrueType / OpenType 字体的调用外,还支持通过 Lua 语言扩展 \TeX{} 的功能。
+ \texttt{lualatex} 编译命令下的中文排版支持需要借助 \pkg{luatexja} 宏包。
+\end{description}
+
+\endinput