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 に付属するものは、この対処がかなり不足しています (→環境比較)。 主に次の処理ができるかどうかがポイントです。

  1. 日中韓文字の表示ができる
  2. 日本語の縦書きができる (括弧などが回転され、拗音・句読点などが適切にシフトされる)
  3. 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)
およそのリリース日AFPLGPLgnuESP採用OS
およそのリリース日AFPLGPLgnuESP採用OS
2010-09-189.00
2010-02-118.71
2009-08-018.70openSUSE 11.3
2009-02-058.64Slackware-current, Vine Linux 5
2008-08-018.63Slackware-current
2008-03-018.62Fedora9
2007-11-218.61Debian (sid)*
2007-08-018.60
2007-05-118.57
2007-03-148.15.4Fedora7
2007-03-148.56
2006-09-288.15.3openSUSE 10.2, FC 6 (update), slackware?, Debian 4.0
2006-05-318.54
2006-05-298.51
2006-05-178.54
2006-04-258.15.2FC 5 (update), FC 6
2006-01-028.50
2005-10-248.53
2005-10-078.52
2005-09-228.15.1SUSE 10.1, FC 5
2005-04-188.51
2004-12-118.50
2004-09-228.15
2004-02-198.14
2004-02-028.01
2004-01-018.13
2003-12-088.12
2003-10-097.07.1SuSE 9.2, Plamo 4.2, Momonga 3
2003-08-178.11
2003-05-177.07Vine 3.0 〜 4.2, FreeBSD 6.1
2003-03-317.06
2003-02-107.05.6
2002-11-218.00
2002-09-067.05.5
2002-07-307.05.4
2002-07-027.05.3
2002-05-247.05.2
2002-04-237.05.1
2002-04-227.05
2002-01-317.04
2001-10-197.03
2001-04-077.00
  • OS ごとのソースパッケージは以下の通り。
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

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 のどのバージョンにどの機能のパッチが存在するのかまとめる

