macOS Sierra + TeX Live 2016 の環境で(通常の設定の場合)
$ man mendex
をするとドキュメントの日本語部分が文字化けするようです(添付画像).
/usr/local/texlive/2016/texmf-dist/doc/man/man1 にあるソース mendex.1
のエンコーディングは UTF-8 (BOM無), LF のようでしたので環境変数 $LANG を
ja_JP.UTF-8 に設定した状態で表示を試みるなどしましたが,文字化けは
治りませんでした.さらに
$ texdoc mendex
により表示される mendex.man1.pdf の中身も同様に文字化けしており,
現状では少なくとも macOS + TeX Live の環境を使用する一般のユーザが
mendex のドキュメントを読もうと思ってもなかなか難しい状況になっています.
一応の対処法として,私の環境では
1. Homebrew で最新の groff をインストールする
2. /etc/man.conf 94行目を次のように書き換える
NROFF /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E
という手順を踏むと正しい表示となることが確認できました.ただし,以下に示す
参考文献のように JNROFF の設定のみを変更しても(これにより vim の日本語
man ページは正しく表示されましたが)本症状は改善しませんでした.
参考:http://qiita.com/yu-ichiro/items/ea9c672e2d7488416db9
質問者の回答にはなっていませんが、情報まで ...
2015 の mended.man1.pdf は preview でちゃんと日本語で表示されますが、2016 のは文字化けしています。サイズとチェックサムは以下の通りです。
-rw-r--r-- 1 root wheel 157081 2 4 2016 /usr/local/texlive/2015/texmf-dist/doc/man/man1/mendex.man1.pdf
-rw-r--r-- 1 root wheel 41127 4 27 2016 /usr/local/texlive/2016/texmf-dist/doc/man/man1/mendex.man1.pdf
-rw-r--r-- 1 root wheel 15872 2 2 2016 /usr/local/texlive/2015/texmf-dist/doc/man/man1/mendex.1
-rw-r--r-- 1 root wheel 15872 2 2 2016 /usr/local/texlive/2016/texmf-dist/doc/man/man1/mendex.1
15c51a35ba2efabd8739219760c6876f /usr/local/texlive/2015/texmf-dist/doc/man/man1/mendex.man1.pdf
1d31d08f227b1ec12b3751322441ef08 /usr/local/texlive/2016/texmf-dist/doc/man/man1/mendex.man1.pdf
7e5db30a96279c3178b6ce53115cf7f9 /usr/local/texlive/2015/texmf-dist/doc/man/man1/mendex.1
7e5db30a96279c3178b6ce53115cf7f9 /usr/local/texlive/2016/texmf-dist/doc/man/man1/mendex.1
ということで 2016 の mendex.man1.pdf を作成する際何かが起きたのではないのでしょうか?
TeX Live のリポジトリの履歴を見てみます.
http://www.tug.org/svn/texlive/trunk/Master/texmf-dist/doc/man/man1/mendex.1?view=log
http://www.tug.org/svn/texlive/trunk/Master/texmf-dist/doc/man/man1/mendex.man1.pdf?view=log
PDF については,mendex.1 を UTF-8 に変換して,これから make で PDF を自動生成するところで失敗しているのでしょうか.
自分の環境 (Linux + TL2016) でも man で表示してみましたが,化けることなく表示されました.
http://www.tug.org/svn/texlive/trunk/Master/texmf-dist/doc/man/man1/mendex.1?view=log
http://www.tug.org/svn/texlive/trunk/Master/texmf-dist/doc/man/man1/mendex.man1.pdf?view=log
PDF については,mendex.1 を UTF-8 に変換して,これから make で PDF を自動生成するところで失敗しているのでしょうか.
自分の環境 (Linux + TL2016) でも man で表示してみましたが,化けることなく表示されました.
Linux の man は OK ということなので MANPATH に mendex.1 のあるディレクトリを MANPATH=$MANPATH:. などと調整すると Linux では man は OK ですね。
mended.1 自体は utf8 なので linux であればできそうだとは予想していたのですが。なお MacOS ではダメでした。man コマンド自体が OS ので man マクロ見ているところ違いだろうしな...
それから、こちらで linux で groff -man mendex.1 > mendex.ps したものを gs で見ると文字化けします。TL2016 で配られている mendex.man1.pdf を firefox で見ても同じような文字化けですね...
そうそう pdf ファイルには作成時の情報が入っていますよね
TL2015 の方は
/Creator(groff version 1.10 \(jversion 0.99\))/ModDate(D:20160204224521+09'00')/Producer(Acrobat Distiller 11.0 \(Windows\))
で、TL2016 の方は /Creator(groff version 1.22.3) となっています。多分 pstopdf とか使ってるのかな?
groff のバージョンが違いますね ... こっちのせんで追っかけて見ますが、久々の roff 系のコマンドなので四苦八苦しそうです。
ログの方、あまり精通していないので追っかけられません ...
> この自動生成プロセス自体をなんとかしてもらわないと,
というのは本当にその通りだと思います。ただ、プロセスを変えようにも
日本語 groff は標準では提供されておらず
http://www.yansite.jp/jman.html
等を見るとパッチをあてて日本語用にビルドしないといけないようです。
自動生成するには、この日本語 groff を TeX Live に含めるところから、
ということにもなりかねないので(可能ならそれでもよいのでしょうけど)、
わざわざ man 形式でなくても、もうむしろ pLaTeX 文書として書きなおす
という選択肢はないのでしょうか。texjporg で ptex-base のドキュメントを
提供しているのと同様に、mendex のドキュメントを用意するというのは悪く
ないと思います。
というのは本当にその通りだと思います。ただ、プロセスを変えようにも
日本語 groff は標準では提供されておらず
http://www.yansite.jp/jman.html
等を見るとパッチをあてて日本語用にビルドしないといけないようです。
自動生成するには、この日本語 groff を TeX Live に含めるところから、
ということにもなりかねないので(可能ならそれでもよいのでしょうけど)、
わざわざ man 形式でなくても、もうむしろ pLaTeX 文書として書きなおす
という選択肢はないのでしょうか。texjporg で ptex-base のドキュメントを
提供しているのと同様に、mendex のドキュメントを用意するというのは悪く
ないと思います。
> 確か、 upmendex 用に作りかけたまま中断したものが手元にあったと思います。
> 通じるレベルの英語になっているかどうかの自信が今一つのものですが、
> たたき台にご提供できるかもしれません。
あれば非常にありがたいです!
> 確か、ライセンスが異なっており、マニュアルもそのままコピペしてもいいものか、
> 気になった記憶があります。
確かにライセンスが異なっていて、mendex のほうが緩い内容になっていると思います。
とはいえ「mendex は makeindex をベースにしたプログラムである」こと自体には問題が
ないとする判断が TeX Live でなされているのだと私は推測していました。もしそうならば
マニュアルの流用も大きな問題ではない気がするのですが…
どのようになっているのでしょう?
> 通じるレベルの英語になっているかどうかの自信が今一つのものですが、
> たたき台にご提供できるかもしれません。
あれば非常にありがたいです!
> 確か、ライセンスが異なっており、マニュアルもそのままコピペしてもいいものか、
> 気になった記憶があります。
確かにライセンスが異なっていて、mendex のほうが緩い内容になっていると思います。
とはいえ「mendex は makeindex をベースにしたプログラムである」こと自体には問題が
ないとする判断が TeX Live でなされているのだと私は推測していました。もしそうならば
マニュアルの流用も大きな問題ではない気がするのですが…
どのようになっているのでしょう?
mendexとmakeindexのソースをざざっと比べてみたところ、
public domainと明記されている qsort.c, qsort.h 以外は全く別物のようです。
mendexは、makeindexの仕様をエミュレートしているものの
スクラッチから書き起こした独立のソフトである、
というのが私の理解です。
ライセンスが共通(例えばBSDライセンス同士とか)ならば、流用も許容されるかもしれませんが、
そうではなさそうなので私としては慎みたいと思いました。
そのため、私の訳した英語版mendex.1 は makeindex のものを見ずに訳しました。
英語の得意な方にチェックしていただけるとありがたいです。
public domainと明記されている qsort.c, qsort.h 以外は全く別物のようです。
mendexは、makeindexの仕様をエミュレートしているものの
スクラッチから書き起こした独立のソフトである、
というのが私の理解です。
ライセンスが共通(例えばBSDライセンス同士とか)ならば、流用も許容されるかもしれませんが、
そうではなさそうなので私としては慎みたいと思いました。
そのため、私の訳した英語版mendex.1 は makeindex のものを見ずに訳しました。
英語の得意な方にチェックしていただけるとありがたいです。
元の記事にぶら下げます。
内容的には macos の man groff な話題ですが、mendex の man 表示ができないということで ギリギリ texlive な話題になるとは思います。
さて
1) macports homebrew などで groff をインストール
2) /etc/man.conf の NROFF のタグを /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E に変更
3) mendex.1 を man で探せるように MANPATH (環境変数や /etc/man.conf の同タグ)に設定する。あるいは /etc/manpaths に追加する。
ここまでは実施されているとは思いますが ... 1) でインストールした groff は LANG を元に情報を探し出して言語対応して表示するらしいので ...
(ここの部分に関しては 標準の groff の日本語対応を分析中です)
4) 日本語マニュアルディレクトリを作成
mkdir -p ~/.texlive2016/texmf-dist/doc/man/ja/man1
5) オリジナルから link をはる
ln -s /usr/local/texlive/2016/texmf-dist/doc/man/ja/man1/mendex.1 ~/.texlive2016/texmf-dist/doc/man/ja/man1
6) 環境変数で 4) で作成した場所の情報を先に見るよう調整
export MANPATH=$HOME/.texlive2016/texmf-dist/doc/man:$MANPATH
この方法で 2) の部分を /etc/man.conf から ~/man.conf に作成し修正して
man -C ~/man.conf mendex
として表示できるようになりました。~/man.conf で問題がなければ /etc に上書きするなり alias するなり対処できると思います。
#まだ ps 経由 pdf 作成は未完 :-(
※遠い過去の記憶を元に最近の roff 環境をあれこれ想定しつつ試行錯誤したものなので、文中不適切な表現、不正確な表現があるかと思いますのでご指摘いただければ幸いです。
日本語 man を表示する方法を検討してくださっているようでありがとうございます.
> macos の man groff な話題
上記の点について補足ですが,前田さんが Linux 環境で正しく表示できたという
情報を提供してくださっています.しかし,例えば Ubuntu などは man を含む
コマンドライン環境全般がほぼ完全に日本語化可能なよう整備されている一方で
そうでない UNIX 系環境も多いはずです.したがって macOS 以外の UNIX 系環境
(前田さんがお使いのもの以外の Linux 環境を含む)で同様の問題が発生している
可能性は大いにあり得るのではないでしょうか.
> macos の man groff な話題
上記の点について補足ですが,前田さんが Linux 環境で正しく表示できたという
情報を提供してくださっています.しかし,例えば Ubuntu などは man を含む
コマンドライン環境全般がほぼ完全に日本語化可能なよう整備されている一方で
そうでない UNIX 系環境も多いはずです.したがって macOS 以外の UNIX 系環境
(前田さんがお使いのもの以外の Linux 環境を含む)で同様の問題が発生している
可能性は大いにあり得るのではないでしょうか.
> ps 経由 pdf 作成
私が既にコメントしていたように、「日本語 groff」をビルドすれば文字化けしない ps を作れました。
具体的に私が試した方法は以下です(Mac OS X 10.7.5 Lion)。
https://answers.launchpad.net/ubuntu/+source/groff/1.18.1.1-12 からソースを入手
* groff_1.18.1.1.orig.tar.gz
* groff_1.18.1.1-12.diff.gz
展開してパッチをあてる
$ patch -p1 <groff_1.18.1.1-12.diff
$ LDFLAGS=-liconv ./configure --enable-multibyte
$ make; make install
これで /usr/local/bin/groff が日本語 groff になるので
$ /usr/local/bin/groff -man mendex.1 >mendex.man1.ps
$ ps2pdf mendex.man1.ps
こうすると文字化けしません。
# Cygwin で make しようとしたらエラーで落ちた…
私が既にコメントしていたように、「日本語 groff」をビルドすれば文字化けしない ps を作れました。
具体的に私が試した方法は以下です(Mac OS X 10.7.5 Lion)。
https://answers.launchpad.net/ubuntu/+source/groff/1.18.1.1-12 からソースを入手
* groff_1.18.1.1.orig.tar.gz
* groff_1.18.1.1-12.diff.gz
展開してパッチをあてる
$ patch -p1 <groff_1.18.1.1-12.diff
$ LDFLAGS=-liconv ./configure --enable-multibyte
$ make; make install
これで /usr/local/bin/groff が日本語 groff になるので
$ /usr/local/bin/groff -man mendex.1 >mendex.man1.ps
$ ps2pdf mendex.man1.ps
こうすると文字化けしません。
# Cygwin で make しようとしたらエラーで落ちた…
もう本件の課題の解決策としては、日本語roff形式の入力ファイルを使わない方に進んでいて今更ではありますが、最新の本家groff 1.22.4に対して日本語PostScript(フォント非埋め込み)が出力できるようになるパッチを書きましたのでお知らせします。
ご興味があればこちらにお越しください。
やったこと
- PostScript出力用ポストプロセッサ grops にて、psname に "-UTF16-" があるとき UTF16 の HEX codeを出力するようにした。フォント非埋め込みの CJK のフォントが扱えるようになる。
- フォントの定義で、Unicode code point の範囲で指定できるようにした。この機能は jgroff 系に存在したもの。jgroffのソースから該当部分を切り出して最新の本家 groff に合うようにした。
もう少し検討して、本家 GNU にプルリクエストを出そうと思っています。
CJKの組版品質にかかわる機能で jgroff にあって、今回のものに無いものが沢山あります。また、本家groffにCJK向けに jgroff とは別の実装で取り込まれている機能もあります。
現状の品質は、最低限としてはまあ許せるけどもう少し何とかならないかなと思うレベルだと思います。
議論してくださる方がいらっしゃれば歓迎します。