跳至内容
Topos Uranos

摘要

本课结束本课程的第一单元,即 LaTeX 入门单元。它重建从排版到文档排错的概念与操作之链,在每一环指出用到哪条原理、它在哪一课中确立;把已取得的成果放回课程计划中去衡量,并指明哪些只是略有触及的问题留给后面的单元;在结业测验中重复入门测验的各项技能;最后给出六道挑战题,难度高于各课的习题,要求综合几课的工具,诊断出错的文档,或根据描述规划一份文档。

学习目标

  1. 重建本单元概念与操作的顺序,指出每一项所依据的原理。
  2. 解释源文件的读取规则、源文件的结构剖析与日志信息之间的关系。
  3. 区分本单元已经确立的内容与只是预告、将由后续单元展开的内容。
  4. 诊断同时因多种原因出错的文档,并依据日志安排修改的顺序。
  5. 根据对文档内容的描述,规划其导言区和正文。

本单元的收获

本单元的目标,是让从未用过 LaTeX 的人能够独立编写、编译并修改一份简短的文档。这一目标已经达到,只有一项保留,早在导言中就已声明:假定读者已经会在电脑上操作文件和文件夹。在这一前提下,走过的路可以读作一条分为四段的链,其中每个概念或操作都依靠前面的概念或操作。

什么是 LaTeX

什么是 LaTeX一课从排版出发,即安排每个字、每一行和每一页的全部决定,并从学术文本的特殊要求出发。由此推出标记语言的好处:作者声明每样东西是什么,由文档类决定它看起来怎样,这就是内容与形式的分离,它贯穿整个单元。接着,这一课区分了三种排版引擎,选定了 LuaLaTeX,它读取 Unicode 并加载系统字体;确定了引擎读取源文件的三条规则(连续的空格算作一个,空行结束段落,百分号开始注释);并描述了编写、编译、阅读的循环,以及每次编译留下的日志和辅助文件。

工作环境

工作环境一课把这一描述变成了实际的安装:一个发行版,即 TeX Live、MiKTeX 或 MacTeX,连同它的宏包管理器;Texmaker,设置为用 LuaLaTeX 编译、以 UTF-8 保存,并让源文件与 PDF 同步;以及 Overleaf,它的默认编译器必须在每个项目中更改。这一课还确立了一个项目一个文件夹的规则,区分作者写下的文件和编译重新生成的文件,并指出 PDF 可能不变的三个原因:严重错误使它无法写出,查看器锁定了它或没有重新加载,以及编译的是另一个文件。

文档的结构剖析

文档的结构剖析一课逐一解释了最小文档当作配方给出的各个部分。导言区负责设置,正文负责排版,因为到了 \begin{document},设置就关闭了。命令分为控制词和控制符:控制词的名称在第一个非字母字符处结束,并吃掉其后的空格;控制符则不吃掉空格。命令接受花括号中的必选参数和方括号中的可选参数,有些还有带星号的形式。声明的作用持续到包含它的分组结束;环境也是分组,必须按与打开相反的顺序关闭。十个保留字符不是被印出来,而是做某件事,每个都有自己的印出方式。宏包和文档类及其选项补全了整个结构。

编译与改错

编译与改错一课把前面的一切汇总起来。它解释了引擎分遍工作,所以交叉引用和目录要在下一遍才补全,而 latexmk 会自动重复各遍;教人根据感叹号开头的那一行、行号以及把已读部分和未读部分分开的断点来读错误;区分了必须修改的错误、警告和盒子提示;把最常见的信息与它们的原因联系起来,而这些原因几乎都是违反了源文件的结构;并提出一套策略:先读第一个错误,把源文件对半分割,把问题缩减为最小示例,清除辅助文件,再搜索提示信息。

下图把四段汇成一条链。中间一列的每个节点是一个概念或一项操作,按彼此依赖的顺序编号,并用弧线连到它所用到的前面的环节;四周浮动的是支撑,即这条链一再求助的原理,每个支撑用实线连到依靠它的环节,用虚线连到确立它的环节,只有未经学习而直接接受的那个支撑画成圆环。点击一个支撑,会突出显示所有用到它的环节;每个环节都链接到讲解它的那一课。

