\futurelet のお勉強で作った漢文訓点スタイル


  • CTAN にもgckanbunパッケージを登録されました。TeX Live 2021から、gckanbun パッケージとして利用可能になるはずです。
  • munepi/gckanbun - GitHub にて、 gckanbun.sty 2021/03/25 v1.0 をリリースしました。

これは「TeX & LaTeX Advent Caleandar 2018」の23日目の記事です。
22日目は、zr_tex8rさんでした。24日目は、golden_luckyさんです。

みなさん、#テフライブ! していますか?

この記事では、(LuaTeXと全く関係ありませんが、)十数年前の若かりし頃に、「 \futurelet のお勉強がてらに作った漢文訓点スタイル」(の昔話)を紹介します。

\futurelet ってよく分からん(かった)

\futurelet の解説は、例えば、本田さんと吉永さんとの共著『LaTeX2eマクロ&クラスプログラミング基礎解説』の10ページにある。

それによると、\futurelet は、その後ろに3つのトークンを従って、

\futurelet〈token1〉〈proc〉〈token2〉

のように用いる。これは、

\let〈token1〉= 〈token2〉〈proc〉〈token2〉

と等価である。サンプルとして、

\def\@test{[\@nexttoken]}
\futurelet\@nexttoken\@test\LaTeX
=> [LaTeX]LaTeX

とある。十数年前の当時、これを読んで試行したり、マクロの展開を追っても、 \futurelet の嬉しさが正直よく分からなかった。

あれ? これ、漢文の訓点の入力に使えるんじゃない!?

しばらくの間、 \futurelet となんとなくで使っていたんだけど、それでも嬉しさが実感として分からなかった。

十数年前のある日、ふとしたときに、漢文の訓点を入力する必要があって、巷にはいくつか訓点スタイルがあったけれども、訓点コマンドに決まった引数を必ずつけるマクロなものが多く、これは入力するのが大変だなーと思っていた。

そのとき、あっ、「 \futurelet で次に訓点の何がくるかどうかで見ていけば…、」と気づいた。
しかも、「ルビ→送り仮名→返り点→句読点」を全部 \futurelet で追えばええやんと。

初めて作った \futurelet の応用例:漢文訓点の入力マクロ

GitHubGistに https://gist.github.com/munepi/5c9e53936e3540b8374b4ab14e6b7832 munepi/gckanbun - GitHub を公開してみました。

作った当時よりも、接頭辞 \gcknbn@ を入れたり、 \dimexpr で計算するように書き換えたりしていますが、実際の処理は当時のままです。
(今だったら、もう少し綺麗に書けますが、リファクタリングせずに晒します :-) )

uplatex+dvipdfmxtest-gckanbun.tex をタイプセットすると、以下のスクリーンショットのようにPDFへ出力されます。

簡単な \futurelet の例だけど、訓点入力コマンドとしては、面白い応用例だと思っているのですが、どうでしょうか?

(すみません、時間の都合上、 2018年12月25日段階で、この漢文訓点スタイルの詳しい解説を省きますm(_ _)m オモロイところは、簡単な \ruby マクロに \futurelet と使って「送り仮名」を見に行っているところです。これにより、漢文訓点マクロの引数をすべて構えなくても良くなっています。すみません、詳細を省きます。)

まとめ

  • 最初はよく分からない物事だったとしても、ある日ふと、自分で何かの嬉しい応用例を作れたときの楽しさは格別!
  • でも、歳を食ってきて、昔話ばかりを語るようになったら、終わり!
  • なので、ナウなヤング はLuaTeXを使いましょう!