hiyouga / hiyouga-blog-project

填坑ing...
http://blog.hiyouga.top
MIT License
7 stars 3 forks source link

一份不太简短的 LATEX 2ε 介绍 #30

Closed hiyouga closed 5 years ago

hiyouga commented 6 years ago

\(\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\) 命令和代码结构

\(\LaTeX\) 的源代码本质上是文本文件。哪怕用 Windows 的记事本或者 Linux 的 gedit 等简单的编辑器,也可以编写一份 \(\LaTeX\) 源代码并编译出文档来。专用于编辑 \(\LaTeX\) 源代码的编辑器如 TeXworks / TeXstudio / WinEdt 等提供了一些语法高亮、命令补全等功能,以及调用排版引擎的一些按钮。 除了文字本身,\(\LaTeX\) 源代码之中还包括大量的命令,用在排版公式、划分文档结构、控制样式等等不同的地方。

\(\LaTeX\) 命令和环境

LATEX 命令以反斜线 \ 开头,为以下两种形式之一:

要注意 \(\LaTeX\) 命令是对大小写敏感的,比如输入 \LaTeX 命令可以生成错落有致的 \(\LaTeX\) 字母组合,但输入 \Latex 或者 \LaTex 什么都得不到,还会报错。字母形式的 \(\LaTeX\) 命令忽略其后的所有空格。如果要人为引入空格,需要在命令后面加一对括号阻止其忽略空格:

Shall we call ourselves
\TeX users
or \TeX{} users?

20180223104823 大多数的 \(\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\) 的一个最简单的源代码示例。

引擎、格式和命令

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