Open6

TeX by Topic by Comic challenge

hidarumahidaruma

https://adventar.org/calendars/7868

このZennスクラップは TeX & LaTeX Advent Calendar 2022 の3日目を契機に開始するものです。

2日目はl@h20y6mさんでLaTeXで旧暦してみる - h20y6m.github.ioでした。

TeX by Topicって?

Victor Eijkhout氏によるA TeXnician's Reference。GNU Free Documentation License
としてCTANにあり、無償で読むことができます。

https://ctan.org/pkg/texbytopic

というか原版はパブリックドメインとなっているようですね。

https://www.eijkhout.net/tex/tex-by-topic.html

TeXの開発者であるKnuth先生自ら執筆のThe TeX Bookは体系的な内容で、思想的側面と実装の話が混じりヘヴィイな本であるのに対し、この本はごく短いトピックごとに概観や動作を追う作りになっています。

トピックは39章ありますが、章を構成するセクションは各2-3ページ程度、サブセクションは各半ページ程度ですので、日を空けて読んでも思い出したり読み直したりがあまり手間になりません。

あまりにまとまりがよいので「読め!」で終了してしまってもよいのですが、初心者向けでないかもしれなくもない点として、図版による説明がTeXコード以外では入力プロセッサの3状態遷移くらいしかないというものがあります[1]

そこで初心者向けにポンチ絵を追加したい、ということでチャレンジです。とはいえ、既に上手くアナロジーがあるものを図示する必要があるのかという内心のツッコミもあります。更にTeXコードでの端的な例示よりも敷衍したイラストが描けるのか、なども。書の内容と矛盾があった場合は書が正しいです。

TeXLaTeX Advent Calendar 2022の記事として(12/03)の時点では1章も終わりませんが、ロングスパンでイラスト筋のレベルアップ、ポンチ絵を追加していきたい。

日本語情報

日本語訳がアスキー出版局から出ている。というかhidarumaが参考にしているのはこれです。再版してほしいね。

wtsnjpさんがブログ,「東大 TeX 愛好会」でのTeX by Topic輪読ゼミの参加記をあげています。

https://blog.wtsnjp.com/2016/11/24/tex-by-topic1/

脚注
  1. なんか羨しい情報がTex by Topicのページにあるな? > In 2014, the German TeX user group Dante republished TeX by Topic, including some corrections and figures that not made it into the original. ↩︎

hidarumahidaruma

茶番パート

「TeXプロセッサの処理は入力、展開、実行、ビジュアライズの4つの段階とする分け方があって、Knuth先生はそれぞれ目、口、胃、腸に喩えて紹介している、と。とりあえずこれはいい?」
「何か微妙に奥歯に物が挟まったような表現だった気がしますけど。え、絵にするって胃や腸も!?」
「いやー、個人的には正直『口』以外はあんまりピンとこないから、身体のパーツで描くのは目と口だけかなあ。腸も消化が結びついていると言われれば『そうかも』って思うんだけれど、これはこれで絵にし辛いというのがある。胃は口と腸の間にあるから当てはめただけかなみたいに思ってるし」
「……ちなみに絵心の方は——いい笑顔だ。ダメっぽい」
「承認欲求モンスターをちゃんと育てるとレベルアップするよ多分」

hidarumahidaruma

「入力プロセッサって見るだけなんですか?」
「いや? 文字列の切れ目を判別して入力を切り分けたりしながら展開プロセッサに渡していく、トークナイズな話は多分ここ」
「また奥歯にものが挟まった言い方」
「前提として、ソースファイルでは最終出力されて欲しいコンテンツのテキストと、プログラムを示すテキストが混在するのね」
「それはどの言語もそうでは……?」
「普通の言語よりも混在の度合いが激しいし、プログラム扱いするための目印の文字の扱いも途中で変えられたりするから、入力を区切るだけではないんだよね」
「うーん……?」
「あと、生まれた年代が年代なので、使ってるマシンに入ってない文字を入れるための機構もある。こっちはHTML・XMLの実体参照に近いかな」
「あー、それは何かイメージできそうです」
「でも展開と組み合わさるとこれも結構……」
「……先刻から奥歯に挟まった物言いの何かがうっすら分かってきたような気がします」

hidarumahidaruma

「ざっくり言うと、入力からきたものを噛み砕いて細かくします」
「あ、それは確かに口っぽいですね。でも細かくするっていうのは?」
「マクロを示すテキストを、展開してコンテンツのテキストとプログラムを示すテキストとマクロを示すテキスト」
「マクロって先刻出ましたっけ。後、細かくした後もマクロが出てきてます?」
「出してないけどあったんだよね。メタ的には上手い言い換え表現が出なくて勢いで書いてしまった。「プリミティブとその他」みたいのも違うし。

えーと、完全展開とか\expandafterとかそういうのがあって、取り敢えず口の喩えのままいくと『飴なので10分舐めてから飲み込んでね』とか『一度噛んで出して次は2番目の胃に入れてください』とか、そういうのがあったりします」
「今牛が出てませんでした?」
「で、実行プロセッサこと胃に口で細かくしたものをエロローと送ります」
「折角ポンチ絵回避したのに何故……」

hidarumahidaruma

「コンテンツって書いたけど、本だとトークンってあるのでトークンで」
「画力が限界迎え始めたように見えます」
「はい、展開プロセッサからきているトークンのストリームを適宜3種のリストにぶちこむのが実行プロセッサです。多分」
「実行……? 」
「絵にある仕分け人っぽい人は3つのモードを持っていて、その切り換えをしながらそれぞれのリストにトークンを分けていくんだね。切り換えながらリストを作っていく作業というか」
「そういうのをちゃんと図にするのが求められているんですって。……水平リスト作るマン、垂直リスト作るマン、数式リスト作るマンのモード切り換えが『指示』って書いてあるやつですか?」
「そのつもりです……。でも、『垂直モードのときに文字トークンが来たので水平モードになります』みたいなのもあるので、図の不正確がすぎるかも」
「元の本が図示ほとんどないのって」
「あと片手間に代入系の処理も走ります」
「図は?」
「『指示』の中にそういうのもあると思って…… %TODO」

hidarumahidaruma

「リストの中身を良い感じに流しこんで、良い感じにDVIとかにしてもらいます」
「完全に力尽きた……?」
「」