> 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# 新しい記事シリーズ：TeX トークンと関連概念――しかし、なぜ（そしてどうやって）？

この序文記事では、このシリーズを書いた理由、私が何を達成したいのか、そして TeX エンジンの内部の働きを観察することで TeX トークンを探るために用いられた手法についての背景情報を説明します。この記事ページは、このシリーズの全記事へのリンクを収めることも意図しており、新しい記事が公開されるたびにそれらのリンクを提供するよう更新されます。

### 記事へのリンク

各記事には、このシリーズの他の記事へのリンク集が含まれます。

* [「TeXトークン」とは何か？](/latex/ja/xiang-xi-ji-shi/53-what-is-a-tex-token.md)
* [「TeXトークンリスト」とは何か？](/latex/ja/xiang-xi-ji-shi/54-what-is-a-tex-token-list.md)

## この記事シリーズの背景

このシリーズの記事を書こうと思ったきっかけは、TeXについての資料を読んだことでした。そこでは、TeXの多くの動作が「トークン」という概念と、TeXの「トークナイズ処理」、「トークンリスト」、そして「マクロ展開」や「展開可能なコマンド」といった関連概念によって説明されていました。TeX関連の説明が「TeXトークン」という言い回しで述べられているのに出会うたび、同じ疑問が頭に浮かび続けました。いったい正確には、 *は* TeXトークンとは何なのか？　私は確かめる必要がありました。

第1記事の範囲と内容は、 [「TeXトークン」とは何か？](/latex/ja/xiang-xi-ji-shi/53-what-is-a-tex-token.md)その性質上、プログラマーが言うところのかなり「ハード寄り」の内容ですし、「TeXトークン」は、書く題材としてかなり難解なテーマに分類されることに疑いはありません。では、なぜわざわざ書くのか？　最終的には、ある見方――あるいは、もしかすると信念の飛躍――に立って、同じテーマについて頭を悩ませている人は他にもいるかもしれず、欠けている部分を埋める記事が1本か2本は書ける余地がある、と考えるわけです。私の目的は、あなたが読んでいるかもしれない他の資料を補完できる有用な背景説明を提供すること、そして願わくば、TeXを学び、マクロやプログラミングを探究する中で出てくるいくつかの重要な概念をよりよく理解する助けになることです。

明らかに、ブログ記事という制約の中では、私たちは表面をなぞることしかできません――すべての重要な話題を説明しようとしたり、いちばん深い水域まで潜ろうとしたりするのは、単に現実的ではありません。必然的に、私はかなりの細部を省き、単純化しすぎることと、たとえ話を破綻寸前まで押し進めることのあいだの微妙な線を歩むことになります。

「自分が読んでみたいと思う記事を書きなさい」は有用な指針であり、このシリーズを書く際に私が懸命に当てはめようとしてきたものです。

## その問いを立てた今、次はどうする？

そのような詳細（トークン、トークナイズなど）は TeX エンジンのソフトウェアコードの奥深くに埋め込まれているのですから、TeX トークンについて調べるうえでの当面の課題は明らかでした――もちろん、その詳細に本当に興味があるのでなければ、そこまで気にする必要はありません。

これらの問いへの答えを探る一つの方法は、TeX のオリジナルソースコードを [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)――を実行して [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) TeX のドキュメントを抽出すること――あるいは、次の本を買うことです [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373)。私は印刷版を1冊買いました！　TeX のソースコードが本という形で出版されているのは、確かに非常に助かりますし、もちろん、全体を通して有用な説明もたくさんあります。ただし、Knuth の TeX は Pascal で書かれており、当然ながら Pascal のソースコードは Knuth のリテラテ・プログラミング手法――コードを小さな、ひと口サイズの断片に分けて提示する――に沿って文書化されています。Knuth の文書化のやり方が、TeX のような複雑なソフトウェアにとって本当に役立つことは容易に理解できますが、この本を読むにはかなり多くの相互参照とページの行き来が必要になります。

有用ではあるものの、この本だけでは、TeX が「トークン」を生成する際に何が起こるのか――私が特に知りたかったテーマ――をより深く理解するには、私には少し足りませんでした。本当に確かめる方法は一つしかありません。TeX プログラムをビルドし、小さな TeX ファイルで実行し、TeX が入力を読み取りながらコードを実際に実行している様子を文字通り観察することです。ソースから TeX をビルドする詳細はやや難解で――Pascal を C に変換するのですが――次の節に簡単な説明があり、さらに詳しく述べた個人ブログ記事へのリンクもあります。

XeTeX や LuaTeX とは異なり――それらは UTF-8 形式のテキストを処理でき、Unicode の文字エンコーディングをサポートします――Knuth の TeX は 8 ビットのエンジンであり、入力文字は 0 から 255 の範囲にあると想定しています。これは重要な違いですが、 *実質的に* TeX トークンについての議論には影響しません。なぜなら、私たちが扱うのは、すべての TeX エンジンに共通する話題と原理であり、それらはソフトウェアのまさに核心だからです。

## TeXトークンはどうやって研究できますか？

