[issue:99] dvipdfmx での /Rotate サポート

Hironobu Yamashita h.y.acetaminophen @ gmail.com
2017年 6月 25日 (日) 21:57:40 JST


山下です。

2015 年ごろに一度 tex-live や xetex list で話題になったことですが,
現在の (x)dvipdfmx は PDF の /Rotate をサポートしていません。
http://tug.org/pipermail/xetex/2015-November/026197.html
http://tug.org/pipermail/xetex/2015-November/026207.html

たとえば適当な fig.pdf を用意して
$ pdftk fig.pdf cat 1east output fig-rot.pdf
で右90度回転したとします。すると,PDF のページ情報に
/Rotate 90
が追加されます。世の中にあるメジャーな PDF ビューアはこの情報を解釈し,
右に90度回転した状態で表示します。
ところが,dvipdfmx は /Rotate をサポートしていないので,latex + dvipdfmx
で \includegaphics{fig-rot.pdf} すると
・extractbb 実行時
・DVI → PDF 変換中の PDF 取り込み時
の2回,
dvipdfmx:warning: << /Rotate 90 >> found. (Not supported yet)
なる警告が出て,「回転したつもりなのに,回転していないままの
PDF」が取り込まれます。xelatex でも同様。

一方,pdflatex や lualatex は /Rotate をサポートしているので,回転した
状態で取り込まれます。

警告が出ているということは,それは「本来意図した仕様」ではないはず
なので,/Rotate をサポートしたいと思っています。

以下の仕様を提案します。

=====
1. extractbb を実行すると
%%Rotate: 90
のように,必ず「Rotate 情報」を出力するように改修。
2. dvipdfmx.def の側で,extracrbb の返り値に「Rotate 情報」が含まれて
いて,かつゼロでなければ,\special 命令の中に
userotate 1
という文言を書き加える。もし「Rotate 情報」が含まれなければ,
それは古い extractbb (dvipdfmx) であるとみなし,userotate は書かない。
3. さらに, dvipdfmx.def を改修し,「TeX に確保してほしい箱の大きさ」を
「%%BoundingBox と %%Rotate の値から算出される値」
に修正する。
4. dvipdfmx は,DVI ファイルの当該画像の \special に
userotate 1
を見つけると,「PDF にある /Rotate」を再度読み取って,回転した
画像を取り込む。
=====

これなら,「昔の環境で作った DVI を新しい dvipdfmx で PDF 化」
といった場合にもおかしなことにはならず,問題ないと思います。

なお,上には XeTeX の方が考慮されていませんが,
「dvipdfmx モード」と「xdvipdfmx モード」
で分岐すれば,さしあたり xetex.web 側の改修を待たずとも
dvipdfmx と dvipdfmx.def だけで変更を加えても安全と考えています。


ご意見等よろしくお願いします。

Hironobu Yamashita


issue メーリングリストの案内