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

# MLTeX、EncTeX、SyncTeX の TeX 拡張

## TeX 拡張に関する背景情報

TeX には長い開発の歴史があり、今では 4 दशक以上になります。その間に、e-TeX、pdfTeX、XeTeX、LuaTeX など、TeX の新しい「バージョン」が開発されてきました。完全に新しいエンジンに加えて、追加機能一式を備えたものだけでなく、さまざまな *拡張* があり、それらは通常、Knuth の元のソフトウェアを強化する特定の機能の実装に焦点を当てています。

XeTeX や LuaTeX のような現代の TeX エンジンの登場により、UTF-8 エンコードされたテキストの組み込みサポートのような強力な追加機能を新しい TeX エンジンが備えているため、いくつかの古い TeX 拡張の必要性や使用は薄れてきました。このページの目的は、MLTeX や EncTeX を含む、コマンドライン オプションで参照されているのを今でも見かけるかもしれない拡張について、いくつかの注記を提供することです。 [TeX エンジンのコマンドライン オプション](/latex/ja/sononotopikku/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md)。MLTeX と EncTeX はどちらももはや開発されていませんが、非常に便利な拡張の1つである SyncTeX は今も活発に開発されており、Overleaf に対応しています。

## MLTeX

*多言語 TeX*、または MLTeX は、1992〜5 年に、通常の Computer Modern (CM) フォントを使ってアクセント付き文字を含む単語のハイフネーションを可能にするための TeX の改変として開発されました。

### MLTeX を有効化する

MLTeX は、いわゆる `.fmt` （フォーマット ファイル）の一部として動作するよう設計されています。実際には、TeX マクロの集合を事前コンパイルしたバイナリ版です。フォーマット ファイルを作成するには、TeX エンジンをいわゆる `INI` モードにし、マクロ集合を処理してから `\dump` コマンドを出して `.fmt` ファイルを書き出します。 [この記事](/latex/ja/xiang-xi-ji-shi/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, Version 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 の致命的エラー: このファイルは拡張モードでのみ処理できます;
  アスタリスクを忘れたのではありませんか？
```

**注意**：拡張モードを有効にするためにアスタリスクを使う代わりに、 `TeXエンジンのコマンドラインオプション` コマンドライン オプションを使うこともできます：

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

**注意**： `-mltex` をコマンドラインで使い、 `.fmt` ファイルで *生成されなかった* MLTeX が有効な状態で *含まれていません* 機能します: MLTeX は適切なフォーマット ファイルを通じて「有効化」される必要があります。

を使用するとき `-mltex` オプションを `.fmt` ファイル作成中に、値が「true」のブール変数が `.fmt` ファイルに書き込まれ、MLTeX 拡張が有効化され、ユーザーが利用できるようにすることを TeX エンジンに知らせます。 `-mltex` オプションを明示的に設定しない場合、その対応する変数は「false」になります。その変数の値が「false」と検出された場合（その `.fmt` ファイルが TeX 実行中に再読み込みされるとき）、MLTeX 拡張を使おうとすると `未定義のコマンド...` というエラーになります—なぜなら MLTeX のプリミティブは登録（読み込み）されておらず、したがって認識されないからです。

実行した後 `pdftex -ini -mltex *pdfetex.ini` コマンドラインで実行すると、以下のようなテキストが表示され、MLTeX v2.2 が有効であることがわかります：

```
これは pdfTeX, Version 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` メインの変更ファイルに組み込まれており、ほぼすべての TeX エンジンのビルドに使われています。

### MLTeX のプリミティブ

以下の注記は主として `web2c.info` に含まれている [TeX Live](https://tug.org/texlive/) 配布版

* **`\charsubdef`**：文字置換の定義。現在のフォントに存在しない場合もあるアクセント付き文字グリフを、（実際に存在する）2つの文字グリフを使ってどのように構成するかを定義します。

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

  COMPOSITE、ACCENT、BASE の各項目はフォントのグリフ番号であり、通常の TeX 構文で表されます。\`\e\` は記号的に、'145 は 8 進数、"65 は 16 進数、101 は 10 進数です。したがって、単一文字として入力された文字グリフコードまたは `\char` プリミティブ `\accent` が、フォントのグリフに割り当てられるか、それとも

  たとえば、e-circumflex のグリフコードを 138（10 進）とし、Computer Modern フォントを使用していて、circumflex アクセントが位置 18、小文字の ‘e’ が通常の ASCII 位置 101（10 進）にあるとすると、 `\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 のような

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

ここで `pdfetex.ini` は TeX Live ディストリビューションに含まれているファイルです。

**なぜアスタリスク（`*`)?** アスタリスクは pdfTeX をいわゆる「拡張モード」にし、e-TeX のプリミティブをサポートできるようにします。これを省略して `pdftex -ini -mltex pdfetex.ini` と入力すると、次のエラーが出ます：

