epstopdfの修正に関する提案と検証のお願い

epstopdfの修正に関する提案と検証のお願い

- hak7a3 の投稿
返信数: 15
pdftexでepsの読み込みに失敗したので,epstopdf.plを読んでみたところ,次の二つの改善点が見つかったので提案します.
  1. 実行するghostscriptの設定
  2. MSYSへの対応
1. 実行するghostscriptの設定

オリジナルのepstopdfでは,オプション指定がない限り,使用するghostscriptのコマンド名を次の規則に基づいて決定します.
WindowsかつPerlがCygwin由来のものでなければ「gswin32c」.そうでなければ「gs」
W32TeXではこの「gswin32c」が「rungs」になっているのでCygwinを利用していなければrungsによってghostscriptが実行されます.そもそも,OSや環境に依らず,オプション指定がなければ「rungs」を実行してしまってよいと思うのですが,いかがでしょうか?

2. MSYSへの対応

過去のフォーラムでも議論されていますが,MSYSを使用している場合,epstopdf(およびrepstopdf)が失敗します.これは次の二つの原因があるように思われます.
  1. 「/」で始まる文字列がパスとして認識されてしまい,「/prepress」などが自動変換されてしまう
  2. epstopdfがWindows環境でないと誤認識するため,piped inputを使用してしまう(未検証)
1に関しては過去のフォーラムでも指摘されています.そのときの議論では,MSYSを使っている場合は自前でepstopdf.plを修正すればよいという結論になっていて,汎用的な解決策が示されていないように見えました.MSYSを使用してるか否かは,$^Oが"msys"かどうかで判定できるので,それを利用してエスケープするか否かを変更できます.この処理をディストリビューション側で入れてしまっていいと思うのですがどうでしょうか?

2はWindowsでPerlを使う際には必要だと思われる処理です.既存のepstopdf.plでも,Windows(Cygwin含む)の場合はpipeを利用しないように実装されていますが,MSYSではこの判定をすり抜けてしまうためpipeを使用してしまいます.未検証ですが,MSYSでもpipeを使用しないようにした方が安全に思います.

これらの修正を施したepstopdf.plを作成してみましたので,どなたか検証してもらえないでしょうか?
(手持ちのMSYS環境では簡単な動作確認をしています.)
hak7a3 への返信

Re: epstopdfの修正に関する提案と検証のお願い

- Z. R. の投稿

(1に関して)

epstopdf.pl については、W32TeX でも TeX Live でもそれぞれの環境に合わせて改変が行われているようです。既定の Ghostscript のコマンド名もそういう箇所の一つです。

で、大本の epstopdf について既定のコマンド名を rungs にできるかというと、以下の理由でそれは無理だと思います。

(確かに epstopdf を一次配布しているのは TUG ではあるが)epstopdf 自体は TeX にも “TeX システム” にも依存しないソフトウェアであり、TeX システム上の使用でない場合は rungs は存在しないはずだから。

(2に関して)

これについては、「MSYS 上で epstopdf が(正当に)実行される必要のある事例が果たして存在するか」が気になります。

Z. R. への返信

Re: epstopdfの修正に関する提案と検証のお願い

- KUROKI Yusuke の投稿
(1に関して)
Z. R. さんの指摘はその通りです.
ではどんなことを提案すると多くの場合幸せになるか,というと,TeX Liveに含まれる epstopdf に関してはrungs を使うように,TeX Live のメーリングリストに提案する,というのがよいと思います.dvipdfmx.cfg も Ghostscript のために rungs を呼び出しているので,素直に受け入れられると思います.
KUROKI Yusuke への返信

Re: epstopdfの修正に関する提案と検証のお願い

- hak7a3 の投稿
ありがとうございます.とりあえず,rungsの件はあとでメーリスに投げてみようと思います.(英語力が残念なので時間かかるかもしれません……)

MSYSサポートの方に関しては,そんなにMSYSユーザっていないのでしょうか?
hak7a3 への返信

Re: epstopdfの修正に関する提案と検証のお願い

- Akira Kakuto の投稿
添付されているものは,私が local に(つまり W32TeX 用に)
変更したものが元になっているようなので,CTAN 用の汎用の
もの (つまり TeX Live 用のもの)としては,添付したものの
ようになると思います。
つまり,TeX Live では restricted mode において,必ず
プレインストールされた 32ビット Ghostscript を使う約束に
なっています。Windows の場合です。
Akira Kakuto への返信

Re: epstopdfの修正に関する提案と検証のお願い

- KUROKI Yusuke の投稿
> TeX Live では restricted mode において,必ずプレインストールされた 32ビット Ghostscript を使う約束になっています。Windows の場合です。

そうなのですか!ご指摘ありがとうございます.それからすると,
(1について)
$GS = rungs
にするのではなく,
MSYS も Windows のシステムだという主張をして,
my $on_windows = $^O =~ /^MSWin/ || $^O eq "msys";
にして,変更箇所を少なくする方がよさそうではありませんか.

