いまさら Texinfo なんかに色目使って何をしたいのか

なぜに唐突に Texinfo 言い出したのか、謎に思った人がいるかもしれん。

実のところ、Doxygen の Cython 対応で lex を読みやすくしたい話と地続きである。実は昨日まで忘れてたけど。

GNU のプロダクトの「公式ドキュメンテーション」は Texinfo である。今でも、そして当面ずっと。だから GNU flex のドキュメントも GNU bison のドキュメントも、ベースは全て Texinfo で書かれている。

でな。この flex のマニュアルをさ、「自分で作ろうとしてる lex(flex) の Pygments lexer」で読みやすくしたい、とまで考えるとだな。どうしても Texinfo そのものを扱う必要が出てくるわけだ。(そのものを扱えば、@example ~ @end example を拾って pygmentize すればいい、となるが、texi2any で扱える変換出力ではこの情報を失ってしまうから。覆水盆に還らず。\(\LaTeX\)にすれば \verbatim の形で情報を残せるけれども、これは Texinfo より複雑。html から「盆に還す」のは pre を拾うことで可能かもしれないけれど、html のパースだって別に簡単だというもんでもないし、「@chapter」のような抽象的な情報が失われてしまうのもなんだかんだ鬱陶しい。)

「ドキュメンテーションシステムのコンバータ」は結構たくさんあって、Sphinx 自身が使うものもある(rst2pdfなど)し、最近は Pandoc が流行りだ。

でもな。「Texinfo を出力出来る」ものはいくらでもある(Sphinxもそう、Pandocももちろん)のに、「Texinfo を入力に出来る」ものは、ほとんど現存してない。いくつか見つけたが、どれもまともに動かなかった、もしくは期待と全く違うものだった。

Texinfo の歴史は驚くほど古く、当然ワタシは20年近く前から知っているが、今回真面目にドキュメント読んで、自分が思っていたよりも遥かに古いことを知った。「In the early 1990s」までに makeinfo まで揃ったことは読み取れる。Bo\(\TeX\)が October 31, 1984 に初お披露目されたことも読み取れる。RMS が Bo\(\TeX\) をベースに Info と Texinfo を作り上げたのはこの間だ。すなわち、十二分に枯れている。それにも関わらず Texinfo を入力にしてコンバートするツールがないのは無論、「それが複雑だからさ」。

\(\TeX\) や roff がそうであるように、Texinfo も、慣れてしまえば「書く」のは実はそんなに苦痛ではない。ワタシは昔は普通に \(\TeX\) も roff も手書きしていた人なので、Texinfo を自分で書いたことはなくてもこれは良くわかる。とても慣れてしまうと「快適だ」とまで感じてしまうのは、vi や emacs を使う感覚によく似ている。傍目にはマゾヒスティックに見えようとも、当人は全く不愉快に感じない。けれどもこれは「自分で書く」場合に限った話。人のを読むのは正直苦痛だ。(人のだけでなく、自分が勢いで一気に書いたものを見直すのが、非常にしんどいのね。)

特に reStructuredText に言えることで、markdown や数ある Wiki フォーマットにも概ね言えることは、「プレインテキストとしてもほとんど読める」ことであるが、こうした伝統的な \(\TeX\)、roff、Texinfo は、プレインテキストとして読むにはかなり苦痛である。つまり今まさに起こっているのは、「reStructuredText のような誰でも貢献しやすいフォーマット」に多くのプロジェクトが乗り換えたがっている、ということである。(つーか FSF もこのブームに乗っかって欲しいだよ。)

Sphinx と Pandoc がある今では、「Texinfo にしか出来ないこと」は少ない。強いていえば Info を作れるかどうか、くらいだ、今となっては。けれども Sphinx は Texinfo を出力出来るので、Info を作りたければ Texinfo を先に作れば良い。

今考えられることは、Sphinx がダイレクトに Info を生成出来るようにして Texinfo の存在意義をなくしてしまうこと、もしくは Texinfo に付属の texi2any が rst (あるいは Sphinx ソースそのもの)出力に対応すること、あるいは Pandoc が入力として Texinfo を扱えるようにすること、のいずれかがいずれは必要だ、ということ。頑固な GNU プロダクトは「Texinfo をやめる」ことは今後もしないだろうから、外野がどうにかするしかないし、そうすればいい。












まぁそんな大それたことを考えてはいるんだけれども、ただね、当座は、例えば GPL だけれども GNU プロダクトではないような OSS が、それでも Texinfo でマニュアルを書いていたとして、それを BitBucket で管理しているとして、そんなプロジェクトの Texinfo ソースが「読みやすくなる」ことだけでも目指せればいい。そしてこれを参考に、誰かが Texinfo2rst とか Texinfo2Sphinx なんてのを妄想してくれたらなお良い。

つまりは…「Texinfo を皆に使って欲しい」と思って Texinfo を扱おうとしてるのじゃなくて、実はその逆。Texinfo を出来る限り根絶したい(嫌いだからじゃなくて、OSSへの参加のハードルを下げたいから)、のです。