```
これは pdfTeX, Version 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 の致命的エラー: このファイルは拡張モードでのみ処理できます;
  アスタリスクを忘れたのではありませんか？
```

**注意**：拡張モードを有効にするためにアスタリスクを使う代わりに、 `TeXエンジンのコマンドラインオプション` コマンドライン オプションを使うこともできます：

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

この `-enc` コマンドライン オプションは、結果として得られる `pdfetex.fmt` フォーマット ファイルにいくつかのデータを書き込むことで pdfTeX エンジンに EncTeX を有効化させます。

**注意**： `-enc` をコマンドラインで使い、 `.fmt` ファイルで *生成されなかった* で有効化されたものは *含まれていません* 機能しません: 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 の第2版: 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, Version 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 の致命的エラー: このファイルは拡張モードでのみ処理できます;
  アスタリスクを忘れたのではありませんか？
```

**注意**：拡張モードを有効にするためにアスタリスクを使う代わりに、 `TeXエンジンのコマンドラインオプション` コマンドライン オプションを使うこともできます：

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

上記のコマンドラインを実行すると、MLTeX と EncTeX の両方が有効であることを知らせる、次のようなメッセージが表示されます：

```
これは pdfTeX, Version 3.14159265-2.6-1.40.19 (INITEX) です
 \write18 が有効です。
拡張モードに入っています
MLTeX v2.2 が有効です
 encTeX v. Jun. 2004, 再符号化が有効です。
....
....
....
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` （gz 圧縮）または `.synctex` （非圧縮）の特別なファイルを書き出します。これは [SyncTeX に与えられたコマンドライン オプション](#synoptions)。SyncTeX 対応のテキストエディタと（主に）PDF ビューアは、これらのファイルを使って入力（TeX コード）と出力（組版された PDF の表示）の間で必要な同期を行えます。明らかに、これはテキストエディタと PDF 文書ビューアに、 `.synctex.gz` （または `.synctex`）ファイルに書き出された SyncTeX のデータに基づいて、テキストファイル/PDF ビューアの位置の通信を可能にする適切な機能がなければ、単に「起こる」ものではありません。

TeX エンジン内の機能に加えて— `.synctex.gz` ファイルを生成する—SyncTeX は特別な [パーサー](https://github.com/jlaurens/synctex/) を提供し、 `.synctex.gz` （または `.synctex`）ファイルを読み取って関連するページ/行位置情報を抽出します。アプリケーションはそのパーサーを使って SyncTeX をサポートします。

### SyncTeX を有効化する

SyncTeX 対応の TeX エンジンには、SyncTeX を有効/無効にする2つの方法があります：

* コマンドライン オプション： `-synctex=NUMBER`
* のコマンド `.tex` ファイル： `\synctex` プリミティブ

### コマンドラインで SyncTeX を使う

次を使用できます `-synctex=NUMBER` pdfTeX のような SyncTeX 対応の TeX エンジンを実行するときに、このオプションを使います。

#### 例

* SyncTeX を有効にする：出力 `.synctex.gz` （gz 圧縮ファイル）：

```
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 は 1 つのプリミティブ `\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/ja/sononotopikku/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.
