74 久しぶりに Ghostscript でこけつまろびつ

(ドタバタの記録。そのうち整理することが出来るだろう…)

MacTeX 2023, ほぼ全ての Mac で快適に使えるようになったのだが、 1台だけ問題児がいた。

gv (PostScript のビューアー, Ghostscript を呼び出すことで実現されている) を実行しようとすると、
dyld[48474]: symbol not found in flat namespace '_yylex'
のようなメッセージを表示してこける。

しばらくネットを徘徊したけれど、 この症状が出た場合に簡単に直す処方は見つからなかった。 そのうちに MacPorts の方で直してくれることを期待しているけれど、 とりあえず何とかしないと。以前は動いていたんだよね。
% port installed gv
The following ports are currently installed:
  gv @3.7.4_4
  gv @3.7.4_6 (active)
1つ前のに戻してみる。
% sudo port activate gv @3.7.4_4
これでとりあえず動くようになった。当面はこれでしのごう。


さて、それで gv 動くようになったのだけれど、 その表示結果は日本語部分が全て文字化け。はてな?

あ、MacPorts のでなくて、TeXLive の ghostscript が動いているのか。 そちらでも表示できるようにすべきだけれど、 まずは MacPorts で動くようにしないと。 PATHの順番を直接いじるのは他への影響が大きいので、 シェル・スクリプトを使うか、エイリアスを使うのかな。 例えばエイリアスについては
alias gv='env PATH=/opt/local/bin:$PATH gv'

この結果、半歩前進。 PostScript データによっては文字化けなく表示できるが、 文字化けするものもあった。

具体的には、Ryumin-Light-H や GothicBBB-Medium-H を使うものは大丈夫だったが、 HaranoAjiMincho-Regular-UniJIS-UCS2-H, HaranoAjiMincho-Regular-UniJIS2004-UTF16-H を使うものはダメだった。

これは /opt/local/share/ghostscript/9.56.1/Resource/Font/ にあるファイル (Ryumin-Light-H, GothicBBB-Medium-H, HaranoAjiMincho-Regular-UniJIS-UCS2-H, HaranoAjiMincho-Regular-UniJIS2004-UTF16-H) を調べないと。

読んでみると、 HaranoAjiMincho-Regular-UniJIS-UCS2-HHaranoAjiMincho-Regular-UniJIS2004-UTF16-H も、 HaranoAjiMincho-Regular という CIDFont を使うように書いてある。 CIDFont を調べてみよう。
% cd /opt/local/share/ghostscript/9.56.1/Resource/CIDFont
% ls -l HaranoAjiMincho-Regular
lrwxr-xr-x  1 root  wheel  94  4 20  2020 HaranoAjiMincho-Regular@ -> /usr/local/texlive/2020/texmf-dist/fonts/opentype/public/haranoaji/HaranoAjiMincho-Regular.otf
% file HaranoAjiMincho-Regular
HaranoAjiMincho-Regular: broken symbolic link to /usr/local/texlive/2020/texmf-dist/fonts/opentype/public/haranoaji/HaranoAjiMincho-Regular.otf
ああ、シンボリック・リンクが壊れている。 そういえば /usr/local/texlive/2020 は消しちゃったのだった。

/usr/local/texlive/2023/texmf-dist/fonts/opentype/public/{haranoaji,haranoaji-extra} にある Haraなんとか.otf へのリンクを、 /opt/local/share/ghostscript/9.56.1/Resource/CIDFonts/Haraなんとか という名前で作る。 手動でやると間違えそうだし、また後で同じことをやるかもしれないので、 シェル・スクリプトを書く。