コメントをどうぞ

  • http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/47532.html のコメントを参考に,気長に待ってみたら,gs foo.ps で日本語表示できました!ps2pdf はエラーを吐いて止まり,うまく PDF を作ってはくれません (フォント設定とエラーメッセージはコメントにしてあります).(Vine Linux 3.2 上, 8.54 GPL, 素のままコンパイルしたかどうか忘れてしまった状態) -- kuroky 2007-03-28 (水) 20:38:28
  • 以下の情報のおかげで,gs (SVN PRE-RELEASE 8.61 rev.8187) の日本語表示に成功しました (Cygwin (X11) 上).ps2pdf も正常に動きました -- kuroky 2007-08-14 (火) 22:59:50 -- 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
  • 情報ありがとうございます。これで書き込みやすくなったでしょうか。 -- 土村 2007-08-15 (水) 23:04:46
  • kakuto さん,コメントありがとうございます (土村さん,下部への移動ありがとうございます).lib/neverembed.ps を作って,ps2pdfwr に -f neverembed.ps を書き加えるという方法を取ってみたのですが,フォント (msmincho や batang.ttc など) は埋め込まれたままになってしまいました.テストに使った PS ファイルは,ptetex の make test で作られる jsclasses.ps や otftest.ps です.どのような設定を書かれたか,お教えいただけませんでしょうか. -- kuroky 2007-08-16 (木) 22:17:20
  • <</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 2007-08-17 (金) 06:02:49
  • ありがとうございます.cidfmap に <</NeverEmbed ... を記述すると,エラーを吐いてしまいました.試行錯誤の結果,neverembed.ps の書き方が間違えていたことに気づきました.1--4 のできて欲しいことリストは全部できるようです.ただ,otftest.ps の [rubyg/bx] の上の文字が,箱から上に飛び出してしまっています.fileotftest-8187.pdf -- kuroky 2007-08-18 (土) 10:38:05
  • cidfmap に <</NeverEmbed ... を記述したように受けとられたとしたら、すみませんでした。 cidfmap は記述してあるフォント名を参照するために引用したのであって、 <</NeverEmbed ... は、kuroky さんと同じように、別ファイル neverembed.ps に記述して、それを ps2pdfwr から実行するようにしました。 -- kakuto 2007-08-18 (土) 12:02:44
  • "左辺と右辺を両方" の意味がわからず,悩んでいたのですが,2007-08-18 (土) 12:02:44 のコメントで,理解しました.
    • cidfmap で alias を書いたなら,alias 行の "左辺と右辺" にある PS フォント名 "両方" を,NeverEmbed リストに書き加えなさい,ということですね.ありがとうございます. -- kuroky 2007-08-18 (土) 12:33:27
    • コメントを加工したいときは,Edit編集 (上か下かのバナーにある) というボタンを押して直すようです.途中送信してしまったようでしたので,つなげさせていただきました.-- kuroky
  • 「環境比較」のところで、「Unicode や Adobe-Japan1 のエンコードの非埋め込み制御ができる」のチェックが見られるとありがたいです。 -- ttk 2007-11-28 (水) 21:39:04
  • UTF/OTF が入っているとも限らない環境でこのテストをどうやったら実現できるのか、うまい方法を思い付きませんでした。現実問題としてはわざわざ調べるまでもなく、H, V の制御の可否と等価でしょう。 -- 土村 2007-11-29 (木) 00:04:55
  • dvipsの処理後のファイルを用意すれば、UTF/OTFパッケージが入っていなくてもテスト出来るような気もします。4は、dvips処理後のpsファイルに フォント名-{UniJIS-UTF16,Identity}-{H,V}が入っていて、それがOpenTypeフォントでも適切に埋め込み・非埋め込みできるかどうか、ということで、単純に「H,Vが処理できる」というのとは違うような気がします。7.07はOpenTypeフォントが使えなかったはず。以上、あいまいな知識で適当に言っているので嘘かもしれません。-- ttk 2007-11-29 (木) 22:57:17
  • OpenType と TrueType の違いは、私は問題にしていないことにご留意下さい。 埋め込み制御も、「非埋め込み」にできるかどうかを問題にしていて、埋め込まれた場合にビットマップになっているか、ベクトルになっているか(さらにそれが OpenType か TrueType か)は区別していません。 そう思えば、4.のようなマイナーな問題を陽に書いた私が悪かったです。消しておきます。
    最新の Ghostscript に CJK 対応がなかなか入らない現在、注目すべきは 2.の縦書き対応でしょう。 -- 土村 2007-12-01 (土) 00:14:34
  • 「非埋め込み」を重視しているという点、理解しました。余計なことを言って面倒をおかけしてしまったようで済みませんでした。 -- ttk 2007-12-03 (月) 21:49:17
  • 以前の動作報告を見ていると、4.に限って失敗している例もあるようですね。3.のサポートと等価という認識はまずかったかもしれません。gs 7の時代ならちゃんと調べる気になっていたと思います。 -- 土村 2007-12-06 (木) 02:21:40
  • UTF-8対応(6) に上がっている \UTF{}+縦/横書き の例」と「PSTricks のドットの例」を,"gnu gs7.07 + gs-cjk patches" および "gpl gs-8.61 (に向けた開発版の) r8189" で処理した結果を貼り付けておきました (filegstest.gs707cjk.pdf, filegstest.gs861r8189.pdf).gs8.xx 系のほうが PSTricks のドットがきれいです.pdf にすると縦書き文字の位置がおかしいですが,x11 に出力した結果は正常です.
    gstest.gs861r8189.png
    -- kuroky 2008-01-02 (水) 23:22:54/2008-01-03 (木) 12:19:51


*1 adobe-cmaps-200406 のこと.ただし,Ghostscript 8.54 では,メインのソースに同梱されているため,別途取得する必要はありません.

添付ファイル: filegstest.gs861r8189.png 156件 [詳細] filegstest.gs861r8189.pdf 73件 [詳細] filegstest.gs707cjk.pdf 69件 [詳細] fileotftest-8187.pdf 93件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-09-24 (火) 23:59:26 (1396d)