clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Ogawa A. の投稿
返信数: 24

過去ログを検索したものの、同様の現象(に対する解決策)を見つけられなかったため、質問させていただきます。ご助言いただければ幸いです。

[症状]

\documentclass[a4paper,11pt]{jarticle}
\setlength{\textwidth}{160mm}
\setlength{\textheight}{240mm}
\setlength{\topmargin}{-15mm}
\setlength{\oddsidemargin}{0mm}
\setlength{\evensidemargin}{0mm}
\usepackage[dvipdfmx]{graphicx}

\title{}
\author{}
\date{}

\pagestyle{plain}

\begin{document}

\includegraphics[bb=55 775 440 590, clip]{13W233PS7re.eps}

\end{document}
というソースとepsファイル(13W233PS7re.eps)を用意してdviを作成し、dvipdfmxによってpdfファイルを作成すると;

・Version 3.1415926-p3.1.11 (sjis) (Web2C 2009)->画像が表示される(test09bb.pdf)[dvipdfmxのバージョンは20090919]

・Version 3.14159265-p3.4-130605-2.6 (sjis) (TeX Live 2013/W32TeX)->画像が表示されない(test13bb.pdf)[dvipdfmxのバージョンは20130624]

と異なる挙動を示します。includegraphicsの行の[bb=55 775 440 590, clip]を削除すると(つまりclipせずに単に画像を貼ることにすると)、どちらの環境でも同様の(2ページ目に画像の表示された)pdfファイルが得られます。

[疑問点]

・後者の環境においてのみ、しかもclipコマンドを使用したときに限ってpdfに画像が表示されないのは、どのような問題(and/orこちらの錯誤)に起因しているのでしょうか。

・後者の環境において、clipコマンドを使用しつつ画像をpdfファイルに表示させるには、どのように対処すればよいのでしょうか。

[備考]

・どちらの環境も、「TeXインストーラ3」を利用してインストールを行ってから、特段のカスタマイズは(少なくとも意識的には)行っていません。環境の相違は、インストールしたタイミングの相違です。(前者は具体的日程は不明ながらかなり前、後者は2014.02.18にインストール)

・TeXソースとepsファイルは同一フォルダにあります。

・Ghostscriptのバージョンは前者が8.70、後者が9.10です。いずれもパスは通っています。

・dvipdfmxの処理中にエラーは出ていません。

・Ghostview (5.0)でepsファイルを見る限り、bbの値が負になったりはしていないようです。

*複数ファイルの添付の仕方がわからなかったため、zipで3ファイルを圧縮して添付しています。

よろしくお願いいたします。

Ogawa A. への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
Linux環境ですが、現象は再現しました。

(対処法1)
とりあえず ps2pdf で図をpdfに変換すれば、正常に表示されます。

(対処法2)
図のepsがマルチページの構造を持っており、先頭のBoundingBox が (atend)
となっています。いったん 13W233PS7re.ps とリネームして ps2eps で変換すると
先頭のBoundingBox が記され、正常化します。ただし「bb=55 775 440 590」
だと「右上」の方が「左下」より下になってしまい、やはり描画範囲がおかしい。
「bb=55 590 440 775」なら正常に表示されます。

なお ps2eps による変換をしたあとは、画像ファイルが
%%BoundingBox: 56 594 437 772
となるので、そもそもbbを指定する必要が無くなります。
tat tsan への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Ogawa A. の投稿

早速のご教示ありがとうございます。Strawberry perlを導入して(Perlが入っていない状況ではps2epsが動作しなかったため)試してみました。

1.ps2epsの動作によって作成されたファイルでは、BoundingBoxはps2epsで(atend)から56 594 437 772に変わったことを確認しました。

2.しかし、1で作成されたファイルを使用した場合には、[bb = 55 590 440 775, clip]をすべて削除しても(また、[clip]だけ残してbb関連部分のみを削除しても)pdfファイルには画像が入りませんでした。

----

ご指摘の趣旨を踏まえて、epsファイル側のbbについては、(epsファイルをエディタで開いた上で)一括で55 590 440 775に書き換えたものも試してみたのですが、test13bb.pdfが作成された方の環境では、できあがるpdfは;

・画像が全く表示されない(はじめに示したTeXソースの場合)

・画像の表示位置が変(includegraphicsの上側に適当それなりの分量の文章を補うと、「全く表示されない」ということがなくなる代わり、図の下半分のみがページの上端に表示される[上半分は見切れている])

のいずれかが発生してしまいました。なお、test09bb.pdfの環境の方では、問題はありません。

----

一方、もう1つご教示いただいたps2pdfの方については、

\includegraphics[bb = 55 590 440 775, clip]{13W233PS7re.pdf}
で、pdfファイルの意図に沿った位置に図が入ることを確認しました。

とりあえずはこちらで対処したいと思います。ご助言に感謝いたします。ありがとうございました。

原因がわからないのは少々気持ち悪いので、もしお心当たりの点がございましたら、ご教示いただければ幸いです。

