troffと日本語

生粋のUNIX使いは、今でもやはりTeXではなくてtroffを使ってドキュメントを書くのだろうか?
roffと聞くと、「あぁ、manページね」という反応が返ってくると思うが、troffはmanページの整形に使われるnroffの親戚で*1Wikipediaによると、

troff は主に写植機(あるいはプリンタ)に文書を印刷する際の書式設定を行う roff である。もともとはC/A/Tという写植機用の印刷データを生成する目的で開発されており、この写植機上で使用する特有のコマンドセットが数多く定義されている。初期のバージョンはジョー・オサンナを中心に開発が行われていたが、1977年にジョー・オサンナが心臓麻痺で他界して後は主にブライアン・カーニハンが中心になって開発が継続された。

という歴史がある。

で、もちろん、Plan9の論文はすべてtroffで書かれている。

ちょっと思い立って、日本語の文章をtroffで書いてみた。まず、TeXLaTeXがあるように、troffもマクロを追加することで文法を拡張できる。論文のような書類用にはmsマクロが用意されているので、これを使う。

.TL
Plan9日記

のように書き始めたのだが、page(正確にはtr2postというポストスクリプトへの変換コマンド)でそんなglyphはみつからないとエラーになってしまい、日本語が文字化けしてしまう。UTF-8には対応しているので、フォントが足りないのかとも思ったが、日本語を含むにはnihongoマクロが必要になるようだ。そして、次のように日本語を"\f(Jp"と"\fP"で囲む必要がある。うむぅ、面倒くさい。今時のgroffはちゃんとUTF-8に対応しているみたいだけど。

Plan9\f(Jp日記\fP

troffの実行は次の通り。

% troff -ms -mnihongo hoge.ms | page

nihongoマクロの中身はどうなっているかというと、/sys/lib/tmac/tmac.nhongoは次のようにaux/mnihongoをフィルタとして実行しているだけ。aux/mnihongoはPSファイルに日本語フォントを埋め込んでいるのだとか。.piとはpipeを意味するコマンド。

.pi /bin/aux/mnihongo

話は変わるけど、TeXPascalだとすると、troffはCというイメージかなぁ。Knuthの文芸的プログラミングの方のWEBはTeX + Pascalだったけど、CWEBはtroff + Cだし。

P.S.
troff.orgというページがなかなか熱い。

余談になるが、萩谷先生の「ソフトウェア考現学」では次のようにtroff/nroffが揶揄されている。

はっきりいって、troff/nroffは、UNIXソフトウェアの中の最大の愚作だ。コマンド体型もきたならしいし、ソースもきたならしい。何でこんなものを長々と使っているのか気がしれないのだが、不幸にして、eqnやtblといったプリプロセッサや-msなどのマクロが完備してしまったために、どうも生き長らえているようである。

ソフトウェア考現学―基礎概念への最新おもしろガイド (Fine soft series)

ソフトウェア考現学―基礎概念への最新おもしろガイド (Fine soft series)

*1:今時のUNIXだとGNU groffにリプレースされていると思うが。