入力テキストから TeX トークンへ至る道筋を解きほぐすことは、私にとってかなりの長旅でした――正直に言えば、その道中ではさまざまな程度の混乱が、半ば常連の付き添いのように居続けました。TeX はそれほど複雑なソフトウェアなのです。

私は数年間（2009年頃から）、LuaTeX のソースコードから最新バージョンを नियमित的にビルドしてきました――LuaTeX のソースコードが実に見事な形で配布されているおかげで、その作業はかなり簡単です。その経験を踏まえて、Knuth のオリジナル TeX をソースコードからどうビルドするのかをよりよく理解したいと思うようになりました―― *非常に* 異なる話です。なぜなら、TeX は Knuth のリテラテ・プログラミング手法で書かれているからです。Windows 上で、オープンソースのコンパイラとツールセットを使って行ったその TeX の個人的なビルドは、TeX Live ディストリビューションの外で行われた独立したプロジェクトでした。また、 `tex.web` を C プログラムへ変換し、それをデバッガで実行して、入力文字を処理する際に TeX が実際に何をしているのかを確認するために必要なツールチェーンを構築することも必要でした。

Knuth のオリジナル TeX は、pdfTeX、XeTeX、LuaTeX ではなく採用されました。というのも、私が必要としていたのは、本『TeX: The Program』に印刷されているソースコードに最も近い TeX の版だったからです。その本は1986年に初版が出されましたが、TeX はそれ以来いくつか更新されており、最新の TeX（3.14159265、2014年1月リリース）は、確かに本に収録されているソースコードと十分に近いものです。

Knuth のリテラテ・プログラミング手法を反映して、TeX のソースコードは WEB と呼ばれるテキスト形式で配布されています。これは TeX のドキュメントと Pascal のソースコードが混在したものです。基本的な考え方は、TANGLE と WEAVE という2つのユーティリティを使い、WEB ファイルを処理して TeX のドキュメントか Pascal のソースコードのどちらかを取り出す、というものです：

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) WEB ファイルから Pascal のソースコードを抽出します
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) WEB ファイルから TeX のドキュメントを抽出します

ただし、Pascal のソースコードを抽出する前に、Knuth の `tex.web` ファイルを前処理して、Web2C と呼ばれるプロセスを使って TeX の Pascal コードを C コードへ変換できるようにするためのいくつかの変更を適用する必要があります。この前処理ステップは *チェンジファイルを適用すること*.

Knuth のオリジナルのコードファイル（tex.web）は、いかなる方法でも直接変更してはなりません。その代わり、いわゆるチェンジファイル（拡張子 `.ch`）を使って、メインの `.web` ファイル――たとえば `tex.web`――に適用したい変更を含めます。チェンジファイルは、TIE という追加のユーティリティプログラムを使って Knuth のオリジナルのソースコードと結合され、たとえば次のようなファイルを作成します： `mytex.web` それを TANGLE で処理して、Pascal コードを `mytex.pas`に抽出します。適切な Pascal のソースファイルができたら、Web2C プロセスの最後の手順を適用して C のソースコードファイルに変換し、実行可能な TeX プログラムとしてコンパイルできます。かなり入り組んだ Web2C 変換プロセスについて読みたい場合は、この著者の [個人ブログサイト](http://www.readytext.co.uk/?p=2529).

がさらに詳しい情報です。結果として、 [C/C++向け Eclipse IDE](http://www.eclipse.org/home/index.php) を使って TeX のソースコード（C）を一行ずつ実行し、入力を読み取る際に何が起こるのかを観察できる TeX プログラムが得られます。C コードは機械生成されており、場所によっては非常に追いにくいので、決して最も मनोर? නො translate? Let's correct. Need proper Japanese; I accidentally inserted non-Japanese? Wait should not. Let's fix final output carefully. Need replace this key with correct text. Also note t\_3a9bca80 current ends incomplete. Need read through and correct all. We must ensure valid JSON and all strings. I need recompose final carefully from scratch to avoid accidental weirdness. Let's do a clean final with corrected t\_33 and t\_df9 etc. Need no accidental non-Japanese. Let's prepare all again in final. Ensure t\_33 contains&#x20;

この議論を締めくくるために、Eclipse IDE で TeX が実行され、実行が関数で一時停止している様子を示す例のスクリーンショットを以下に示します `getnext()`――これは TeX のトークン生成プロセスの核心にあるものです。

![Eclipse IDE を介して TeX を実行している様子を示すスクリーンショット](/files/c927c1a1b18827f9051d4b79d87dc93eadc6641f)

オープンソースの C/C++ 向け Eclipse IDE を使って TeX の C ソースコードをステップ実行する。

## 結論とお礼

第1記事の執筆と、シリーズの今後のブログ投稿に向けたアイデアをまとめる作業には、確かにかなりの時間がかかりました。このシリーズの着想を支持し、追加の背景調査に必要な時間を取れるようにしてくださった Overleaf の John Hammersley と Mary Anne Baynes に、心から感謝しています。この記事シリーズが、共通の関心事となる話題をうまく見つけ出して取り上げ、読んでくださる方々にとって価値あるものとなることを願っています。


---

# 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.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.