Ogawa A. への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
>2.しかし、1で作成されたファイルを使用した場合には、
> [bb = 55 590 440 775, clip]をすべて削除しても
> (また、[clip]だけ残してbb関連部分のみを削除しても)
> pdfファイルには画像が入りませんでした。

こちらではうまく行っているようです。
ただし,clip の場合は,BoundingBox が厳密すぎて,
右端の線が消えています。(添付ファイル epstest.zip 参照)
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Ogawa A. の投稿

テストありがとうございます。

お知らせいただいた内容、および添付ファイルから、手元の環境が何かしらおかしいことがはっきりした(と思われた*)ため、w32TeXのインストールをやり直してみました。

(*)添付していただいたファイルをそのまま処理しても図の貼り込みがうまくなかったため。

結果的に、再インストール後は

1.ps2epsを使ってepsファイルを訂正

2.clipを使わずにincludegraphicsコマンドで貼り付け

によって、所望の結果を得ることができました。(ただし、「具体的に環境のうちどこがおかしかったか」は確認できていません。ばっさり消して入れ直しましたので)

先生方のご助言、ご協力に御礼申し上げます。ありがとうございました。大変助かりました。

Ogawa A. への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
BoundingBox: (atend) 自体は間違った指定というわけではなく、
「At End」つまり「情報は下部に記載」という指示です。
その下部に記されている BoundingBoxは
%%BoundingBox: 14 14 581 827
となっています。

さて \includegraphics で bb =14 50 581 827 のように「下を少し削る」
ことをしてみたら、実際に起きたのは「図が少し上に上昇する」でした。
ですので、bb = 55 590 440 775 のように大幅に下部を削ってしまうと、
図が大幅に上昇する結果となってしまうようです。

以前の動作だと「下が削られる」だったと思います。最近のdvipdfmxの
バージョンアップに伴なうバグですね。相手のファイルがPDFだと
こうはなりません。

2013からのdvipdfmx の変更と言えば Dオプションの変更 (-dEPSCrop)
がありますが、これを2012の -sPAPERSIZE=a0 に戻しても同じ不具合が
発生します。
tat tsan への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
> 最近のdvipdfmxのバージョンアップに伴なうバグですね。
> 相手のファイルがPDFだとこうはなりません。

バグではなくて,13W233PS7re.eps が実際には eps で無いのが原因です。

> BoundingBox: (atend) 自体は間違った指定というわけではなく、
> 「At End」つまり「情報は下部に記載」という指示です。
> その下部に記されている BoundingBoxは
> %%BoundingBox: 14 14 581 827
> となっています。

これは実際には,上部に記述してある A4 の PageBoundingBox です。

ps2eps, あるいは Ghostscript 付属の ps2epsi で変換したものは問題が
ありません。以前は,大きい用紙(A0)に仮想的に描画し,その一部を抜き
出していたのでよい加減な eps でも一見うまくいっていたのだと思います。
ただし,負の BoundingBox はだめでした。

> 2013からのdvipdfmx の変更と言えば Dオプションの変更 (-dEPSCrop)
> がありますが、これを2012の -sPAPERSIZE=a0 に戻しても同じ不具合が
> 発生します。

これを戻したら,dvipdfmx.def も戻さないと当然おかしな結果になります。
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
失礼しました。どちら側が取り除かれるかという
問題点てすね。これはバグかもしれません。
わかれば調べてみます。
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Z. R. の投稿

奇妙だと思う例です。

元々の BoundingBox が 100 100 200 200 である EPS 画像 img-posi.eps があったとします。

\documentclass[a4paper]{article}
\usepackage[dvipdfmx]{graphicx}
\begin{document}

\includegraphics[bb=90 90 160 160]{img-posi.eps}

\includegraphics[bb=140 140 210 210]{img-posi.eps}

\end{document}

これを latex でコンパイルしてできる DVI をダンプしてみると、2 つの \includegraphics に由来する PSFile special が全く同じものになってしまっています。

PSfile="img-posi.eps" urx=69.73831 ury=69.73831 rwi=700 

このような場合、論理的には bb よりも viewport の方が適切なのかも知れませんが、viewport でも同じ結果になります。

Z. R. への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
新しい dvipdfmx.cfg, dvipdfmx.def では,内部で llx = lly = 0 となるように
"正規化"しています。従って,eps ファイル自身における
%%BoundingBox を変更すると,期待した通りに切りとったりできますが,
graphics package におけるコマンド
bb=llx lly urx ury は, urx - llx と ury - lly のみが意味を持ちます。
よってこのコマンドで左部分,下部分を切りとることはできません。
切り取られるのは,右部,上部に限られます。こればバグと言ってもよい
かもしれませんが,仕様です。
例えば,
\includegraphics[bb=56 594 437 772]{test.eps}

\includegraphics[bb=156 694 537 872]{test.eps}
とか
\includegraphics[bb=1156 1694 1537 1872]{test.eps}
と全く同じ意味になります。
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
bb だけでなく trim によるトリミングも出来ませんね。
epsで左や下を切り取るにはどうしたらよいでしょう。

(個人的には、画像ファイルは全部PDFに変換していますが)
tat tsan への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
とりあえず trim (または viewport) を使えるようにするなら

\def\Ginclude@eps#1{%
\message{<#1>}%
\bgroup
\def\@tempa{!}%
\dimen@\Gin@urx\p@
\advance\dimen@ -\Gin@llx\p@
\advance\dimen@ \Gin@vllx\p@%%追加
\Gin@defaultbp\Gin@urx\dimen@
\dimen@\Gin@ury\p@
\advance\dimen@ -\Gin@lly\p@
\advance\dimen@ \Gin@vlly\p@%%追加
\Gin@defaultbp\Gin@ury\dimen@
\dimen@\Gin@req@width
\dimen@ii.1bp%
\divide\dimen@\dimen@ii
\@tempdima\Gin@req@height
\divide\@tempdima\dimen@ii
\special{PSfile="#1"\space
llx=\Gin@vllx\space%%追加
lly=\Gin@vlly\space%%追加
urx=\Gin@urx\space
ury=\Gin@ury\space
\ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\space\fi
\ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\space\fi
\ifGin@clip clip\fi}%
\egroup}

でしょうか。graphicx でなく graphics で使用すると
\Gin@vllx や \Gin@vlly を知らないと言われるので
処置が必要ですが。

あと回転との組合せがどうなるかも調べていません。
tat tsan への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
ありがとうございます。 これでよいと思います。
refinement は任せることにして Karl さんに
知らせておきたいと思います。
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
ご確認ありがとうございました。

調子に乗って bbオプションについてもパッチを作りました。
「たとえ bb が指定されていてもファイルのbbを読み、
指定bbとの差分を考慮する」というものです。

もっともこのパッチは

(1) dvipdfmx.def だけでは済まず graphics.sty 内の
\Gin@setfile も変更する必要がある。

(2) bb の指定については bbオプション以外にも
read や extオプションの影響もあるので、検証を
要する項目が多い。

という不十分なものです。特に(1)は他への影響が大きいので
このままでは使えないと思います。

なお bb と trim の両方を混在させた場合や、それに回転を加えた
ものについては、pdfの場合と同じ動作になることを確認しました。
tat tsan への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
pdflatex の場合は,

Package pdftex.def Warning: Option `bb' does not make sense,
(pdftex.def) using `viewport' instead on input line 4.

となり,viewport と仮定されるので,当然結果もおかしくなります。
元来 bb を持つのが eps ですから,"bb は指定しないように" という
ことで良いように思うのですが,どうでしょうか?
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
パッチは「旧バージョンとの互換性」「dvipsドライバとの互換性」を
念頭に作成しました。しかし過去との互換性にこだわってメンテナンス
性を下げるのも本意ではありません。

どれくらいの需要があるのか、その需要は満たすべきなのか、私には
判断がつきません。色々な御意見をお聴きしたい所です。

パッチ自体は品質の低いものですので、公式配布にマージするよりは、
追加パッケージにして、興味のある方にのみ使って頂くのが良いかも
知れません。
tat tsan への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Z. R. の投稿

動作確認をまだ全くしてないのですが。

たとえ bb が指定されていてもファイルのbbを読み、

この仕様だと

EPS 以外の画像で、xbb を作成せずに bb オプションを使用している場合、「xbb がない」というエラーになる(または自動作成される)

ということにならないでしょうか。

(今回変更されたのは EPS→PDF の変換の際の Ghostscript のみであって、dvipdfmx 自体の動作は何も変わってないので、EPS 以外は本来は影響を受けない。)

Z. R. への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
ご指摘ありがとうございます。

想定しているのはEPSだけなんですが、今の \Gin@setfile
の変更だと全画像種を巻き込んでしまいますね。EPS限定
に書き換えたいと思います。
tat tsan への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Z. R. の投稿

気付いたので書いておきます。

\Gin@defaultbp\Gin@urx\dimen@ (l.8)
\Gin@defaultbp\Gin@ury\dimen@ (l.12)
(これらの行は元の dvipdfmx.def にもあります)

これらはそれぞれ

\edef\Gin@urx{\strip@pt\dimen@}%
\edef\Gin@ury{\strip@pt\dimen@}%

でないとおかしいはずです。ここは単なる実数演算をしているだけで、単位換算は不要だからです。(ここで扱っている数値はすべて bp 単位の値。)

Z. R. への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
確かに。
もとのやつは bp ---> pt 変換して dvi に
書き込んでいました。
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
正確には,bp である数値 urx などを,pt であると見なして,
更に bp に変換している,と言わなければいけなかったと思います。
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Akira Kakuto の投稿
Karl さんが,3月5日ごろまで留守なので,お待ちください。
Akira Kakuto への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- Z. R. の投稿

現状の最新版の dvipdfmx.def [2014/03/31 v3.5] について「行末改行による空白が漏れ出す」という不具合が起こるようです。

参照:某ブログの記事

Z. R. への返信

Re: clipコマンド使用時のepsファイルの表示について(dvipdfmx使用)

- tat tsan の投稿
あっ、本当ですね。前後のコードを信用して丸写ししていました。

この件と「eps以外を巻き込まない」修正をしたbb対応パッチを
一応添付しておきます。あんまり需要は無さそうですけど…