> 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/39-mltex-enctex-and-synctex-tex-extensions.md).

# MLTeX、EncTeX 與 SyncTeX TeX 擴充

## TeX 擴充套件的一些背景細節

TeX 有著悠久的發展歷史——如今已超過 4 個年代！在那段期間，TeX 的新「版本」陸續開發出來——例如 e-TeX、pdfTeX、XeTeX、LuaTeX 等等。除了具備一整套額外功能的全新引擎之外，還有各種 *擴充套件* ，通常著重於實作某個特定功能，以增強 Knuth 原始軟體。

隨著現代 TeX 引擎（例如 XeTeX 和 LuaTeX）的出現，一些舊式 TeX 擴充套件的需求與使用已逐漸淡化，因為較新的 TeX 引擎帶來了強大的額外功能——例如內建支援 UTF-8 編碼文字。本頁的目的，是提供一些關於擴充套件的說明，包括 MLTeX 和 EncTeX，你可能仍會在 [TeX 引擎的命令列選項](/latex/zh-tw/geng-duo-zhu-ti/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md)中看到它們被提及。MLTeX 和 EncTeX 都已不再開發，但一個非常有用的擴充套件 SyncTeX 仍持續積極開發，並受 Overleaf 支援。

## MLTeX

*多語言 TeX*，或稱 MLTeX，是在 1992–5 年間開發的一種 TeX 修改版，讓使用一般 Computer Modern（CM）字型時，也能對含重音字母的單字進行連字處理。

### 啟用（開啟）MLTeX

MLTeX 的設計是作為所謂的 `.fmt` （格式檔）的一部分來運作；實際上，它是一組 TeX 巨集的預編譯二進位版本。要建立格式檔，你要把 TeX 引擎切換到所謂的 `INI` 模式，處理巨集集合，然後下達 `\dump` 命令來寫出 `.fmt` 檔案。請參閱 [這篇文章](/latex/zh-tw/shen-ru-wen-zhang/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md) 以了解 INI 模式的討論。

若要啟用 MLTeX， *對於支援它的引擎*，例如 pdfTeX，你會寫入

```
pdftex -ini -mltex *pdfetex.ini
```

其中 `pdfetex.ini` 是 TeX Live 發行版中包含的一個檔案。

**為什麼要加星號（`*`)?** 星號會讓 pdfTeX 進入所謂的「擴充模式」，以啟用 e-TeX 原始命令的支援。如果你省略它並輸入 `pdftex -ini -mltex pdfetex.ini` 你會收到一個錯誤：

```
這是 pdfTeX，版本 3.14159265-2.6-1.40.19（INITEX）
 \write18 已啟用。
MLTeX v2.2 已啟用
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! e-TeX 嚴重錯誤：此檔案只能在擴充模式下處理；
  你是不是忘了加星號？
```

**注意**：與其使用星號啟用「擴充模式」，你也可以改用 `-etex` 命令列選項：

```
pdftex -ini -etex -mltex pdfetex.ini
```

**注意**：使用 `-mltex` 命令列選項搭配 `.fmt` 一個 *未產生* 且啟用 MLTeX 的檔案時，將 *不是* 可正常運作：MLTeX 必須透過適當的格式檔來「啟用」。

當你在 `-mltex` 選項 `.fmt` 檔案建立期間使用時，會將一個值為「true」的布林變數寫入 `.fmt` 檔案中，告知 TeX 引擎 MLTeX 擴充套件已被啟用，並應提供給使用者。如果你沒有明確設定 `-mltex` 選項，那麼對應的變數將為「false」。如果偵測到該變數的值是「false」（當該 `.fmt` 檔案在 TeX 執行期間重新載入時），那麼嘗試使用 MLTeX 擴充套件將導致 `未定義的命令……` 錯誤——因為 MLTeX 原始命令尚未被註冊（載入），因此無法辨識。

