以下の内容はhttps://zrbabbler.hatenablog.com/entry/2025/04/27/215700より取得しました。


TeXのカテゴリコードの初期値をちゃんと知りたい話

TeX言語の参考書において「カテゴリコード(category code)」を扱った箇所を見ると、大抵の場合「0~15のカテゴリコードについて、LaTeX(あるいはplain TeX)の初期状態で当該のカテゴリコードをもつ文字の例」が挙げられている。それを見ればASCIIの印字可能(printable)の文字(つまり文字コード32~126の範囲)については「各文字がどういうカテゴリコードをもつか」も全て判るようになっている。一方で印字可能文字以外(制御文字など)については情報が載っていない場合が多い。これには「plainとLaTeXで初期値が異なる」「LaTeXに限ってもカーネルのバージョンにより異なる」「Unicode TeXとそれ以外でも異なる」などの要因で扱いにくいという理由があり、またそもそも「非印字可能文字のカテゴリコードはユーザが直接利用する機会が乏しい」という事情もある。

本記事では、イマドキ(TeX Live 2025)のplain TeXLaTeX・iniTeXについて、初期状態1での各文字のカテゴリコードの値をまとめてみる。

Unicodeなエンジンの場合

まずはレガシー(欧文が8ビット)ななTeXエンジン、つまり欧文TeX・pdfTeX・pTeX・upTeXの系列2のエンジンを扱う。これらのエンジンでのカテゴリコードの初期値は以下の通りである。