linkhara.sh
#!/bin/sh
NENDO=`/bin/ls /usr/local/texlive/|grep 20|tail -1`
SOURCE=/usr/local/texlive/$NENDO/texmf-dist/fonts/opentype/public
VER=`/bin/ls /opt/local/share/ghostscript|grep -v fonts|tail -1`
DEST=/opt/local/share/ghostscript/$VER/Resource/CIDFont
cd $DEST
for i in `/bin/ls $SOURCE/haranoaji-extra`
do
  trimmed=$(basename $i .otf)
  rm -f $trimmed
  ln -s $SOURCE/haranoaji-extra/$i $trimmed
done
for i in `bin/ls $SOURCE/haranoaji`
do
  trimmed=$(basename $i .otf)
  rm -f $trimmed
  ln -s $SOURCE/haranoaji/$i $trimmed
done
(NENDO=2023, VER=9.56.1 と埋め込んでも良いけれど、 自動的に設定するようにしてみた。)

実行…これで MacPorts の Ghostscript の文字化けが解消した。やれやれ。


MacTeX の Ghostscript の方は? MacTeX のインストール作業にミスがあったようで、一部やり直したら、 MacTeX の Ghostscript でも文字化けはなくなった。やーれやれ。


1つの疑問は、このシンボリック・リンクを張る作業は、 これまでどうやっていたのだろう??

あ、これか。 「日本語フォントの選択を考える (原ノ味フォントにこんにちは)」
こんなことをした
pushd /usr/local/share/ghostscript/9.50/Resource
tar cfz ${SOMEWHERE}/HaranoAji.tar.gz */Hara*
cd /opt/local/share/ghostscript/9.50/Resource
sudo tar xzf ${SOMEWHERE}/HaranoAji.tar.gz
popd
2020年度にやった作業の残骸が使えなくなった (/usr/local/texlive/2020 を消したから)、ということか。 つまり、 MacTeX でインストールされる Ghostscript の Resource 中の Haranoaji 関係のファイルを持って来たと。 このやり方の方がスマートかなあ?つまり今だったら
pushd /usr/local/share/ghostscript/10.00.0/Resource
tar cfz ${SOMEWHERE}/HaranoAji.tar.gz */Hara*
cd /opt/local/share/ghostscript/9.56.1/Resource
sudo tar xzf ${SOMEWHERE}/HaranoAji.tar.gz
popd
とする訳だな。


(復習) MacTeX では、日本語を表示させたい場合は、 デフォールトで HaranoAji フォントを使うようになっている。 Ghostscript でもそれを利用するようにできている。 MacPorts の Ghostscript では、OTF の Hiragino フォント (古い!) を使って日本語を表示するようになっていた(る?)が、 これは obsolete である。 それで私は、MacTeX の Ghostscript から、 HaranoAji フォントとそれを利用する設定をパクって MacPorts の Ghostscript で 日本語を表示するようにしている、ということである。

MacPorts の中にそういうのって入っていたりするのかな?? 誰かやってくれないだろうか。

…そもそも MacTeX の Ghostscript が素晴らしいのだから、 MacPorts の Ghostscript なんか使わなければ良い、 という考え方もあるか。 MacPorts で gv をインストールするときに、 依存関係で Ghostscript が入ってしまうけれど、 そのあたりを見直せば良いのかな? gv くらい自分でインストールするとか、 gv の代替物を探すとか、 MacPorts の Ghostscript を(インストールはするけれど)使わないことにして gv から MacTeX の Ghostscript を呼ぶことにするとか。

MacPorts は TEX でもそうだけれど、 何でもかんでも依存関係でインストールさせているのが問題の種になっているね。 そのあたりを調べるのか。

Macのプレヴュー(Preview)が、 日本語の PostScript ファイルをちゃんと表示できるようにすれば良い、 という気もする。Preview が裏で使っている /usr/bin/pstopdf を Ghostscript の ps2pdf に置き換えられないかとも考えたけれど、 それはたとえ出来ても、 日本語 Ghostscript が使えるようになっていることが前提になるので、 あまり意味がないかな。 でも、 PostScript ファイルがダブルクリックで表示できれば嬉しい気もする。



桂田 祐史