執行 `pdftex -ini -mltex *pdfetex.ini` 後，在命令列上你會看到類似下列的文字，顯示 MLTeX v2.2 已啟用：

```
這是 pdfTeX，版本 3.14159265-2.6-1.40.19（INITEX）
\write18 已啟用。
進入擴充模式
MLTeX v2.2 已啟用
....
....
....
開始寫入檔案 pdfetex.fmt
....
沒有輸出頁面。
轉錄內容寫入 pdfetex.log。
```

這會產生一個 `.fmt` 名為 `pdfetex.fmt` 的檔案，使你能使用 MLTeX 命令：

```
pdftex -fmt=pdfetex <yourfile.tex>
```

其中 `<yourfile.tex>` 可以使用 MLTeX 專用原始命令

MLTeX 原本是以一個獨立的變更檔 [mltex.ch](http://tug.ctan.org/systems/generic/mltex/mltex.ch)發行，該檔可與 Knuth 的主來源碼（[`tex.web`](https://ctan.org/tex-archive/systems/knuth/dist/tex?lang=en)）合併，以推導出一個名為 MLTeX 的 TeX 新版本，其中包含多個新的原始命令。如今，來自 `mltex.ch` 的 MLTeX 程式碼已 `tex.ch` 被納入主

### MLTeX 原始命令

以下說明大多整理並轉載自檔 `web2c.info` 所包含的 [TeX Live](https://tug.org/texlive/) 發行版。

* **`\charsubdef`**：字元替代定義。宣告如何使用兩個字元字形（這兩個字形確實存在）來建構一個帶重音字元字形（不一定存在於目前字型中）。

  ```
  \charsubdef COMPOSITE [=] ACCENT BASE
  ```

  COMPOSITE、ACCENT 與 BASE 都是字型字形編號，以一般 TeX 語法表示：\`\e\` 以符號形式、'145 代表八進位、"65 代表十六進位、101 代表十進位。因此它會定義一個字元字形代碼，無論是以單一字元輸入或使用 `\char` 原始命令，將對應到字型字形或一個 `\accent` 字形建構。

  例如，若你假設 e-circumflex 的字形代碼為 138（十進位），且你使用的是 Computer Modern 字型，它們在 18 號位置有抑揚符號重音，且小寫 ‘e’ 位於一般 ASCII 十進位 101 位置，那麼你會使用 `\charsubdef` 如下：

  ```
  \charsubdef 138 = 18 101
  ```
* **`\charsubdefmax`**：設定 `\charsubdef` 清單中的最大值。舉例：

  ```
  \charsubdefmax=-1 % 停用所有替代
  \charsubdefmax=256 % 啟用所有替代
  ```
* **`\tracingcharsubdef`**：追蹤替代。為了協助診斷 `\charsubdef`的問題，MLTeX 提供一個原始參數 `\tracingcharsubdef`。若為正值，則每次使用 `\charsubdef` 時都會被回報。這有助於追查字元何時被重新定義。

## EncTeX

EncTeX 是在 1997–2004 年間開發的一種 TeX 擴充套件，透過加入新的原始命令，提供彈性的輸入／輸出重新編碼功能——例如，提供在進入 TeX 的途中轉換輸入的一種方式。舉例來說，它允許將多位元組序列（例如 UTF-8 編碼）轉換後，供標準 8 位元 TeX 引擎使用。

### 啟用（開啟）EncTeX

與 MLTeX 一樣，EncTeX 的設計也是作為所謂的 `.fmt` （格式檔）的一部分來運作——請見 [MLTeX](#mltex)上方對格式檔／INI 模式的說明。

若要啟用 EncTeX， *對於支援它的引擎*，例如 pdfTeX，你會透過寫入以下內容來建立一個啟用 EncTeX 的格式檔

```
pdftex -ini -enc *pdfetex.ini
```

其中 `pdfetex.ini` 是 TeX Live 發行版中包含的一個檔案。

**為什麼要加星號（`*`)?** 星號會讓 pdfTeX 進入所謂的「擴充模式」，以啟用 e-TeX 原始命令的支援。如果你省略它並輸入 `pdftex -ini -mltex pdfetex.ini` 你會收到一個錯誤：

```
這是 pdfTeX，版本 3.14159265-2.6-1.40.19（INITEX）
 \write18 已啟用。
MLTeX v2.2 已啟用
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! e-TeX 嚴重錯誤：此檔案只能在擴充模式下處理；
  你是不是忘了加星號？
```

**注意**：與其使用星號啟用「擴充模式」，你也可以改用 `-etex` 命令列選項：

```
pdftex -ini -etex -mltex pdfetex.ini
```

該 `-enc` 命令列選項會促使 pdfTeX 引擎透過將一些資料寫入產生的 `pdfetex.fmt` 格式檔來啟用 EncTeX。

**注意**：使用 `-enc` 命令列選項搭配 `.fmt` 一個 *未產生* 若啟用 EncTeX，將 *不是* 可正常運作：EncTeX 必須透過適當產生的格式檔來「啟用」。

### EncTeX 原始命令

EncTeX 會為 TeX 引擎新增 10 個新的原始命令：

* 初始版本（1997）中的 3 個原始命令：
* `\xordcode`
* `\xchrcode`
* `\xprncode`
* 2003 年新增的 7 個原始命令（用於 UTF-8 支援）：
* `\mubyte`
* `\endmubyte`
* `\mubytein`
* `\mubyteout`
* `\mubytelog`
* `\specialout`
* `\noconvert`

這些原始命令的用法與行為都有詳盡記載於 [EncTeX 參考手冊](http://mirrors.ctan.org/systems/enctex/encdoc-e.pdf)中，該手冊由 EncTeX 的作者 Petr Olšák 撰寫。為避免在此重複過多內容，有興趣的讀者請參考該文件。

### 關於 EncTeX 的進一步資訊

* [EncTeX 第二版：UTF-8 支援](http://mirrors.ctan.org/systems/enctex/eurotex2003-enctex.pdf)：EncTex 作者 Petr Olšák 的一篇文章。
* [EncTeX 參考手冊](http://mirrors.ctan.org/systems/enctex/encdoc-e.pdf) （英文）。

### 同時啟用（開啟）MLTeX 與 EncTeX

要同時啟用 MLTeX 與 EncTeX，你會使用如下命令列產生適當的格式檔

```
pdftex -ini -enc -mltex *pdfetex.ini
```

其中 `pdfetex.ini` 是 TeX Live 發行版中包含的一個檔案。

**為什麼要加星號（`*`)?** 星號會讓 pdfTeX 進入所謂的「擴充模式」，以啟用 e-TeX 原始命令的支援。如果你省略它並輸入 `pdftex -ini -enc -mltex pdfetex.ini` 你會收到一個錯誤：

```
這是 pdfTeX，版本 3.14159265-2.6-1.40.19（INITEX）
 \write18 已啟用。
MLTeX v2.2 已啟用
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! e-TeX 嚴重錯誤：此檔案只能在擴充模式下處理；
  你是不是忘了加星號？
```

**注意**：與其使用星號啟用「擴充模式」，你也可以改用 `-etex` 命令列選項：

```
pdftex -ini -etex -enc -mltex pdfetex.ini
```

執行上述命令列後，你會看到類似以下的訊息，以告知 MLTeX 與 EncTeX 都已啟用：

```
這是 pdfTeX，版本 3.14159265-2.6-1.40.19（INITEX）
 \write18 已啟用。
進入擴充模式
MLTeX v2.2 已啟用
 encTeX v. 2004 年 6 月，重新編碼已啟用。
....
....
....
開始寫入檔案 pdfetex.fmt
....
沒有輸出頁面。
轉錄內容寫入 pdfetex.log。
```

和 `pdfetex.fmt` 將產生一個格式檔，並同時啟用 MLTeX 與 EncTeX。

## SyncTeX

SyncTeX 擴充套件自 2008 年起便已可用，並持續由其創建者 Jérôme Laurens 積極開發。它被廣泛使用，包括 Overleaf 在內，且目前所有 TeX 引擎都支援它。

### SyncTeX 的作用是什麼？

當你檢視一份由 TeX 排版的文件時，或許是在提交給出版商之前進行校對／檢查，你可能會發現一個錯誤，並需要在 TeX 原始碼中修正。然而，在 TeX 檔案中找到正確位置可能很棘手，尤其當文件內容相當龐大時。同樣地，你也可能想反向操作：從 TeX 原始檔中的某個位置直接跳到最終排版後 PDF 的頁面位置。在這兩種情況下，都需要 *同步* TeX 檔案中的特定位置與其在排版結果顯示中的對應位置：而這正是 SyncTeX 所提供的——一種自動將 TeX 檔案中的位置與排版文件中的頁面位置連結起來的方法。

如果啟用了 SyncTeX，它會寫出一個副檔名為 `.synctex.gz` （gzip 壓縮）或 `.synctex` （未壓縮）的特殊檔案，依據提供給 SyncTeX 的 [命令列選項](#synoptions)而定。支援 SyncTeX 的文字編輯器與（多數）PDF 檢視器可以使用這些檔案，在輸入（TeX 程式碼）與輸出（排版後 PDF 的顯示）之間執行必要的同步。顯然，若使用者的文字編輯器與 PDF 文件檢視器沒有適當功能，能夠根據 SyncTeX 寫出的 `.synctex.gz` （或 `.synctex`）檔案中由 SyncTeX 寫出的資料。

除了 TeX 引擎內的功能——用來產生 `.synctex.gz` 檔案——SyncTeX 也提供一個特殊的 [剖析器](https://github.com/jlaurens/synctex/) ，可讀取 `.synctex.gz` （或 `.synctex`）檔案以擷取相關的頁面／行位置資訊。應用程式會使用該剖析器來提供對 SyncTeX 的支援。

### 啟用（開啟）SyncTeX

支援 SyncTeX 的 TeX 引擎有兩種方式來啟用／停用 SyncTeX：

* 一個命令列選項： `-synctex=NUMBER`
* 一個 `.tex` 檔案中的命令： `\synctex` 原始

### 在命令列上使用 SyncTeX

您可以使用 `-synctex=NUMBER` 選項，當你執行支援 SyncTeX 的 TeX 引擎時，例如 pdfTeX。

#### 範例

* 啟用 SyncTeX：輸出 `.synctex.gz` （gzip 壓縮檔）：

```
pdftex -synctex=1 myfile.tex
```

產生 `myfile.synctex.gz`

* 啟用 SyncTeX：輸出 `.synctex` （未壓縮檔）：

```
pdftex -synctex=-1 myfile.tex
```

產生 `myfile.synctex`

* 停用 SyncTeX：

```
pdftex -synctex=0 myfile.tex
```

不會產生任何 SyncTeX 輸出。

### SyncTeX 唯一的原始命令

SyncTeX 提供一個原始命令 `\synctex`，使用者可以將其加入他們的 `.tex` 檔案：

* 啟用 SyncTeX： `\synctex=1`
* 停用 SyncTeX： `\synctex=0`

### 關於 SyncTeX 的進一步資訊

* [Jérôme Laurens 撰寫的 TUGBoat 文章](http://www.tug.org/TUGboat/tb29-3/tb93laurens.pdf)，SyncTeX 的作者。
* 該 [GitHub 儲存庫](https://github.com/jlaurens/synctex) ，SyncTeX 剖析器的。


---

# 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/39-mltex-enctex-and-synctex-tex-extensions.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.
