> 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/xiang-xi-ji-shi/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md).

# TeXエンジンの2つのモード：INIモードと実運用モード

すべてのTeXエンジンには2つの「モード」があります。「INI」モードと「production」モードです。後者は、組版済み資料を作成するために使われる既定の（標準の）モードにすぎません。INIモードはかなり異なり、TeXエンジンをINIモードにするにはコマンドラインオプションを使う必要があります。その方法は、次を実行することで確認できます `--help` をコマンドラインで。たとえばLuaTeXでは、次を実行すると

`luatex --help`

そのエンジンがサポートする多くのコマンドラインオプションが表示されます：

```
使い方: luatex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]
   または: luatex --lua=FILE [OPTION]... \\FIRST-LINE
   または: luatex --lua=FILE [OPTION]... &FMT ARGS
  TEXNAME 上で LuaTeX を実行し、通常は TEXNAME.pdf を作成します。
  残りの COMMANDS は、TEXNAME が読み込まれた後に luatex の入力として処理されます。

  あるいは、最初の非オプション引数がバックスラッシュで始まる場合、
  luatex はすべての非オプション引数を入力行として解釈します。

  あるいは、最初の非オプション引数が & で始まる場合、
  次の語が読み込む FMT として扱われ、ほかのすべてより優先されます。
  残りの引数は上と同様に処理されます。

  引数もオプションも指定されていない場合は、入力を促します。

  以下の通常のオプションが認識されます：

   --credits                     クレジットを表示して終了
   --debug-format                フォーマットのデバッグを有効化
   --draftmode                   ドラフトモードを有効にする（PDF出力を生成しない）
   --[no-]file-line-error        file:line:error 形式のメッセージを無効化/有効化
   --[no-]file-line-error-style  --[no-]file-line-error の別名
   --fmt=FORMAT                  フォーマットファイル FORMAT を読み込む
   --halt-on-error               最初のエラーで処理を停止
   --help                        ヘルプを表示して終了
   --ini                         iniluatex 状態になり、フォーマットをダンプするためのもの
   --interaction=STRING          対話モードを設定（STRING=batchmode/nonstopmode/scrollmode/errorstopmode）
   --jobname=STRING              ジョブ名を STRING に設定
   --kpathsea-debug=NUMBER       NUMBER のビットに応じてパス探索のデバッグフラグを設定
   --lua=FILE                    lua 初期化スクリプトを読み込み、実行する
   --[no-]mktex=FMT              mktexFMT の生成を無効化/有効化（FMT=tex/tfm）
   --nosocket                    lua の socket ライブラリを無効化
   --output-comment=STRING       DVI ファイルのコメントとして日付の代わりに STRING を使う（PDF には影響しない）
   --output-directory=DIR        既存の DIR をファイルの書き込み先ディレクトリとして使う
   --output-format=FORMAT        ジョブ出力に FORMAT を使う。FORMAT は 'dvi' または 'pdf'
   --progname=STRING             プログラム名を STRING に設定
   --recorder                    ファイル名レコーダーを有効化
   --safer                       悪用しやすい lua コマンドを無効化
   --[no-]shell-escape           システムコマンドを無効化/有効化
   --shell-restricted            texmf.cnf に与えられたコマンド一覧にシステムコマンドを制限
   --synctex=NUMBER              synctex を有効化（man synctex を参照）
   --utc                         初期時刻を UTC に設定
   --version                     バージョンを表示して終了

別の動作モデルは、特別なスイッチで得られます

  --luaonly                      lua ファイルを実行して終了
  --luaconly                     lua ファイルをバイトコンパイルして終了
  --luahashchars                 現在の Lua インタプリタが文字列ハッシュに使うビット

起動プロセスの詳細については、リファレンスマニュアルを参照してください。

バグ報告は dev-luatex@ntg.nl へ電子メールで送ってください。
```

これら多数のオプションの中で、ここで関係するものは2つあります：

```
--ini              iniluatex 状態になり、フォーマットをダンプするためのもの
--fmt=FORMAT       フォーマットファイル FORMAT を読み込む
```

ここで LuaTeX は自身の INI モードを `iniluatex`という名前で参照しています。では、これは `iniluatex` （INI モード）は実際には何を意味するのでしょうか。少し手がかりになるのは、上で示した2番目のコマンドラインオプションです：

```
--fmt=FORMAT       フォーマットファイル FORMAT を読み込む
```

### INI モード？ フォーマットファイル？ 何がなんだか…

LaTeX のようなマクロパッケージは、複雑なマクロの大きな集合です。構成するすべてのファイルの生テキストを読み込み処理するには、ある程度の時間と計算のオーバーヘッドがかかります。たとえば：

* 数万個にもなる個々の文字を読み取り、走査すること；
* 数百のマクロ/コマンドを解析し、処理し、保存すること；
* フォントとハイフネーションデータの内部テーブルを初期化すること。

これらすべてが行われ、その結果がメモリに保存されて初めて、TeXエンジンは、たとえば Plain TeX や LaTeX のマクロ集合が提供するマクロを使うユーザーのTeX文書を実際に処理できるようになります。これは TeX エンジンのブートストラップ処理と考えることができます。つまり、文書の処理を始められるようになる前に必要な準備です。

おそらく当時の技術を反映して、TeXエンジンにはマクロ集合で満たされたテキストファイルを処理する近道があります。つまり、事前処理済みのバイナリ（*フォーマット*）ファイルを読み込むことです。

INI モードに置かれたとき、TeX エンジンの仕事は組版を行うことではなく、代わりに次を行うことです：