链的支柱

  • A文件与文件夹. 在电脑上日常操作文件和文件夹:创建、命名、查找、复制,并按扩展名区分它们。从导言起就假定已经掌握。 本单元中不加证明而采用。
  • B内容与形式. 作者声明每样东西是什么,文档类和导言区决定它看起来怎样。 确立于: 2. 标记语言.
  • CUnicode 与字体. LuaLaTeX 以 Unicode 读取按 UTF-8 保存的源文件,并加载系统字体;字体中没有的字符不会使编译停止,但在 PDF 中缺失。 确立于: 3. 引擎与 LuaLaTeX.
  • D日志. 每次编译都把它做了什么记入日志,连同错误和警告;出了问题时首先要读的就是它。 确立于: 5. 源文件、编译与 PDF.
  • E分组与作用范围. 声明的作用持续到包含它的分组结束;花括号和环境打开的分组,必须按与打开相反的顺序关闭。 确立于: 12. 分组与环境.
  • F保留字符. 有十个字符不是被印出来,而是做某件事;在正文中原样写出,会引起错误或不易察觉的效果。 确立于: 13. 保留字符.
  • G第一个错误. 为了从错误中恢复,引擎会猜测,而它的猜测可能引出新的错误;只有第一个错误确定对应于源文件。 确立于: 16. 读懂一个错误.
  1. 第 1 段 什么是 LaTeX

    • 解释什么是排版,以及学术文本为什么需要它。
    • 用标记语言把内容与形式分开。
    • 根据语言、文字和字体选择引擎,并说明选用 LuaLaTeX 的理由。
    • 根据关于空格、段落和注释的规则,预测一段源文件会产生什么。
    1. 排版. 排版就是决定每个字落在哪里、每一行在哪里结束、每一页在哪里断开;学术文本有公式、交叉引用、脚注和多种语言,对排版的要求更高。

      证明于: 什么是 LaTeX.

    2. 标记语言. 在 LaTeX 这一建立在 TeX 之上的宏集中,作者在纯文本文件里标记内容,形式则由文档类和导言区导出。

      使用: 1. 排版. 证明于: 什么是 LaTeX.

    3. 引擎与 LuaLaTeX. pdfLaTeX、XeLaTeX 和 LuaLaTeX 理解同一种 LaTeX,但只有后两者读取 Unicode 并加载系统字体;本课程使用 LuaLaTeX。

      使用: 2. 标记语言. 证明于: 什么是 LaTeX.

    4. 空格、段落与注释. 多个空格算作一个,一个换行算作一个空格;空行结束段落;百分号把该行其余部分连同换行变成注释。

      使用: 2. 标记语言. 证明于: 什么是 LaTeX.

    5. 源文件、编译与 PDF. 写好源文件,由引擎编译,再阅读 PDF;旁边留下日志和辅助文件。

      使用: 3. 引擎与 LuaLaTeX. 依据: A (文件与文件夹). 证明于: 什么是 LaTeX.

  2. 第 2 段 工作环境

    • 根据系统、空间和网络连接选择发行版和安装方式。
    • 设置 Texmaker 和 Overleaf,使其用 LuaLaTeX 编译。
    • 把每个项目放在自己的文件夹中,并决定保留哪些文件。
    • 解释为什么修改之后 PDF 可能没有变化。
    1. 发行版与宏包. 发行版汇集了引擎、宏包、字体,以及一个安装缺失内容的管理器:TeX Live、MiKTeX 或 MacTeX,完整或基本安装。

      使用: 3. 引擎与 LuaLaTeX. 依据: A (文件与文件夹). 证明于: 工作环境.

    2. Texmaker 与 Overleaf. Texmaker 设置为用 LuaLaTeX 编译、以 UTF-8 保存并让源文件与 PDF 同步;在 Overleaf 中,每个项目都要选择 LuaLaTeX。

      使用: 5. 源文件、编译与 PDF, 6. 发行版与宏包. 依据: C (Unicode 与字体). 证明于: 工作环境.

    3. 文件夹与辅助文件. 每份文档都有自己的文件夹;作者写下或提供的文件要保留,编译会重新生成的辅助文件可以删除。

      使用: 5. 源文件、编译与 PDF, 7. Texmaker 与 Overleaf. 依据: A (文件与文件夹). 证明于: 工作环境.

    4. 不变的 PDF. PDF 不变,要么是编译没有写出它,要么是查看器锁定了它或没有重新加载,要么是编译了另一个文件;由日志和 PDF 的时间来判断。

      使用: 8. 文件夹与辅助文件, 7. Texmaker 与 Overleaf. 依据: D (日志). 证明于: 工作环境.

  3. 第 3 段 文档的结构剖析

    • 区分导言区和正文,并决定每条命令放在哪里。
    • 认出命令的各个部分,并预测其名称在哪里结束。
    • 预测声明的作用范围,并正确嵌套环境。
    • 印出十个保留字符,并解释它们不加保护时会做什么。
    1. 导言区与正文. 导言区加载宏包、作出决定,但不排出任何内容;正文是唯一进行排版的地方;只做定义或保存的命令两处都可以放,最好放在导言区。

      使用: 5. 源文件、编译与 PDF. 依据: B (内容与形式). 证明于: 文档的结构剖析.

    2. 命令. 控制词在第一个非字母字符处结束,并吃掉其后的空格;控制符只有一个字符,不吃掉空格;参数放在花括号或方括号中。

      使用: 4. 空格、段落与注释. 证明于: 文档的结构剖析.

    3. 分组与环境. 声明的作用持续到其分组结束;环境就是分组,在另一个环境内打开的环境要先于它关闭。

      使用: 11. 命令. 依据: B (内容与形式). 证明于: 文档的结构剖析.

    4. 保留字符. 反斜杠、花括号、百分号、美元符号、和号、井号、下划线、脱字符和波浪号不是被印出来,而是做某件事,每个都有自己的印出方式。

      使用: 11. 命令, 4. 空格、段落与注释. 证明于: 文档的结构剖析.

    5. 宏包与文档类. 宏包扩展 LaTeX 的能力,只能在导言区加载;文档类及其选项确定文档的整体形式。

      使用: 10. 导言区与正文, 6. 发行版与宏包. 依据: B (内容与形式). 证明于: 文档的结构剖析.

  4. 第 4 段 编译与改错

    • 解释交叉引用和目录为什么需要再编译一遍,并用 latexmk 编译。
    • 读懂日志中的一个错误:它的信息、它的行号和发现错误的位置。
    • 把最常见的错误与其可能的原因联系起来。
    • 用有条理的策略找出错误的真正原因,并决定哪些警告需要处理。
    1. 编译遍与 latexmk. 每一遍中,引擎把编号和标题写入辅助文件,供下一遍使用;latexmk 重复各遍,直到不再有变化。

      使用: 8. 文件夹与辅助文件. 依据: D (日志). 证明于: 编译与排错.

    2. 读懂一个错误. 错误由感叹号开头的那一行识别;以 l. 开头的那一行给出源文件的行号,并把该行分成已读部分和未读部分。

      使用: 9. 不变的 PDF, 11. 命令. 依据: D (日志). 证明于: 编译与排错.

    3. 常见错误. 未定义的命令或环境、未打开的公式、不配对的花括号、缺失的文件以及导言区中的文字:每条信息都暴露出对源文件结构某条规则的违反。

      使用: 16. 读懂一个错误, 10. 导言区与正文, 12. 分组与环境, 13. 保留字符, 14. 宏包与文档类. 依据: E (分组与作用范围), F (保留字符). 证明于: 编译与排错.

    4. 排错策略. 先读第一个错误,在不切断分组或环境的前提下把正文对半分割,缩减为最小示例,清除辅助文件,再搜索提示信息。

      使用: 17. 常见错误, 4. 空格、段落与注释, 8. 文件夹与辅助文件. 依据: D (日志), E (分组与作用范围), G (第一个错误). 证明于: 编译与排错.

    5. 警告. 警告不会使编译停止,但有些需要处理:未定义的引用、要求再次编译、超出版心的行以及缺失的字符。

      使用: 15. 编译遍与 latexmk, 16. 读懂一个错误. 依据: C (Unicode 与字体), D (日志). 证明于: 编译与排错.

走向文本. 这条链停在最小文档已不够用的地方:文本本身,连同它的语言、文字、脚注和引文,是下一单元的对象。