去る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です)。