[issue:99] dvipdfmx での /Rotate サポート
山下です。 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