文字コード 文字 plain TeX LaTeX iniTeX
0 NUL 9(無視) 15(無効) 9
1 SOH 8(下添字) 13(アクティブ) 12
2~8 STX 12(その他) 13(アクティブ) 12
9 HT 10(空白) 10(空白) 12
10 LF 12(その他) 12(その他) 12
11 VT 7(上添字) 13(アクティブ) 12
12 FF 13(アクティブ) 13(アクティブ) 12
13 CR 5(改行) 5(改行) 5
14~31 SO~US 12(その他) 13(アクティブ) 12
32 10(空白) 10(空白) 10
33~34 !" 12(その他) 12(その他) 12
35 # 6(パラメタ文字) 6(パラメタ文字) 12
36 $ 3(数式切替) 3(数式切替) 12
37 % 14(コメント) 14(コメント) 14
38 & 4(配列タブ) 4(配列タブ) 12
39~64 '@ 12(その他) 12(その他) 12
65~90 AZ 11(英字) 11(英字) 11
91 [ 12(その他) 12(その他) 12
92 \ 0(エスケープ) 0(エスケープ) 0
93 ] 12(その他) 12(その他) 12
94 ^ 7(上添字) 7(上添字) 12
95 _ 8(下添字) 8(下添字) 12
96 ` 12(その他) 12(その他) 12
97~122 az 11(英字) 11(英字) 11
123 { 1(グループ開始) 1(グループ開始) 12
124 | 12(その他) 12(その他) 12
125 } 2(グループ終了) 2(グループ終了) 12
126 ~ 13(アクティブ) 13(アクティブ) 12
127 DEL 15(無効) 15(無効) 15
128~255 高位バイト 12(その他) 13(アクティブ) 12

補足説明

  • 共通:
    • 入力中の改行は、ファイル中でLF・CR・CR+LFの何れであるかにかかわらずTeXの中では「文字コード\endlinecharの文字」と見なされる。\endlinecharの既定値は13(CR)であるため、CRのカテゴリコードは5(改行)である。
    • ファイル出力・端末出力(TeX\writeLaTeX\typeout)中で改行したい場合はLF(文字コード10、TeXコード中では^^Jと書く)を入力する。この目的を果たすためLFのカテゴリコードは12(その他)になっている。
  • LaTeX
    • 現在のLaTeXカーネルではinputencの機能が既定で有効になっている。だから、ASCII外の文字の入力に使用される「文字コード0~31(制御文字)の範囲のHT・LF・CR・FF以外」と「文字コード128~255」はinputencの処理を発動させるためにアクティブになっている。
    • FFがアクティブなのはplainと同じ扱いにしているからである(次項参照)。
  • plain TeX
    • plain TeXではFF(文字コード12)を入力しても改段落されるようになっている(\parに展開されるマクロになっている)。このためFFがアクティブになっている。
    • KnuthTeXを開発した当時に使っていたマシンにおいて、文字コード1が“↓”、文字コード11が“↑”だったらしい。数式中で“↓”や“↑”の文字を直接書いて添字を表せるように、文字コード1と11のカテゴリコードがそれぞれ8と7になっている。

新しいpTeX・upTeXに関する補足

実はTeX Live 2025のpTeX・upTeX系列のエンジン(e-upTeXの2.00版3)では欧文文字コードの範囲が0x2E7Fまでに拡大されている。ただしこれはまだ実験的な機能であり、実用のマクロパッケージでこの機能が利用される予定はまだない4ので、今のところは気にしなくてよいだろう。

文字コード256以降の(欧文)カテゴリコードの初期値は全て12である。

文字コード 文字 plain TeX LaTeX iniTeX
256~0x2E7F 12(その他) 12(その他) 12

Unicodeなエンジンの場合

続いて、Unicodeエンジン、つまりXeTeX・LuaTeX系のエンジンを扱う。文字コード32~127の範囲はレガシーエンジンと同じなので、それ以外の部分に限る。

文字コード0~31の範囲は以下の通り。

※レガシーエンジンとの相違点を太字で示した。

文字コード 文字 plain TeX LaTeX iniTeX
0 NUL 9(無視) 15(無効) 9
1 SOH 8(下添字) 15(無効) 12
2~8 STX 12(その他) 15(無効) 12
9 HT 10(空白) 10(空白) 12
10 LF 12(その他) 12(その他) 12
11 VT 7(上添字) 15(無効) 12
12 FF 13(アクティブ) 13(アクティブ) 12
13 CR 5(改行) 5(改行) 5
14~31 SO~US 12(その他) 15(無効) 12

文字コード128~0x10FFFFの範囲は以下の通り。

文字コード 文字 plain TeX LaTeX iniTeX
173 SHY 12(その他) 13(アクティブ) 12
0xFEFF (※1) BOM 9(無視) 9(無視) 9
“文字”(※2) 11(英字) 11(英字) 12
その他 12(その他) 12(その他) 12

※1 LuaTeXのみ。XeTeXではこの行は無視する(つまり12となる)。
※2 UnicodeでのGeneral Categoryの1文字目がLまたはMの符号位置。

補足事項

  • レガシーなLaTeX文字コード31以下の文字をアクティブにしている理由はinputencのためである。Unicode LaTeXではinputencは不要なので、これらの文字コードのカテゴリコードは15に変更されている。ただしFFはplainと同じ定義(改段落)にするため13のままである。
  • LaTeXでは文字コード173(ソフトハイフン、SHY)を「\-に展開されるマクロ」に定義している。
  • LuaTeXで文字コード0xFEFF(BOM)のカテゴリコードを9(無視)にしているのは、恐らくBOMが付加されたファイルを読めるようにするためだろう。ただし、TeX Liveで配布される実行ファイルではファイル先頭のBOMは入力段階で無視されるように調整されている。
  • ASCII外の文字はplainでもLaTeXでも“特殊”ではないが、制御語(control word)を構成する文字としてASCII英字以外の“文字”(アクセント付きラテン文字ギリシャ文字や漢字など)も使えるのが望ましいため、Unicodeの規定に従って“文字”のカテゴリコードを11(英字)に設定している。

まとめ

春のTeX言語キャンペーン🌸はまだまだ開催中です🙂

(画像🤮省略)


  1. 本記事でいう「初期状態」というのは「メインの文書ファイルの先頭における状態」のことを指すものとする。LaTeXの場合は\everyjobの実行直後の状態である。iniTeXというのは「何もフォーマットを読み込まない状態のTeX」のことであり、iniTeXの初期状態というのはTeX処理系の“本当の初期状態”に相当する。
  2. 厳密にいうと、現在のTeX Liveにおいてこれらの“系列”の実体として用いられているエンジンはTeX・pdfTeX・e-upTeXの3種類である。ただしレガシーTeXの“系列”の間で((u)pTeX系の文字コード256以降を除いて)カテゴリコードの初期値に違いはないので、この辺りの話は気にしなくてよい。
  3. イマドキのTeX配布ではpTeX系列のエンジンの実体はe-upTeXである。
  4. LaTeXにおける欧文Unicodeの扱いを今更変更するのは難しいので、将来のLaTeXにおいて実用される可能性は低いと自分は思っている。



以上の内容はhttps://zrbabbler.hatenablog.com/entry/2025/04/27/215700より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14