\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+dvipdfmx
で test-gckanbun.tex
をタイプセットすると、以下のスクリーンショットのようにPDFへ出力されます。
簡単な \futurelet
の例だけど、訓点入力コマンドとしては、面白い応用例だと思っているのですが、どうでしょうか?
(すみません、時間の都合上、 2018年12月25日段階で、この漢文訓点スタイルの詳しい解説を省きますm(_ _)m オモロイところは、簡単な \ruby
マクロに \futurelet
と使って「送り仮名」を見に行っているところです。これにより、漢文訓点マクロの引数をすべて構えなくても良くなっています。すみません、詳細を省きます。)
まとめ
- 最初はよく分からない物事だったとしても、ある日ふと、自分で何かの嬉しい応用例を作れたときの楽しさは格別!
- でも、歳を食ってきて、昔話ばかりを語るようになったら、終わり!
- なので、ナウなヤング はLuaTeXを使いましょう!
Author And Source
この問題について(\futurelet のお勉強で作った漢文訓点スタイル), 我々は、より多くの情報をここで見つけました https://qiita.com/munepi/items/5e6ac49fa5c025123305著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .