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

# 6回シリーズ: TeXマクロは実際にどのように動作するのか？

## この連載について

この記事シリーズには大きな目標があります。それは、段階的に説明することです、 *どのように* LaTeXコマンドのようなTeXマクロが実際にどのように動作するのかを、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がカテゴリコードを使って文字トークンを作成する例や、カテゴリコード0（「エスケープ文字」）を使ってTeXがコマンドを認識し処理する方法を探ります。

### 第3部：入力テキストからコマンドへ

この記事では、TeXが入力中に検出されたコマンドをどのように認識し、処理するのかを詳しく見ていきます。TeXがコマンドに関する情報をどのように保存し、取り出すのか――コマンドコード、コマンド修飾子、さらに入力から読み込んだ項目に関する情報を保存するためにTeXが使ういくつかの内部変数――を探ります。記事の一部はかなり低レベルな内容なので、初読では飛ばしても構いません。

### 第4部：マクロの構造

マクロの構造を説明するために、以下の「枠組み」を導入し、使用します：

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

その後、マクロの役割と目的を示すために、さまざまな例を見ていきます `<parameter text>` トークンが次のように働くことで構築できる「トークンテンプレート」として *区切り記号を*.

### 第5部：トークンリストとTeXの内部マクロ格納

この記事では、TeXがトークンリストを使ってマクロ定義を保存する方法を詳しく探ります。TeXを特別に改変した版で生成した多数の図を用いて、TeXがユーザーのマクロ引数を識別し処理するために使う特殊なトークンを探ります。

### 第6部：マクロ展開と処理

第6部では、詳細な図を用いて、マクロ展開の正確な意味と、TeXがマクロ引数をマクロに渡す前にトークン化することの結果を説明し、探ります。

## 短い注記：LaTeXではなく「TeX」を使用

記事で述べたように [名前に何があるのか：TeXの多様なバリエーションへのガイド](/latex/ja/xiang-xi-ji-shi/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) TeX、LaTeX、およびそれらの派生物を指したり説明したりするために、さまざまな用語が使われます。したがって、このシリーズの文脈における「TeX」の用法／意味を簡単に明確にしておく価値があります。

「TeX」は少し紛らわしいことに、実行可能プログラムの名前でもあり、組版言語の名前でもあります。この2つを区別するために、用語 *TeXエンジン* は、実行可能なTeXプログラムと組版言語を区別するために使われます。このシリーズで使用する特定のデータ、情報、詳細の一部は、KnuthのオリジナルTeXソフトウェアのソースコードを詳しく調査して得たものですが、ここで述べる原理はすべてのTeXエンジンに共通です。したがって、以下の議論では、「TeX」はKnuthのオリジナルTeX、pdfTeX、XeTeX、LuaTeXなどの実行可能なTeXエンジンの一つを指すものと理解してください。

記事内では、TeXのプリミティブコマンド `\def` を使ってマクロの例を定義します。LaTeXコマンドは使いません `\newcommand` これは、おそらくほとんどのOverleafユーザーにとってずっとなじみ深いはずです。これには非常にもっともな理由があります。私たちの目的は、TeXのマクロ動作の根底にある基本原理を理解することですが、そのためにはTeXソフトウェアに組み込まれた中核コマンド（プリミティブ）を使う必要があるからです。LaTeXコマンド、たとえば `\newcommand`、それ自体がマクロです。つまり、特定のプログラムされた振る舞いを持つコマンドであり、最終的には下位レベルのTeXプリミティブコマンドの層から構成されています。TeXの基本的な振る舞いをよりよく理解するには、LaTeXマクロではなくTeXプリミティブを使わなければなりません。

## 例と図

TeXのさまざまな機能、境界事例、振る舞いを示すために設計された一連のサンプルマクロだけに頼るのではなく、豊富な図も用いてTeXそのものの内部を覗き込み、 *どのように* や *なぜでしょうか* そのマクロ処理がなぜそのように動作するのかを見ます。多くの図（トークンリスト／ノード図）は、KnuthのオリジナルTeXを特別に改変した版を用いて作成されています。

Overleafは、KnuthのTeXに、TeXのマクロ処理に「フックして」通常はユーザーがアクセスできないデータやデータ構造を調べるための追加コード（Cで記述）を加えました。マクロが呼び出されるたびに、改変されたTeXエンジンは、次を用いて処理できる形式のデータを含む追加の出力ファイルを生成します： [Graphviz](https://www.graphviz.org/)これはオープンソースのグラフ可視化プログラムです。最終的に得られるのは、TeXがマクロ定義をどのように保存しているかを正確に示す図（ノードリスト図）であり、さらにマクロ呼び出し時にユーザーが与えた引数の図示も含まれます。

必然的に、このシリーズの目的のためには幅広い話題を扱う必要があり、その多くはかなり低レベルで、最初は文書の組版という作業からは非常に遠いように思えるかもしれません。ですが、より深く掘り下げれば、理解を深めるための土台が得られ、最終的には多くの時間を節約し、ひょっとするとストレスも減らせるはずです。また、このシリーズに添えられた特別に生成された図が、TeXマクロをよりよく理解しようとする読者の助けとなる、独自に価値のある洞察も提供できればと願っています。

## Overleafのカスタマイズ版TeX

この動画では、Graphivizノード図を生成するように改変されたOverleaf版TeXの短いデモを紹介します（`.gv` ファイル）—これらの変更によってTeXの振る舞いの他の側面が影響を受けることはありません。 `.gv` ファイルには、マクロ定義とマクロ引数を保存するために使われるTeXのトークンリストの表現が含まれています。Graphvizによる可視化結果はSVGとして書き出され、その後 [Inkscape](https://inkscape.org/) Inkscapeに取り込み、記事に図を組み込む前にさらに注釈を加えます。

{% 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/ja/sononotopikku/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.
