年末なので、ぼんやりと某キ~タを眺めていたら、こんな記事を見つけた。
懐かしい🙂……おや?
ある日インターネットを徘徊してると「ナベアツのコードを自力で書けない人は,そのプログラミング言語を使える人たちの集合には属さない」という言説?を目にしました.
チョット調べたところ、確かにそういう言説を口にしているアレな人🙃が存在するようである。
“TeX”でナベアツをしたい話
さらにその記事を読んでいくと「LaTeXをどこまで許容するのか」について議論されていた。
はじめは生の TeX 言語のみで(つまり plain TeX で使えるコードのみで)ナベアツを実装しようとしていたのですが,
これを読んで、昨年(2024年)の春にあった「“TeX”とは何を指すのか」の議論を思い出した。
このときの議論に従うと、「LaTeXはTeXではない」という見解の下では、“TeX”といえそうなものはiniTeXしかない。となると今までの議論の当然の帰結として、iniTeXで動くナベアツのコードが書けないと「自分がTeX言語を使える人である」と主張できなくなってしまう。
TeXができない人になるのはアレなので、iniTeXでナベアツをやってみることにした。
ただし、「2次方程式の解の公式」が固定された単発の文書として成立するのに対して、ナベアツは入力(上限の整数値)をもつ“機能”である。慣習が何も定まっていないiniTeXに対してライブラリのインタフェースを設計するのは困難である。そこで、ナベアツ専用のTeXのマクロパッケージ、名付けてNabeAzzTeXをつくることにする。もちろんplainなどの既存の実装は一切使わず、また拡張プリミティブをもたない元祖TeX上で動作させるという条件を課す。
“TeX”でナベアツをしてみた話
構想が決まったので、早速NabeAzzTeXをつくってみた😃
% レイアウト設定 \hsize=97mm \vsize=159mm \hbadness=1000 \vbadness=1000 \baselineskip=15pt \parfillskip=0pt plus 1fil \begingroup % コード設定 \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 \catcode`\@=11 % フォント設定 \global\font\NA@normal=cmr10 \global\font\NA@aho=cmfi10 at 12pt % 変数定義 \global\countdef\NA@limit=100 \global\countdef\NA@cnta =101 \global\countdef\NA@cntb =102 %% \NA@main % 1から \NA@limit までナベアツを出力した後ジョブを終了する. \gdef\NA@main{% \NA@normal % フォント設定 % ナベアツする \par % 改段落 \NA@cnta=1 \NA@loop % ジョブを終了する \par \end } %% \NA@loop % ナベアツのループ処理. \gdef\NA@loop{% % 整数がアホかを判定する \chardef\NA@isaho=0 \NA@cntb=\NA@cnta \divide\NA@cntb 3 \multiply\NA@cntb 3 \ifnum\NA@cnta=\NA@cntb \chardef\NA@isaho=1 \fi \expandafter\NA@has@three\the\NA@cnta3\relax % 整数を出力する \ifnum\NA@isaho=1 {\NA@aho \the\NA@cnta}% \else \the\NA@cnta \fi \ % 区切りの空白 % 末尾再帰 \ifnum\NA@cnta<\NA@limit \advance\NA@cnta1 \expandafter\NA@loop \fi } %% \NA@has@three % 文字列が3を含むかの判定の補助マクロ. \gdef\NA@has@three#13#2\relax{% \ifx!#2!\else \chardef\NA@isaho=1 \fi } %% '\\'が無視されるようにする \gdef\\{} % ジョブ開始時に自動実行される処理 \global\everyjob{% % 数字を読み取って \NA@main を呼ぶ \afterassignment \NA@main \NA@limit=% } \endgroup % おしまい \dump
- NabeAzzTeX: NabeAzz専用のTeXマクロパッケージ(Gist/zr-tex8r)
以下で使用法を説明する1。独自マクロパッケージなのでまずフォーマットを作成する必要があるが、これは以下のコマンドで行える。
tex -ini nabeazztex.tex
これでフォーマットファイルnabeazztex.fmtが生成されるが、以下ではこのファイルをカレントに置く2ことを前提とする。
NabeAzzTeXの入力ファイルは以下のように「ナベアツの入力となる整数値」だけが書かれたテキストファイルである。
40
この場合、以下のコマンドで入力ファイルをタイプセットできる。
tex -fmt=nabeazztex input.tex
入力の整数値は(一般のTeXの仕様として)コマンド行(または対話モード)でも与えることができるが、この場合は「\から始まらない入力文字列はファイル名とみなされる」という問題がある。このため、NabeAzzTeXでは\\が無視される(空に展開される)ようになっている。
(コマンドプロンプトの場合) tex -fmt=nabeazztex \\40 (bashの場合) tex -fmt=nabeazztex '\\40'
何れの場合もナベアツの結果が書かれたDVIファイル3が出力される。

というわけで、無事に「TeXが使える人」になることに成功した(あんしん🤯)
まとめ
今年も一年、ありがとうございました!

ZR「というわけで、来年も当(くだらない)ブログをよろしくお願いします!」
*「アレレ、いつの間にか『除夜のカントカ』が定番ネタ扱いになってる😲」