▼BSD/groff の -mandoc を -man 形式に変換する▼

man(1) で牽くマニュアルページは 伝統的に -man マクロ (groff_man(7)) で 書かれていますが、groff や mdocml がある環境では より合理的な -mandoc で 書かれていることがあります。

が groffが無い環境では マニュアルが読めないので不便です。 (Solarisとか、古いgroffしかないとか) かなり腹立つのですが時代の流れでしょうか。

なんとかして -man に変換しようという試みを まとめてみました。 ニッチな需要なのか、中途半端なものが点在している状態。 (2014.12)

$Id: mandoc2man.html,v 1.2 2014-12-26 12:19:30+09 kabe Exp $

$Keywords: convert mandoc to man, mandoc2man, mdoc2man $


mandoc2man
(1998.08〜) sed スクリプト。 本稿の筆者が、まだ OpenSSH に同様のツールが 無かったころに書いたものです。 当初は BIND の マニュアル変換用。
(今のBIND-10あたりは DocBookから起こしているので、 比較的まともな -manになっている)

mdoc2man.awk
awk スクリプト。 OpenSSH portable に付属のもの。 昔は無かった。 ここで挙げているコンバーターの中では一番デキがいいです。 OpenSSH を自分でコンパイルした人なら、すでに持っていることが多いでしょう。 OpenSSH/OpenSSL 以外の-mandocを食わせると時々変になりますが。

mdoc2man.pl
perlスクリプト。 GNU AutoGen の付属品。 AutoGenはネイティブでは -mandoc までしか出力できないので、 この mdoc2man.pl で -man 出力を得ているのですが、 あまりデキがよくない。まともに読めない。 an-trap なんてトラップは昔の groff にはありませんよー…

mdocml: mandoc UNIX manpage compiler toolset
実装はC。 man(1)の置き換えにも使える。 実装の本気度では一番。 新しい *BSD では標準装備されているので、追加導入は不要。

mandoc -mandoc -Tman file.1mandoc > file.1man-man に変換できる。 品質もなかなか。 変換漏れはないのだが、インデントが深すぎることがあって ちょっと見にくいかな?

実装言語が全部違うのが面白いですなぁ。


-mandoc が標準になっていて、-manだと読めないプログラム類

BIND
最近のBINDはちゃんとした -man になりました。 もっとも man にはたいしたこと書いてないので、HTML の /usr/share/doc/bind-*/arm/ (Administrator Reference Manual) を読んだ方がいいです。
OpenSSH portable (4.3p2)
未だに -mandoc。 古いgroffでは読めません。 同梱の mdoc2man.awk を使いましょう。
OpenSSL 0.9.8**
抱えている util/pod2man.pl で pod から -man に 変換してからインストール。 まともです。ちゃんと読めます。 OpenSSL 1.0系では perl 付属の pod2manを必要としている模様。
ntp-4.2.x
AutoGen に移行中なので、-man出力は AutoGen品質。 読めない。 -mandocを OpenSSH の mdoc2man.awk で加工しなおしたほうが よいです。 というか HTML の方が詳しいので、そっちを見ましょう。
(NetBSD,FreeBSDの標準マニュアル)
自分で自分のマニュアルを引けない状態ではリリースされないので、 実際には困りませんが。 他のプログラムで、マニュアルが無いんだけど BSD側で書き足したものをバックポート、 するような場合に問題になる程度ですか。

かべ@sra-tohoku.co.jp