> 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-tw/geng-duo-zhu-ti/01-a-six-part-series-how-do-tex-macros-actually-work.md).

# 六部分系列：TeX 巨集實際上如何運作？

## 關於本系列

本系列文章有一個雄心勃勃的目標：逐步解釋， *如何* TeX 巨集，例如 LaTeX 指令，究竟是如何運作的——透過探索 TeX 引擎軟體內部發生的程序。它試著講述 TeX 的處理行為：

* 讀取輸入字元並使用類別碼；
* 字元與指令 token 的產生，以及 TeX 使用的公式；
* TeX 如何辨識，然後處理 TeX 指令；
* 將巨集定義與巨集參數作為 token 列表儲存的內部細節——使用由 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 如何使用類別碼來建立字元 token，以及 TeX 如何透過使用類別碼 0（「跳脫字元」）來識別並處理指令。

### 第 3 部分：從輸入文字到指令

本文深入探討 TeX 如何辨識並處理在輸入中偵測到的指令。我們探討 TeX 如何儲存與擷取有關指令的資訊：指令代碼、指令修飾子，並概覽一些 TeX 用來儲存從輸入中讀入項目資訊的內部變數。本文有些內容相當底層，第一次閱讀時可以先略過。

### 第 4 部分：巨集的結構

我們引入並使用下列「架構」來描述巨集的結構：

```
<TeX macro primitive><macro name><parameter text>{<replacement text>}
```

接著我們透過一系列範例來說明巨集的 `<參數文字>` 作為一種「token 範本」，可透過使用充當 *分隔符號*.

### 第 5 部分：Token 列表與 TeX 的內部巨集儲存

本文詳細探討 TeX 如何使用 token 列表來儲存巨集定義。透過大量圖解，這些圖解是用經特別修改的 TeX 版本產生的，我們探討 TeX 用來識別並處理使用者巨集參數的特殊 token。

### 第 6 部分：巨集展開與處理

在第 6 部分中，我們使用一些詳細圖解來解釋並探討巨集展開的確切含義，以及在將巨集參數送入某個巨集的 . 之前，TeX 對其 token 化所造成的後果。

## 簡短說明：使用「TeX」而非 LaTeX

如本文所討論的 [名稱裡有什麼：TeX 的多種風味指南](/latex/zh-tw/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 軟體中的核心指令（原始指令）。LaTeX 指令，例如 `\newcommand`，本身也是巨集：具有特定程式化行為的指令，而這些指令最終是由多層較低階的 TeX 原始指令構成。若要更好地理解 TeX 的基本行為，我們必須使用 TeX 原始指令，而不是 LaTeX 巨集。

## 範例與圖形

我們不只依賴一組用來示範 TeX 各種功能、邊界情況與行為的範例巨集，也使用大量圖形來深入檢視 TeX 本身，以看見 *如何* 和 *為什麼* 其巨集處理之所以如此運作的原因。許多圖形（token 列表／節點圖）是使用經特別修改的 Knuth 原始 TeX 版本製作的。

Overleaf 在 Knuth 的 TeX 上加入額外程式碼（以 C 撰寫），以「掛接」到 TeX 的巨集處理並探索通常使用者無法存取的資料與資料結構。每次呼叫巨集時，修改版 TeX 引擎都會產生額外的輸出檔案，其中包含可用下列方式處理的格式資料 [Graphviz](https://www.graphviz.org/)，一套開源的圖形視覺化程式。最終成果是圖形（節點列表圖），可精確顯示 TeX 如何儲存巨集的定義，以及使用者在呼叫巨集時所提供任何參數的圖形表示。

出於必要，本系列的目標要求討論廣泛的主題，其中許多相當底層，一開始看來可能與你排版文件的工作相距甚遠。希望在深入探究之後，你能建立起更好的理解基礎，最終為你節省許多時間，也或許能減少挫折感。我們也希望，伴隨本系列的特別生成圖形，能提供獨特而寶貴的洞見，幫助並支持任何希望更深入了解 TeX 巨集的讀者。

## Overleaf 客製化版本的 TeX

這段影片簡短示範了 Overleaf 修改版的 TeX，其經調整後可產生 Graphviz 節點圖（`.gv` 檔）——那些變更不會影響 TeX 行為的其他任何方面。這些 `.gv` 檔案包含 TeX token 列表的表示，用來儲存巨集定義與巨集參數。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-tw/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.