1. すべての基本コマンドを読み込んで初期化し、さらに TeX エンジンがその後の処理を開始できるようにするための最小限の catcode（および他のコード）を設定すること。
2. (1) が終わると、次にユーザー提供のマクロ集合、いわゆる「フォーマット」（例：Plain TeX や LaTeX のマクロ集合）を読み込んで処理します。
3. (1) と (2) を正常に完了すると、TeX はメモリに読み込んで処理したものすべてを「バイナリの脳内ダンプ」し、それをバイナリ *フォーマット* ファイル（たとえば `lualatex.fmt`).

フォーマットファイルは、TeX の「心の状態」を表すバイナリファイルであり、多数の内部データテーブル（基本コマンドを含む）を初期化し、ユーザー提供のマクロ集合に含まれるすべてのマクロコマンドを処理した後の状態を保存します。TeX エンジンがこのようにするのは、たとえば Knuth の Plain TeX や LaTeX のマクロパッケージ、あるいは「フォーマット」として設計された任意のマクロパッケージを使って TeX エンジンを実行するたびに、生のマクロを毎回再処理するよりも、「事前コンパイル済み」のバイナリファイルを読み込むほうが速いからです。

たとえば LaTeX によって組版される文書を処理するとき、TeX エンジンは LaTeX のすべての基本マクロを再読み込み（再処理）するのではなく、たとえば `lualatex.fmt`というバイナリファイルを読み込みます。フォーマットファイルの内部の詳細は、各 TeX エンジンおよび `.fmt` ファイルを生成するのに使われるマクロパッケージの各バージョンに固有です。たとえば LaTeX ディストリビューション（つまり LaTeX 本体の核部分であり、追加パッケージではないもの）をアップグレードした場合、新しい `.fmt` ファイルも生成する必要があるかもしれません。

### 例

LaTeX のソースコード配布には、 `.ini` 拡張子を持つファイル、たとえば lualatex.ini が含まれており、 `.fmt` ファイルを生成するために使われます。そうした `.ini` ファイルには通常、エンジン固有の初期化コードが含まれ、その後に LaTeX の中核マクロファイルが入力されます。たとえば、次のコマンドラインで LuaTeX を実行すると：

`luatex --ini lualatex.ini`

LuaTeX は次の名前のファイルを書き出します `lualatex.fmt`

執筆時点では、 `lualatex.ini` には次のコードが含まれています：

```
% tex-ini-files 2016-04-15: lualatex.ini
% Originally written 2008 by Karl Berry. Public domain.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % latex.ltx の前にジョブ名の引用設定を行う
  % Web2c の pdfTeX/XeTeX は、スペースを含むジョブ名を引用しますが、LuaTeX は
  % エンジンレベルではこれを行いません。この動作は
  % コールバックを使って変更できます。もともとこのコードは lualatexquotejobname.tex 経由で読み込まれていましたが、
  % それには latex.ltx のまわりにハックが必要でした。動作は変更され、
  % コールバック経由を直接使えるようになっています。
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` は、次のファイルの読み込みから始まります `luatexconfig.tex` 。これは、LuaTeX 特有の初期化を行います。まさに `.ini` （初期化）ファイルに期待されるとおりです。最後の行で `latex.ltx` を読み込み、LuaTeX に LaTeX の中核マクロを読み込んで処理させます。

LuaTeX が `lualatex.ini` の処理を終えると、 *フォーマットファイル* という名前の `lualatex.fmt`. 一度 LaTeX コードがバイナリ形式にコンパイルされると、LuaTeX（あるいは他の TeX エンジン）は、その `.fmt` ファイルを非常に高速に読み込み、LaTeX のマクロ定義やフォントなどの内部テーブルをブートストラップして初期化できます。LaTeX マクロパッケージに含まれる何万もの文字を読み取り処理するという長大な過程を経る必要はありません。

これで LuaTeX に LaTeX 文書 `yourfile.tex` を（ `lualatex` フォーマットファイルを使って）組版するよう、次のコマンドで指示できます：

```
luatex --fmt=lualatex yourfile.tex
```

`.fmt` ファイルは通常、特定のエンジンに固有です。たとえば LuaTeX の `.fmt` ファイルは、別の TeX エンジン、たとえば pdfTeX や XeTeX では一般に使い回せません。さらに、LuaTeX 実行ファイルが新機能付きで更新された場合、古いバージョンの LuaTeX で作成した `.fmt` ファイルは新しいエンジンでは動作しない可能性がかなりあります。その場合は `.fmt` ファイルとまったく同じ綴り・大文字小文字を使ってください。

互換性のない `.fmt` ファイルを使おうとすると、TeX エンジンはそれを読み込めず、次のエラーを返します：

```
致命的なフォーマットファイルエラー；手も足も出ません
```

同様に、中核の LaTeX マクロが更新された場合も、 `lualatex.fmt` ファイルも生成する必要があるかもしれません。

`.fmt` ファイルを再構築する必要があるかもしれません。ファイルは LaTeX だけでなく、適切なマクロパッケージなら何でも作成できます。たとえば、Knuth の元祖でよりずっと単純な「Plain」TeX マクロを処理して `.fmt` ファイルを生成することもできます。時間があれば、自分でマクロ集合を書いてそのパッケージ用のフォーマットファイルを作ることもできます。その場合、マクロパッケージのどこかで基本コマンド `\dump` を呼び出す必要があります。これは TeX エンジンにその「バイナリの脳内ダンプ」を行わせ、 `.fmt` ファイルとまったく同じ綴り・大文字小文字を使ってください。

とはいえ、TeX エンジンの「INI」モードや `.fmt` ファイルを生成する過程を気にする必要があるユーザーは、実際にはごくわずかです。Overleaf と TeX Live ディストリビューションが、必要になって探しにいく場合を除き、その詳細からあなたを守ってくれます。


---

# 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/xiang-xi-ji-shi/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.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.
