LoginSignup
4
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-12-24
  • 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へ出力されます。

スクリーンショット 2018-12-25 4.54.46.png

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

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

まとめ

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2