マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

\the っぽくない \the

TeX 言語のプリミティブ \the は色々なパラメタやレジスタの現在の値を調べるのに用いられる。

\the が \the-文字列になる例

以下は、整数、寸法、グルー値の値をもつパラメタ・レジスタ\the を適用した例である。

\the\count255
\the\skip0
\the\year
\the\hsize
\the\baselineskip
\the\catcode`\@
\the\badness

これらは何れも、1 回展開すると、\the の引数であるパラメタの現在の値を表す文字列(「42」や「-1.0pt plus 1.0fil」など)に展開される。((つまり、ここでは \the は「文字列に変換する」役割を果たしている。ユーザが値を調べるのには文字列化する必要があるので \the が使われるわけである。ここで注意したいのは、値を“取得”するのに \the が要るわけではない、ということである。例えば、\year の値を \count255 に代入したいのであれば、\count255=\year で十分であり、右辺に \the は要らない。))「文字列」といっても実際は文字トークンの列であり、しかも \the で展開されて生じる文字トークンのカテゴリコードは、英字も含めて全て 12(ただし空白は 10)というやや特殊なことになっている。このため、そういうカテゴリコードをもつ文字トークン列のことを特に「\the-文字列」と呼ぶことがある。*1

このように、整数、寸法、グルー値をもつパラメタについては、\the は「\the-文字列」を“返す”のであるが、これ以外に、\the が適用可能なパラメタで、かつ展開結果が「\the-文字列」にならない場合がある。一般には 2 つのケースが知られている。

\the が \the-文字列にならない例 2 つ

1 つ目は「トークン列型のパラメタ」である。

\the\toks0
\the\everypar

これらの 1 回展開はその現在の値であるトークン列になり、これは(一般には)\the-文字列ではない。

もう 1 つは「現在のフォントを表すパラメタ((テキストフォント用の \font と数式フォント用の \textfonnt\scriptfont\scriptscriptfontpTeX 系ではこれに和文フォントの \jfont\tfont が加わる。))である。

\the\font
\the\scriptfont1

これらの 1 回展開は「現在のフォント」と一致する fontdef トークンとなる。例えば、plain TeX *2の初期値では、現在のテキストフォントは cmr10 であり、かつ cmr10 を表す fontdef は \tenrm であるから、\the\font を展開すると \tenrm\the-文字列ではなく制御綴のトークン)となる。同様に、\the\scriptfont1 を展開すると \seveni ((「現在の数式ファミリ 1 のスクリプトスタイルのフォント」は cmmi7 で、それに対応する fontdef トークンが \seveni。))が得られる。

\the が \the-文字列にならない例がもう 1 つ

\the の展開が \the-文字列にならない場合」には以上の 2 つがある、ということであれば、ちゃんとした TeX 言語の解説書には書かれていることなのでわざわざブログに書く必要もない。実は、\the-文字列にならない場合がもう 1 つあるようなのである。

\hoge が fontdef トークンである場合、\the\hoge を 1 回展開すると \hoge になる。

例えば、plain TeX\the\tenrm を展開すると \tenrm 自身(もちろん制御綴トークン)になる。((もちろん、「解釈できない \the は単に消える」という規則があるわけではない。例えば、「\the\relax」を展開しようとするとエラーになる。))

これを知っていて何か役に立つかといえば、恐らく、「ブログの記事が 1 つ書ける」以外の利用価値はないと思われる。

*1:少なくとも ZR 氏は呼ぶことがある。

*2:LaTeX だと NFSS が絡んで複雑なので plain TeX を例にする。