> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/zh-cn/geng-duo-zhu-ti/01-a-six-part-series-how-do-tex-macros-actually-work.md).

# 一个六部分系列：TeX 宏究竟是如何工作的？

## 关于本系列

本系列文章有一个宏大的目标：逐步解释， *如何* TeX 宏，例如 LaTeX 命令，究竟是如何工作的——通过探究发生在 TeX 引擎软件内部的过程。它试图讲述 TeX 的处理行为：

* 读取输入字符并使用类别码；
* 字符和命令记号的生成——以及 TeX 使用的公式；
* TeX 如何识别并处理 TeX 命令；
* 将宏定义和宏参数作为记号列表进行存储的内部细节——使用从 TeX 内部数据生成的图形；
* 并以探讨宏展开 *实际上* 的含义作结——使用来自 TeX 引擎内部的真实数据。

然而，由于 TeX 引擎是非常复杂的软件程序，我们不可能覆盖所有内容，但我们已尽力介绍 TeX 宏处理能力中最重要、最核心的功能。

#### 导航栏

每篇文章在正文前后都有以下导航栏，以便你能快速跳转到本系列中的另一篇文章：

[第1部分](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_1?preview=true) [第2部分](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_2?preview=true) [第3部分](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_3?preview=true) [第4部分](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_4?preview=true) [第5部分](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_5?preview=true) [第6部分](https://www.overleaf.com/learn/latex/Understanding_TeX_macros:_Part_6?preview=true)

### 第 1 部分：类别码

本文考察 TeX 类别码概念背后的原因：它们是什么，以及 TeX 如何使用它们将输入内容过滤为用于排版的内容和要执行的命令。

### 第 2 部分：通过 TeX 的“眼睛”读取输入

通过一系列图形，我们沿用一个经久不衰的比喻：TeX 拥有“眼睛”来读取（扫描）其输入。我们探讨 TeX 如何使用类别码来创建字符记号，以及 TeX 如何通过使用类别码 0（“转义字符”）来识别和处理命令。

### 第 3 部分：从输入文本到命令

本文深入探讨 TeX 如何识别并处理在输入中检测到的命令。我们研究 TeX 如何存储和检索有关命令的信息：命令代码、命令修饰符，并浏览一些 TeX 用于存储从输入中读入项目的信息的内部变量。文章中的某些内容相当底层，第一次阅读时可以跳过。

### 第 4 部分：宏的结构

我们引入并使用以下“框架”来描述宏的结构：

```
<TeX 宏原语><宏名><参数文本>{<替换文本>}
```

然后我们通过一系列示例来展示宏的作用和目的 `<参数文本>` 作为一个“记号模板”，它可以通过使用充当……的记号来构建 *定界符*.

### 第 5 部分：记号列表与 TeX 的内部宏存储

本文详细探讨 TeX 如何使用记号列表来存储宏定义。借助使用经特殊修改的 TeX 版本生成的大量图示，我们研究 TeX 用来识别和处理用户宏参数的专用记号。

### 第 6 部分：宏展开与处理

在第 6 部分中，我们使用一些详细图示来解释并探讨宏展开的确切含义，以及在将它们送入宏的……之前，TeX 对宏参数进行记号化所带来的后果。

## 简短说明：使用“TeX”而不是 LaTeX

如文章中所述 [名称中有什么：TeX 的多种变体指南](/latex/zh-cn/shen-ru-wen-zhang/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) 人们使用各种各样的术语来指代/描述 TeX、LaTeX 及其衍生物。因此，简要澄清一下在本系列语境中我们对“TeX”的用法/含义是值得的。

“TeX”略显令人困惑地，既是一个可执行程序的名称，也是一个排版语言的名称。为了区分二者，术语 *TeX 引擎* 用于区分可执行的 TeX 程序和排版语言。本系列中使用的一些具体数据、信息和细节来自对 Knuth 原始 TeX 软件源代码的详细考察，但所描述的原理适用于所有 TeX 引擎。因此，在整个讨论中，“TeX”的使用都应理解为某一种可执行的 TeX 引擎——例如 Knuth 原始的 TeX、pdfTeX、XeTeX 或 LuaTeX。

在这些文章中，我们使用 TeX 原始命令 `\def` 来定义我们的宏示例：我们不使用 LaTeX 命令 `\newcommand` 这几乎肯定对大多数 Overleaf 用户来说更熟悉。这样做有一个非常好的理由：我们的目标是理解 TeX 宏行为背后的基本原理，而要做到这一点，我们需要使用 TeX 软件内置的核心命令（原语）。诸如 `\newcommand`，本身也是宏：具有特定编程行为的命令，而这些命令最终是由更低层的 TeX 原始命令层层构造而成的。为了更好地理解 TeX 的基本行为，我们必须使用 TeX 原语，而不是 LaTeX 宏。

## 示例与图形

我们并不只是依赖一组专门用来展示 TeX 各种特性、边界情况和行为的示例宏，还使用大量图形来深入 TeX 内部，看看 *如何* 和 *为什么* 它的宏处理为何会以这样的方式工作。许多图形（记号列表/节点图）都是使用 Knuth 原始 TeX 的一个经过特殊修改的版本制作的。

Overleaf 对 Knuth 的 TeX 进行了改造，加入了额外的代码（用 C 编写），以“挂接”到 TeX 的宏处理过程，并探索通常用户无法访问的数据及数据结构。每次调用宏时，修改后的 TeX 引擎都会生成额外的输出文件，其中包含的数据格式可以用 [Graphviz](https://www.graphviz.org/)——一个开源的图形可视化程序。最终得到的是图形（节点列表图），它们准确展示了 TeX 如何存储宏定义，并以图形方式表示用户在调用宏时提供的任何参数。

出于需要，本系列的目标要求讨论范围广泛的主题，其中许多都相当底层，起初看起来可能与排版文档这项任务相距甚远。希望在深入探索之后，你能建立起一个更好的理解基础，最终为你节省大量时间，也许还会减轻挫败感。我们也希望，伴随本系列的这些特别生成的图形，能够提供独特而有价值的洞见，帮助并支持任何致力于更好理解 TeX 宏的读者。

## Overleaf 定制版 TeX

视频简要演示了 Overleaf 修改后的 TeX 版本，该版本经过改造可生成 Graphviz 节点图（`.gv` 文件）——这些更改不会影响 TeX 行为的其他方面。 `.gv` 文件包含用于存储宏定义和宏参数的 TeX 记号列表表示。Graphviz 可视化结果会导出为 SVG，然后导入到 [Inkscape](https://inkscape.org/) 中作进一步标注，然后再将图形纳入文章。

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/40EAwKxZnNwgxwe9SpAwNY/5bce5de21509f3324bc50527ec6815e7/texdemo.mp4>" %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/zh-cn/geng-duo-zhu-ti/01-a-six-part-series-how-do-tex-macros-actually-work.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
