Edited at

FreeBSDの日本語マニュアル(2)

More than 3 years have passed since last update.

前回に引き続きFreeBSDの日本語マニュアル。

まだ課題が残っているので、jmanで困っていない人はjmanを使えば良いと思います。


前提条件

以下の条件を満たす人向け。


  • FreeBSD 9以降を使っている。

  • 環境変数LANGja_JP.UTF-8を指定している

  • パッケージの依存関係で、ja-groff(ports/japanese/groff)ではなくgroff(ports/textproc/groff)をインストールしたい


準備

以下のパッケージをpkgngもしくはportsからインストールする


  • groff(ports/textproc/groff)


  • ja-nkf(ports/japanese/nkf) (標準のiconvを使うように修正)

  • ja-man-doc(ports/jamanese/man-doc)

※ ja-man-docは、/usr/doc/ja_JP.eucJP/man で make installしても良い。


インストール

必要なファイルは、https://gist.github.com/false-git/7183d616527e8efda181 にあります。


ディレクトリの準備

好きなところにディレクトリを作成する。

% mkdir jman

% cd jman


ファイルを揃える

上記gistから、スクリプトを持ってきます。

% fetch https://gist.githubusercontent.com/false-git/7183d616527e8efda181/raw/3751937e803e86b296f635798d5793ae082d753b/makejman.sh


実行する

% sudo ./makejman.sh

rootで実行するので、不安な人はファイルの中身を見ながら1ステップずつ実行してください。


中身の説明


/usr/local/bin/man の作成

cp /usr/bin/man /usr/local/bin/

cd /usr/local/bin
patch < $PDIR/man.path

/usr/bin/man を /usr/local/bin/ にコピーし、パッチをあてます。

以前のものと同じです。


mdoc.local の修正

cd /usr/local/share/groff/site-tmac

V=`uname -r|sed 's/-.*//'`
echo ".ds default-operating-system FreeBSD\\~$V" >> mdoc.local
cat $PDIR/mdoc.local.add >> mdoc.local

この修正により、以下のような行がmdoc.localに追加されます。


mdoc.local

.ds default-operating-system FreeBSD\~10.1

.if "\*[locale]"ja.UTF-8" \{\
.mso mdoc_ja.local
.mso ja.tmac
.\}

default-operating-system は、uname -r から持ってきています。

これは、manページのフッタに表示されます。

ハードコードしてしまうので、FreeBSDのバージョンが変わるとおかしくなります。(オリジナルのmanはどうやって解決しているのだろう?)

その後の.ifで、localeがja.UTF-8のときのみmdoc_ja.localとja.tmacを読み込むようにしています。

localeは、manコマンドからgroffに渡されるのですが、ja.tmacの中で上書きされてしまうため、groffのオプションに-mjaを付ける代わりに、ここで読み込みます。


mdoc_ja.local の作成

tar xzOf $PDIR/tmac-20030521_2.tar.gz tmac-20030521_2/mdoc/ja.eucJP | iconv -f euc-jp -t utf-8 | sed s/japanese-iso-8bit/utf-8/ | /usr/local/bin/preconv > mdoc_ja.local

FreeBSDのja-groffの配布物であるtmac-20030521_2.tar.gz から、ja.eucJPを取り出し、preconvを使ってgroffが読めるコードに変換しています。


シンボリックリンクの生成

ln -s /usr/share/man/ja /usr/share/man/ja_JP.UTF-8

ln -s /usr/local/man/ja /usr/local/man/ja_JP.UTF-8

manコマンドは、以下の順で探すため、jmanが検索する ja はそのままでは検索されないため、リンクを張る。



  1. lang_country.charset (ja_JP.UTF-8)


  2. lang.charset (ja.UTF-8)


  3. en.charset (en.UTF-8)


元に戻す方法


  • /usr/local/bin/man を削除する

  • /usr/local/share/groff/site-tmac/mdoc_ja.local を削除する

  • /usr/local/share/groff/site-tmac/mdoc.local の 最後の5行を削除する

  • /usr/share/man/ja_JP.UTF-8 を削除する

  • /usr/local/man/ja_JP.UTF-8 を削除する

※ /usr/local/share/groff/site-tmac/mdoc.local のみオリジナルのファイルを修正するので、必要であればインストールの前にバックアップしてください。もし、なくしてしまっても、groffを再インストールすれば復元されます。


解決する問題


  • UTF-8の環境で、日本語のマニュアルが表示できます。

  • manページのヘッダ/フッタも正しく表示されます。

  • 「書式」セクションも正しくフォーマットされます。


解決しない問題

man patch すると、以下のようになります。

man.png

ちなみに、jmanだと以下のようになります。

jman.png

どうも、まだ割り付けに問題があるようです。

jgroffには、EUCの文字が改行で区切られている場合には、改行を空白に変換せずに結合するようなパッチがあたっているそうなので、その辺の問題かも知れません。


追記

patch のマニュアルが正しく整形されない理由がわかりました。

man コマンドがgroffに渡すオプションのうち、tmacを指定するのは -mtty-char-manです。

-manの指定により、/usr/local/share/groff/current/tmac/an.tmacが読まれます。

an.tmacは、単にandoc.tmacを読んでいるだけです。

andoc.tmacは、処理対象のファイルがDdを含めばdoc.tmacを、THを含めばan-old.tmacを読みます。

今回手を入れたのは、doc.tmacの方だけでしたが、日本語のpatch.1 は古い形式で書かれていたため、an-old.tmacが読まれることになり、結果としてja.tmacが読まれないため、割り付けがおかしくなったのでした。

an-old.tmacを読むと、doc.tmacと同じようにman.localを最後に読み込むようになっているので、/usr/local/share/groff/site-tmac/man.localに以下を追加することで、正しくフォーマットされるようになりました。


man.local

.if "\*[locale]"ja.UTF-8" \{\

.mso ja.tmac
.\}

mdocではなくmanの場合に、mdoc_ja.localの各種定義が必要かどうかわからなかった(patch.1は正常にフォーマットできているように見えるため)ため、まだ上記インストールスクリプトには取り込んでいません。

セクション3で.THが含まれるファイル(math, zlib等)を見ても問題なさそうだったの、上記スクリプトに含めました。

他に、このやり方で崩れるマニュアルがあったら教えてください。