Ghostscript †
Ghostscript は PS (PostScript) を解釈するソフトです。
UNIX 上の TeX には必須のソフトで、
次のような場面で直接、あるいは間接的に利用します。
- dvips で作った PS ファイルを画面で確認する
- ps2pdf で PS を PDF に変換する
- epstopdf で EPS を PDF に変換する
- dvipdfm(x) で EPS 画像を張り込む
- xdvi で張り込んだ EPS 画像を表示する
- 非 PS プリンタで印刷する(PS ファイルは当然ですが、
PDF を AdobeReader で印刷しても ghostscript を経由します。)
ptetex3 では teTeX-3.0 にならって、ghostscript は守備範囲外にしています。
自力でコンパイルするとすれば、日本語フォントの設定はもちろん、
OS の印刷システム(printcap や CUPS?)との連携も考えなくてはいけません。
さすがに ptetex3 の手には余ります。
不完全なままでも OS 付属のもので我慢するしかないでしょう。
日本語対応 †
日本語 TeX 環境には、日中韓 (CJK) 対応の Ghostscript が必要です。
ところが多くの OS に付属するものは、この対処がかなり不足しています
(→環境比較)。
主に次の処理ができるかどうかがポイントです。
- 日中韓文字の表示ができる
- 日本語の縦書きができる
(括弧などが回転され、拗音・句読点などが適切にシフトされる)
- PDF 生成時に漢字の非埋め込み制御ができる
これらの機能のうち、1.と2.は必須ですが、
2.ができないものが意外に多くあります。
3.はできなくても dvipdfmx でなんとか代用にはなりますが、不便です。
ライセンスとバージョン番号の関係 †
- ライセンスとバージョンごとの機能の違いは→http://macwiki.sourceforge.jp/cgi-bin/wiki.cgi?Ghostscript#i3。
- AFPL, GPL(gnu), ESP 版の違いは→http://ja.wikipedia.org/wiki/Ghostscript
も詳しい。
- 下の表の、背景が黄色のところはバージョン番号が重複している目印で、
これ以外はバージョン番号から AFPL/GPL(gnu)/ESP 版の違いが判別できます。
- バージョン番号の太字は重要と思うもの、
OS の名前の太字は日本語対応の4つの機能がすべて使えることの確認がとれたものです。
CUPS 付の ESP Ghostscript 8.15.3 を使うか、最新の GPL Ghostscript 8.54 を使うか、悩ましいと言うこと?
- 8 系を今後整備するなら,GPL を狙うことになるでしょう (↓参照)
- ESP Ghostscript 8.15.4 はESPとしての最終リリース。
2007年5月現在、ESP->GPLマージ作業が進行中であるが、Ghostscript 8.57のCJK対応は
まだ不十分と思われる。(記: JW - 2007-05-21)
- Ghostscript-8.60 のCJK対応はまだ十分ではない。縦書文章が正しく印刷されない等。(記: JW - 2007-8-02)
- Ghostscript-8.63 のCJK対応状況は依然8.60と大差ない。但し、先頃CJK関連バグ対応の担当者がリアサイン
されたようで、今後の進展に期待したいところです。
- Ghostscript-8.64 で日本語縦書き文書の句読点位置の表示問題が修正されました。(記: JW - 2009-02-07)
およそのリリース日 | AFPL | GPL | gnu | ESP | 採用OS |
---|
およそのリリース日 | AFPL | GPL | gnu | ESP | 採用OS |
---|
2010-09-18 | | 9.00 | | | |
---|
2010-02-11 | | 8.71 | | | |
---|
2009-08-01 | | 8.70 | | | openSUSE 11.3 |
---|
2009-02-05 | | 8.64 | | | Slackware-current, Vine Linux 5 |
---|
2008-08-01 | | 8.63 | | | Slackware-current |
---|
2008-03-01 | | 8.62 | | | Fedora9 |
---|
2007-11-21 | | 8.61 | | | Debian (sid)* |
---|
2007-08-01 | | 8.60 | | | |
---|
2007-05-11 | | 8.57 | | | |
---|
2007-03-14 | | | | 8.15.4 | Fedora7 |
---|
2007-03-14 | | 8.56 | | | |
---|
2006-09-28 | | | | 8.15.3 | openSUSE 10.2, FC 6 (update), slackware?, Debian 4.0 |
---|
2006-05-31 | | 8.54 | | | |
---|
2006-05-29 | | 8.51 | | | |
---|
2006-05-17 | 8.54 | | | | |
---|
2006-04-25 | | | | 8.15.2 | FC 5 (update), FC 6 |
---|
2006-01-02 | | 8.50 | | | |
---|
2005-10-24 | 8.53 | | | | |
---|
2005-10-07 | 8.52 | | | | |
---|
2005-09-22 | | | | 8.15.1 | SUSE 10.1, FC 5 |
---|
2005-04-18 | 8.51 | | | | |
---|
2004-12-11 | 8.50 | | | | |
---|
2004-09-22 | | 8.15 | | | |
---|
2004-02-19 | 8.14 | | | | |
---|
2004-02-02 | | 8.01 | | | |
---|
2004-01-01 | 8.13 | | | | |
---|
2003-12-08 | 8.12 | | | | |
---|
2003-10-09 | | | | 7.07.1 | SuSE 9.2, Plamo 4.2, Momonga 3 |
---|
2003-08-17 | 8.11 | | | | |
---|
2003-05-17 | | | 7.07 | | Vine 3.0 〜 4.2, FreeBSD 6.1 |
---|
2003-03-31 | | | 7.06 | | |
---|
2003-02-10 | | | | 7.05.6 | |
---|
2002-11-21 | 8.00 | | | | |
---|
2002-09-06 | | | | 7.05.5 | |
---|
2002-07-30 | | | | 7.05.4 | |
---|
2002-07-02 | | | | 7.05.3 | |
---|
2002-05-24 | | | | 7.05.2 | |
---|
2002-04-23 | | | | 7.05.1 | |
---|
2002-04-22 | | | 7.05 | | |
---|
2002-01-31 | 7.04 | | | | |
---|
2001-10-19 | 7.03 | | | | |
---|
2001-04-07 | 7.00 | | | | |
---|
- openSUSE 10.2
- cjk-20050315-39,
library-8.15.3-24
- FC 5
- 8.15.1-7 -updates-> 8.15.2-1.1,
fonts-5.50-13.1
- FC 6
- 8.15.2-8.1 -updates-> 8.15.3-1.fc6,
fonts-5.50-13.1.1
- Plamo 4.2
- 7.07-i386-P4,
fonts-8.11-noarch-P1
- Momonga 3
- 7.07-17m,
fonts-6.0-2m
- Vine 3.2
- 7.07-0vl22.1 -updates->
7.07-0vl25.1,
fonts-5.50-1vl1
- Vine 4.0
- 7.07-0vl28,
fonts-5.50-1vl2
- slackware-11.0
- espgs-8.15.3svn185
- Fedora
- https://admin.fedoraproject.org/pkgdb/packages/name/ghostscript
- Debian (sid)* 開発版をマージ
- 8.61.dfsg.1~svn8187
CMap とは、
OpenType フォントの内部コードに変換するためのテーブルのようなもので、
例えば "90ms-RKSJ-H" という CMap は、
(Windowsの)SJIS→Adobe Japane1 とコード変換します。
"UniJIS-UTF16-H" なら UTF16→Adobe Japane1 と変換します。
"...-V" という CMap は "...-H" とほぼ同じ役割ですが、
縦書フォントにアクセスする点だけが異なります。
我々が一番良く使う、JIS X 0208 から変換するものは、
なぜか非常に短い名前になっていて "H" と "V" です。
CMap は PDF 文書を扱う上でほぼ必須と言えるテーブルで、
Adobe Reader にも付属するものです。
Adobe の作ったものはライセンス上、そのままなら再配布できるのですが、
改変してから再配布することはできません。
(もっとも改変する必要もないと思われます.)
ghostscript でも OpenType フォントや PDF を扱う上で必須となるものですが、
CMap 単独の配布物*1
を、改変せずに使うのが常套手段となっています。
もっとも自作することも不可能ではありません。
CMap は PDF や OpenType フォントに必要なものなので、dvipdfmx でも利用します。
Ghostscript がシステム中に存在すると,ptetex3 の make font(y) の作業により
Ghostscript のもつ CMap にシンボリックリンクを張って,
新たに同じファイルをシステム中に複数持つという無駄を省きます.
Ghostscript のもつ CMap が不足している場合,必要なものを ptetex3 からコピーします (コピー先は Ghostscript の方ではなくて,ptetex3 のインストール先です).
ただし,Ghostscript の CMap ディレクトリ名にヴァージョン番号が含まれて
いた場合
(Ghostscript のヴァージョンが 8 以上のとき該当.
/usr/share/ghostscript/8.xx/Resource/CMap),
アップデートなどで,Ghostscript のヴァージョンが上がると,
dvipdfmx などのコマンドがエラーを吐いて止まってしまうという現象を引き起こします.
この場合,再度 make font(y) してやる必要があります.
日中韓対応に関するリンク †
課題 †
- ptetex3 専用の gs を(OS のものと共存して)インストールすることのメリットは?
- 3.の問題「PDF 生成時に漢字の非埋め込み制御ができる」は解決する?
- 「lib/neverembed.ps を置く」という (よく紹介されている) 解決法が確実に
使えることになって,ps2(j)pdf, epstopdf, dvipdfmx(.cfg) で GS -sDEVICE=pdfwrite
を呼び出すときに,生で /NeverEmbed などを書かなくてよくなり,かつ,
lib/neverembed.ps を編集すれば,みな同じ埋め込み設定にできるので,便利になります.
- 2.の問題(gv, evince などでプレビューや印刷で)は以前のまま?
- 2つの gs が存在するための混乱は?
- gv (ghostview), ggv (gnome-gv?), evince などのヴューア,
lp/lpr, CUPS などの印刷系コマンド
などが gs にどうやってアクセスしているかを調べる必要があります.
- フォントの設定を(OS の違いを吸収して)自動化することは可能か
- (案 1) 7font-search.sh を再利用して,より品質の高い実フォントへのフルパスと
PS フォント名の対照を書いたファイル (CIDFnmap や cidfmap) をコンパイル時に作る
- (案 2 -- 案 1 との差分) 対照リストをコンパイル時ではなく事前に作っておいて,
コンパイル時には必要なところをコメントアウトする.PS フォント名には代替名を
使えるので,最大限活用する
- gs のバージョンごとの機能の違いをまとめる
- 7系と8系ではフォントの書式が違う?--> ◎
- OpenType フォントが使えるのは 8.x (8.15?, 8.5x?) のみ?
- gs のどのバージョンにどの機能のパッチが存在するのかまとめる
コメントをどうぞ †
- 以下の情報のおかげで,gs (SVN PRE-RELEASE 8.61 rev.8187) の日本語表示に成功しました (Cygwin (X11) 上).ps2pdf も正常に動きました -- kuroky -- 1--4 のできて欲しいことリストのうち,1, 2 はできます (2 は,Ghostscript の再度の更新で不可になった模様です).非埋込み制御は,デフォルトではできませんでした.埋め込んでよければ,OTF を使って作った PS ファイルを PDF ファイルにすることはできました.
- http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/49095.html
- http://d.hatena.ne.jp/k3k1/20070812
- 具体的な手順は,かいつまんで書くと,
- lib/gs_res.ps の変更
- ./configure [--disable-compile-inits]
- [Makefile で DISPLAY_DEV=$(DD)bbox.dev を DISPLAY_DEV=$(DD)x11.dev に変える]
- make
- make install
- cd ${prefix}/share/ghostscript/8.61/lib && gs -q -dBATCH -sFONTDIR=C:/WINDOWS/Fonts mkcidfm.ps >> cidfmap
- # 印刷せず,gs で表示するだけなら,上で十分.印刷など,より確実には,直上の 1 行を以下に
- ${prefix}/share/ghostscript/fonts に CJK フォントのシンボリックリンク
- cd ${prefix}/share/ghostscript/8.61/lib && gs -q -dBATCH -sFONTDIR=C:/WINDOWS/Fonts mkcidfm.ps | sed -e 's|C:/WINDOWS/Fonts/||g' >> cidfmap
- (SVN PRE-RELEASE 8.61 rev.8191) で日本語フォントの非埋め込み制御をやってみるとできましたが...? -- kakuto
- 情報ありがとうございます。これで書き込みやすくなったでしょうか。 -- 土村
- kakuto さん,コメントありがとうございます (土村さん,下部への移動ありがとうございます).lib/neverembed.ps を作って,ps2pdfwr に -f neverembed.ps を書き加えるという方法を取ってみたのですが,フォント (msmincho や batang.ttc など) は埋め込まれたままになってしまいました.テストに使った PS ファイルは,ptetex の make test で作られる jsclasses.ps や otftest.ps です.どのような設定を書かれたか,お教えいただけませんでしょうか. -- kuroky
- <</NeverEmbed [/Ryumin-Light /GothicBBB-Medium /HeiseiMin-W3 /HeiseiKakuGo-W5 /MS-Gothic /MS-Mincho /MSung-Light /MingLiU /MSung-Medium /MHei-Medium /MKai-Medium /Arial-Unicode-MS /STSong-Light /SimSun /STFangsong-Light /STHeiti-Regular /SimHei /STKaiti-Regular /Ryumin-Medium /MS-PMincho /MS-PGothic /HYSMyeongJo-Medium /Batang /HYRGoThic-Medium /Gulim /HYGoThic-Medium /Dotum]>> setdistillerparams のように、 cidfmap に記述したものの "左辺と右辺を両方" 指定すると埋め込まれませんでした。 簡単な自作 ps でのテストです。 -- kakuto
- ありがとうございます.cidfmap に <</NeverEmbed ... を記述すると,エラーを吐いてしまいました.試行錯誤の結果,neverembed.ps の書き方が間違えていたことに気づきました.1--4 のできて欲しいことリストは全部できるようです.ただ,otftest.ps の [rubyg/bx] の上の文字が,箱から上に飛び出してしまっています.otftest-8187.pdf -- kuroky
- cidfmap に <</NeverEmbed ... を記述したように受けとられたとしたら、すみませんでした。
cidfmap は記述してあるフォント名を参照するために引用したのであって、 <</NeverEmbed ... は、kuroky さんと同じように、別ファイル neverembed.ps に記述して、それを ps2pdfwr から実行するようにしました。 -- kakuto
- "左辺と右辺を両方" の意味がわからず,悩んでいたのですが,2007-08-18 (土) 12:02:44 のコメントで,理解しました.
- cidfmap で alias を書いたなら,alias 行の "左辺と右辺" にある PS フォント名 "両方" を,NeverEmbed リストに書き加えなさい,ということですね.ありがとうございます. -- kuroky
- コメントを加工したいときは,編集 (上か下かのバナーにある) というボタンを押して直すようです.途中送信してしまったようでしたので,つなげさせていただきました.-- kuroky
- 「環境比較」のところで、「Unicode や Adobe-Japan1 のエンコードの非埋め込み制御ができる」のチェックが見られるとありがたいです。 -- ttk
- UTF/OTF が入っているとも限らない環境でこのテストをどうやったら実現できるのか、うまい方法を思い付きませんでした。現実問題としてはわざわざ調べるまでもなく、H, V の制御の可否と等価でしょう。 -- 土村
- dvipsの処理後のファイルを用意すれば、UTF/OTFパッケージが入っていなくてもテスト出来るような気もします。4は、dvips処理後のpsファイルに フォント名-{UniJIS-UTF16,Identity}-{H,V}が入っていて、それがOpenTypeフォントでも適切に埋め込み・非埋め込みできるかどうか、ということで、単純に「H,Vが処理できる」というのとは違うような気がします。7.07はOpenTypeフォントが使えなかったはず。以上、あいまいな知識で適当に言っているので嘘かもしれません。-- ttk
- OpenType と TrueType の違いは、私は問題にしていないことにご留意下さい。
埋め込み制御も、「非埋め込み」にできるかどうかを問題にしていて、埋め込まれた場合にビットマップになっているか、ベクトルになっているか(さらにそれが OpenType か TrueType か)は区別していません。
そう思えば、4.のようなマイナーな問題を陽に書いた私が悪かったです。消しておきます。
最新の Ghostscript に CJK 対応がなかなか入らない現在、注目すべきは 2.の縦書き対応でしょう。 -- 土村
- 「非埋め込み」を重視しているという点、理解しました。余計なことを言って面倒をおかけしてしまったようで済みませんでした。 -- ttk
- 以前の動作報告を見ていると、4.に限って失敗している例もあるようですね。3.のサポートと等価という認識はまずかったかもしれません。gs 7の時代ならちゃんと調べる気になっていたと思います。 -- 土村
- 「UTF-8対応(6) に上がっている \UTF{}+縦/横書き の例」と「PSTricks のドットの例」を,"gnu gs7.07 + gs-cjk patches" および "gpl gs-8.61 (に向けた開発版の) r8189" で処理した結果を貼り付けておきました (gstest.gs707cjk.pdf, gstest.gs861r8189.pdf).gs8.xx 系のほうが PSTricks のドットがきれいです.pdf にすると縦書き文字の位置がおかしいですが,x11 に出力した結果は正常です.
-- kuroky /