去る6月6日,2012年以来実に6年ぶりとなる Texdoc の大型アップデートを行いました.既に TeX Live 2018 に収録されています.従来の Texdoc は CTAN を介さない極めて特殊な方法でアップデートされていましたが,今回からは他のパッケージと同様 CTAN を経由してのリリースとなります.
Texdoc 3.0 の新機能
Texdoc 3.0 の目玉機能は「新しいオプションパーサ」と「あいまい検索」の2つです.
新オプションパーサ
従来の Texdoc では,複数のオプションを指定する場合,たとえショートオプションでも
$ texdoc -v -s -l <keyword>
のように1つ1つにハイフンをつけて個別に指定してやる必要がありました.
新しいオプションパーサは,可能な限り POSIX 互換になることを目指していて
$ texdoc -vsl <keyword>
のように複数のショートオプションをまとめて指定できるようになりました.
あいまい検索
従来の Texdoc では,ミスタイプや記憶違いによって間違ったパッケージ名を入力すると
$ texdoc -l tikzsnowman
Sorry, no documentation found for tikzsnowman.
If you are unsure about the name, try searching CTAN's TeX catalogue at
http://ctan.org/search.html#byDescription.
のように “not found” なメッセージが出て終わりとなってしまいました.
Texdoc 3.0 では,入力キーワードに対して該当するドキュメントが1つも見つからなかった場合,自動的にあいまい検索が走ります.したがって仮にタイポや記憶違いがあっても
$ texdoc -l tikzsnowman
1 /usr/local/texlive/2018/texmf-dist/doc/latex/scsnowman/scsnowman.pdf
= Package documentation
2 /usr/local/texlive/2018/texmf-dist/doc/latex/scsnowman/scsnowman-sample.pdf
= [ja] Sample of use
3 /usr/local/texlive/2018/texmf-dist/doc/latex/scsnowman/README.md
= Readme
Enter number of file to view, RET to view 1, anything else to skip:
のように,入力に最も近い名前のパッケージを見つけ出すことができます.
このあいまい検索が許容する「あいまいさ」(正確には Levenshtein 距離)は設定ファイル (texdoc.cnf) で fuzzy_level
の値を調整することで自由にカスタマイズすることができます1.
fuzzy_level = 3
デフォルト値は5ですが,これを大きくすればより許容されるあいまいさが大きくなり,小さくすると許容範囲が狭まります.また0を指定することにより,あいまい検索機能を完全にオフにすることも可能です.
上記の新機能については先月ポーランドで開催された BachoTeX 2018 でトークを行っているので,詳しいことについてはその際の発表資料も参考にしてください(ただし当然ながら,英語です).
その他の変更点
上記2つの新機能以外にも,Texdoc 3.0 では多くのバグ修正や軽微な更新を行っています.例えば,下記の記事で指摘されている PAGER
等の環境変数が(状況によって)効かない問題が修正されています.
また,昨年末より開発リポジトリを GitHub に移転しました.
細かい変更点や議論は,上記リポジトリで確認できます.バグ報告等も GitHub 上で受け付けています.
おわりに
昨年11月頃からちょいちょい Texdoc のソースコードをいじっていたのですが,私が大きく手を入れたバージョンをリリースするのはこれが初めてです.大きな問題がないといいのですが……
Texdoc は全世界でかなり多くの TeX Live ユーザが利用しているツールだと思われますが,意外にも5年ほどまともにメンテナンスされていなかったようです2.Texdoc のスコア計算の仕組みを理解してこのブログに記事を書くために Texdoc のソースコードを読み込んだ結果3,うっかりメンテナになってしまったというのがことの顛末です.
なにはともあれ,TeX ユーザの皆さまには Texdoc 3.0 でより快適な TeX ライフを送っていただければ幸いです.バグ報告や機能追加の要望は GitHub リポジトリで issue 登録・プルリクエストするか,または私個人宛てに送っていただければ対応するかも知れません(日本語でも ok です).