hak7a3 への返信

Re: epstopdfの修正に関する提案と検証のお願い

- KUROKI Yusuke の投稿
msys が何時先頭の / をプログラムディレクトリに変換してしまうかよく分かっていないのですが,「= の後ろだったら」といった条件がありますでしょうか?もしも「# の後ろだったら」区切りとは認識されない,ようなことがあれば,Windows の場合に = 区切りを # にするという手が使えそうです.

(a) Kakuto先生から教わった,Windows で restricted だったら gswin32c 決め打ち,
(b) MSYS 環境のときも pipe を渡したくない
ということを両方満たして変更箇所を最低限にしたスクリプトを書いてみました.これで試してみてはいただけませんでしょうか?>hak7a3さん
(W32TeX用の変更部分というのを落としているので,復元してもらわないといけないかもしれませんが.)
KUROKI Yusuke への返信

Re: epstopdfの修正に関する提案と検証のお願い

- hak7a3 の投稿
ありがとうございます.試してみます.ちなみに,MSYSが/を変換する理由は,MSYSから非MSYSへ橋渡しするときに正しくパスが渡るようにするためのようです.ここに変換条件が示されています.
hak7a3 への返信

Re: epstopdfの修正に関する提案と検証のお願い

- KUROKI Yusuke の投稿
Ghostscript は内部で # を = に同一しているようにドキュメンテーションされていますし,MSYS の変換条件を見るに,GS に渡すときのオプションの区切り記号を = から # に変更する改良は,/ をそのままにしてくれそうな気がしますね.

epstopdf.kuroky.pl では on_windows に MSYS の環境も明示的に含めるという変更を加えることを提案しているわけですが,強者の MSYS ユーザは,野良ビルドした Ghostscript を使っていないでしょうか? そういう人にとっては予期せぬ変更になるので,そこのところが気になります.

pipe input を許可しない判定から MSYS が漏れる(従来通り)を許容して(つまり,on_windows の条件を変更せずに),GS へのオプションの区切り記号をすべての arch で # にするという変更のほうが,より影響範囲が限定されるかもしれません.
KUROKI Yusuke への返信

Re: epstopdfの修正に関する提案と検証のお願い

- hak7a3 の投稿
私の手元にあるMSYS環境で試したところ,確かにオプションの区切り記号を#にすれば/の変換は起こらないようです.
KUROKI Yusuke への返信

Re: epstopdfの修正に関する提案と検証のお願い

- Akira Kakuto の投稿
KUROKI Yusuke さんのおかげで, version 2.23 から
msys perl に対応するようになりました。
Akira Kakuto への返信

Re: epstopdfの修正に関する提案と検証のお願い

- KUROKI Yusuke の投稿
更新情報をありがとうございます.
アップストリームに報告したときには,できるだけコードが短くなるように&アーキテクチャごとに設定が共通になるように,($on_windows? "#" : "=") ではなく,すべてのアーキテクチャで # になるように提案しました.Ghostscript のドキュメントの記述でも,とくにアーキテクチャに関わらず # で通るとのことだったので,このようにしたのですが,# では不都合だというシェルがあったら,ご報告いただければ幸いです.>皆様

>Kakuto先生,
Karl から tex-k に返信がないので,採用されたかどうか定かではないと思っていたのですが,
どこを確認したらわかりますでしょうか?
ソースコードは svn/texlive/trunk で管理されているものと思っているのですが.

KUROKI Yusuke への返信

Re: epstopdfの修正に関する提案と検証のお願い

- Akira Kakuto の投稿
> Karl から tex-k に返信がないので,
> 採用されたかどうか定かではないと思っていたのですが,
> どこを確認したらわかりますでしょうか?

http://www.tug.org/svn/texlive/trunk/Build/source/extra/epstopdf/epstopdf.pl
です。これを CTAN にアプロードしてから
http://www.tug.org/svn/texlive/trunk/Build/source/texk/texlive/linked_scripts/epstopdf/
にコピーし,これが cron job で
texmf-dist/scripts/epstopdf/
にコピーされるのではないかと思います。
返信も, CTAN にアプロードした後,必ずあるはずです。
しばらくお待ち下さい。
Akira Kakuto への返信

Re: epstopdfの修正に関する提案と検証のお願い

- KUROKI Yusuke の投稿
大本が texmf-dist/scripts/epstopdf/ かと勘違いしておりました.
(大本にしては,コミットメッセージが淡泊すぎるのが気にかかっていました.)

http://www.tug.org/svn/texlive/trunk/Build/source/extra/epstopdf/epstopdf.pl
がオリジナルだったのですね.確認しました.ありがとうございます.
# そしてKarlは正規表現で短くしようとさらに工夫を加えていると.さすがです.