マクロツイーター

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

冬休み課題①: \expandafter をたくさん書きましょう

今年一年の中で \expandafter について考える機会にあまり恵まれなかった \expandafter 初級者のために、\expandafter な問題を出題する。

plain pdfTeX において、起動直後に以下のコードを実行したとする。

\catcode`H=\active \catcode`E=\active \catcode`L=\active \catcode`O=\active
\defO{L}\defL{H}\defH{E}

この状態において、

\detokenize{OOOOO}

というトークン列の各トークンの間に適切な個数の \expandafter を追加して、それの展開結果が(カテゴリコード 12 の)「HELLO」になるようにせよ。

【ヒント】 e-TeX 拡張命令の \detokenize は、\detokenize{<トークン列>} の形で用い、これの一回展開結果は、引数のトークン列に含まれる各トークン(展開されない)に \string を施したものを並べたトークン列になる。((正確にいうと、制御語の後に空白が入るという点で \string とは異なる。例えば、\detokenize{A \B\C D} の展開結果は、\the-文字列の「A \B \C D」である。))

なお、これは \expandafter 初級者のための問題であるので、\expandafter マスターや \expandafter 芸人が取り掛かるとものの数分で終わってしまうであろう。そういう人は、代わりに「Hello World」 でも作ってみては如何だろうか。