一份不太简短的 LATEX 2ε 介绍
Closed this issue · 0 comments
\(\LaTeX\) 是一个文档准备系统 (Document Preparing System),它非常适用于生成高印刷质量的科技类和数学类文档。它也能够生成所有其他种类的文档,小到简单的信件,大到完整的书籍。\(\LaTeX\) 使用 \(\TeX\) 作为它的排版引擎。
概述
\(\TeX\)
\(\TeX\) 是高德纳 (Donald E.Knuth) 开发的、以排版文字和数学公式为目的的一个计算机软件。高德纳从 1977 年开始开发 \(\TeX\) ,以发掘当时开始用于出版工业的数字印刷设备的潜力。正在编写著作《计算机程序设计艺术》的高德纳,意图扭转排版质量每况愈下的状况,以免影响他的出书。我们现在使用的 \(\TeX\) 排版引擎发布于 1982 年,在 1989 年又稍加改进以更好地支持 8-bit 字符和多语言排版。\(\TeX\) 以其卓越的稳定性、跨平台、几乎没有 Bug 而著称。\(\TeX\) 的版本号不断趋近于 \(\pi\),当前为 3.141592653。
\(\TeX\) 读作 “Tech” ,其中 “ch” 的发音类似于 “h” ,与汉字“泰赫”的发音类似。\(\TeX\) 的拼写来自希腊词语 τεχνική (technique,技术) 的开头几个字母。在 ASCII 字符环境,\(\TeX\) 写作 TeX。
\(\LaTeX\)
\(\LaTeX\) 为 \(\TeX\) 基础上的一套格式,令作者能够使用预定义的专业格式以较高质量排版和印刷他们的作品。\(\LaTeX\) 的最初开发者为 Leslie Lamport 博士。\(\LaTeX\) 使用 \(\TeX\) 程序作为自己的排版引擎。当下 \(\LaTeX\) 主要的维护者为 Frank Mittelbach。
\(\LaTeX\) 读作 “Lah-tech” 或者 “Lay-tech”,近似于汉字“拉泰赫”或“雷泰赫”。\(\LaTeX\) 在ASCII 字符环境写作 LaTeX。当前的 \(\LaTeX\) 版本为 \(\LaTeX2_\epsilon\),意思是超出了第二版,接近但没达到第三版,在 ASCII 字符环境写作 LaTeX2e。
\(\LaTeX\)的优缺点
\(\LaTeX\) 总会拿来和一些“所见即所得”(What You See Is What You Get)的文字处理和排版工具比较优缺点。笔者认为这种比较并不值得提倡,毕竟所有工具都有自己值得使用的原因。
当然这里还是会总结一些 \(\LaTeX\) 的优点:
- 专业的排版输出,产生的文档看上去就像“印刷品”一样。
- 方便而强大的数学公式排版能力,无出其右。
- 绝大多数时候,用户只需专注于一些组织文档结构的基础命令,无需(或很少)操心文档的版面设计。
很容易生成复杂的专业排版元素,如脚注、交叉引用、参考文献、目录等。 - 强大的扩展性。世界各地的人开发了数以千计的 \(\LaTeX\) 宏包用于补充和扩展 \(\LaTeX\) 的功能。本手册附录中的 B.3 小节可见一瞥。更多的宏包参考 The LATEX companion。
- \(\LaTeX\) 促使用户写出结构良好的文档——而这也是 \(\LaTeX\) 存在的初衷。
- \(\LaTeX\) 依赖的 \(\TeX\) 排版引擎和其它软件是跨平台、免费、开源的。无论用户使用的是Windows,macOS(OSX),GNU/Linux 还是 FreeBSD 等操作系统,都能轻松获得和使用这一强大的排版工具。
\(\LaTeX\) 的缺点也是显而易见的:
- 入门门槛高。本手册的副标题叫做“102 分钟了解 \(\LaTeX2_\epsilon\)”,实际上 102 是本手册正文部分(包括附录)的页数。如果你以平均一页一分钟的速度看完了本手册,你只是粗窥门径而已,离学会它还很远。
- 排查错误困难。\(\LaTeX\) 作为一个依靠编写代码工作的排版工具,其使用的宏语言比 C++ 或 Python 等程序设计语言在错误排查方面困难得多。它虽然能够提示错误,但不提供调试的机制,有时错误提示还很难理解。
- 样式定制困难。\(\LaTeX\) 提供了一个基本上良好的样式,为了让用户不去关注样式而专注于文档结构。但如果想要改进 \(\LaTeX\) 生成的文档样式则是十分困难。
- 相比“所见即所得”的模式有一些不便,为了查看生成的文档,用户总要不停地编译。
\(\LaTeX\) 命令和代码结构
\(\LaTeX\) 的源代码本质上是文本文件。哪怕用 Windows 的记事本或者 Linux 的 gedit 等简单的编辑器,也可以编写一份 \(\LaTeX\) 源代码并编译出文档来。专用于编辑 \(\LaTeX\) 源代码的编辑器如 TeXworks / TeXstudio / WinEdt 等提供了一些语法高亮、命令补全等功能,以及调用排版引擎的一些按钮。
除了文字本身,\(\LaTeX\) 源代码之中还包括大量的命令,用在排版公式、划分文档结构、控制样式等等不同的地方。
\(\LaTeX\) 命令和环境
LATEX 命令以反斜线 \ 开头,为以下两种形式之一:
- 反斜线和后面的一串字母,如 \LaTeX。它们以任意非字母符号(空格、数字、标点等)作
为分隔符。 - 反斜线和后面的一个非字母符号,如 $。它们无需分隔符。
要注意 \(\LaTeX\) 命令是对大小写敏感的,比如输入 \LaTeX 命令可以生成错落有致的 \(\LaTeX\) 字母组合,但输入 \Latex 或者 \LaTex 什么都得不到,还会报错。字母形式的 \(\LaTeX\) 命令忽略其后的所有空格。如果要人为引入空格,需要在命令后面加一对括号阻止其忽略空格:
Shall we call ourselves
\TeX users
or \TeX{} users?
大多数的 \(\LaTeX\) 命令是带一个或多个参数,每个参数用花括号 { 和 } 包裹。有些命令带一个或多个可选参数,以方括号 [ 和 ] 包裹。还有些命令在命令名称后可以带一个星号 *,带星号和不带星号的命令效果有一定差异。
\(\LaTeX\) 还引入了环境的用法,用以令一些效果在局部生效,或是生成特定的文档元素。\(\LaTeX\) 环境的用法为一对命令 \begin 和 \end:
\begin{⟨environment name⟩}{⟨arguments⟩}
. . .
\end{⟨environment name⟩}
其中 ⟨environment name⟩ 为环境名,\begin 和 \end 中填写的环境名应当一致。\begin 在
⟨environment name⟩ 后可以带一个或多个参数,甚至可选参数。环境允许嵌套使用。
除了 \(\LaTeX\) 环境之外,花括号本身也起到分组的作用,起到类似环境的令效果在局部生效
的作用,例如 5.1.1 和 5.1.2 小节中介绍的修改字体和字号的命令用法。
\(\LaTeX\) 源代码结构
\(\LaTeX\) 源代码以一个 \documentclass 命令作为开头,它规定了文档使用的文档类:
\documentclass{...}
紧接着我们可以用 \usepackage 命令调用宏包:
\usepackage{...}
再接着,我们需要用以下一对命令来标记正文内容的开始位置和结束位置,而将正文内容写入其中:
\begin{document}
\end{document}
在 \documentclass 和 \begin{document} 之间的位置称为导言区,除了使用 \usepackage 调用宏包之外,一些对文档的全局设置命令也在这里使用。当然也可以什么都不写,一个宏包都不调用。一切视自己需求。
用命令行操作 \(\LaTeX\)
相信你看到这里已经急不可耐地想要写一个 \(\LaTeX\) 源代码试一试了。我们这就给一个最小的例子,见源代码 1.1。
有相当多的编辑器会提供“编译”按钮,不过笔者仍然觉得有必要了解一下其背后的工作原理。 \(\LaTeX\) 调用的程序都是基于命令行的,所以建议打开 Windows 命令提示符或者 Linux / macOS(OS X)的终端,按照本手册的范例尝试一下调用命令行程序编译。
\documentclass{article}
\begin{document}
‘‘Hello world!’’ from \LaTeX.
\end{document}
源代码 1.1: \(\LaTeX\) 的一个最简单的源代码示例。
引擎、格式和命令
- 引擎:全称为排版引擎,是读入源代码并编译生成文档的程序,如 pdfTEX、XeTeX 等。有时也直接称为编译器。
- 格式:是定义了一组命令的代码集。\(\LaTeX\) 就是最广泛应用的一个格式,高德纳本人还编写了一个简单的 plain \(\TeX\) 格式,没有定义诸如 \documentclass 和 \section 等等命令。
- 命令:是引擎和格式二者的结合体。如下文要用到的 pdflatex 命令是结合 pdfTEX 引擎和 \(\LaTeX\)
格式的一个命令,用于编译类似源代码 1.1 的代码并生成文档。
latex 命令和 \(\LaTeX\) 格式往往容易混淆,在同他人讨论关于 \(\LaTeX\) 的时候需要明确。本手
册为避免混淆,文中的 \(\LaTeX\) 一律指的是格式,命令则用等宽字体 latex 表示。
用一个简单的表格总结一下:
$$\begin{array}{c\|cc}
n & plain\TeX\text{格式} & \LaTeX\text{格式} \\ \hline
\TeX\text{引擎} & tex & N/A \\
pdfTeX\text{引擎} & etex & latex \\
& pdftex & pdflatex \\
XeTeX\text{引擎} & xetex & xelatex \\
\end{array}$$
latex 命令
假使你的计算机上已经安装了 LATEX 依赖的程序和工具(安装方法在附录 A 有简单介绍)。我们将源代码 1.1 拷贝到一个文本文件中,保存为 helloworld.tex。然后在命令行输入:
latex helloworld.tex
(也可以输入不带扩展名的 latex helloworld)。
此时命令行会闪过许多信息。如果一切正常,在目录中将生成 helloworld.dvi 以及其它文
件。这个扩展名为 dvi 的文件就是编译生成的文档。
Linux 系统下,可以在命令行调用 xdvi 程序打开这个文档:
xdvi helloworld.dvi
Windows 系统下大多预装了 yap 软件 (MikTEX) 或 dviout 软件 (TEX Live),可以双击 helloworld.dvi 打开它。
要进一步生成现今流行的 PDF 文档格式,我们还需要用额外的程序将 dvi 转为 pdf:
dvipdfmx helloworld.dvi
然后就可以用查看 PDF 的软件(Adobe Reader / Foxit Reader 等)打开生成的 helloworld.pdf 查看了。
pdflatex 和 xelatex 命令
这两个命令相比于 latex 命令更为方便,我们可以直接生成 PDF:
pdflatex helloworld.tex
或者
xelatex helloworld.tex
xelatex 命令有着各种新的特性,如能够直接支持使用系统预装的字体、原生支持 UTF-8 编码等。尤其是排版中文,xelatex 命令配合适当的宏包是现在最新、最方便的方式(详见 2.2 节)。
这篇先写到这里,内容有些太冗杂了,等时间充足时再补充吧_(:з」∠)_
参考文档:
lshort-zh-cn.pdf