再び「/Rotate な PDF を pdf:epdf する件」に関する話。
先の記事で述べた通り、現状の dvipdfmx は /Rotate 指定をもつ PDF 画像を(pdf:epdf 命令で)挿入すると、(「/Rotate は未対応です」という警告メッセージが出て)/Rotate 指定が無視される、という動作をする。先の記事では、この動作が“仕様”であるかが議論されていた。
これは DVI ウェアのレベルの話であったが、同じ議論は LaTeX のレベルでも起こりうる。つまり、現状の graphics パッケージ*1 + dvipdfmx ドライバ☃では /Rotate 指定が無視されるが、これは“仕様”であるか、という話である。仕様であるなら、従来の動作との互換性を考慮する必要が出てくる。
一見、同じ話のようにも見えるが、重大な違いがある。それは「graphics パッケージの仕様はドライバ☃と独立に決まっている」ということである。だから、ドライバ☃の能力不足が原因でパッケージで決められた仕様が満たせない場合、それは単に「マチガッテル動作」(普通は「制限事項」等と呼ばれる)であって、決してその動作を勝手に「仕様」と呼ぶことはできないわけである。
それでは、/Rotate 付の PDF 画像を挿入する場合の「graphics パッケージの仕様」はどうなっているか。容易に予想されるように、この事項に関して特に何も決められていない。といっても \includegraphics
命令の目的が「画像を挿入する」ことであるのは確かだから、“常識的に考え”て「対象の画像を挿入した」ことになる必要があるのは確かである。逆に“常識的に考え”て一意に決まらない要素についてはドライバ☃ごとに異なる“仕様”をもつ余地がある――例えば ナントカBox の選択がそうである。「/Rotate の指定を適用するか」もそういう類のものだろうか。この答えは「そもそも /Rotate とは何なのか」に依存するだろう。
- ① /Rotate をもつ画像は回転した後のものが本来の姿である――そうであれば当然、回転した後のものを挿入するのでないと正しくない。
- ② /Rotate は補助的な情報(「その画像に対する最適な表示方法」的な何か)であり、用途に応じて適宜用いるものである――そうであれば回転せずに挿入するという選択肢もありうる。
PDF の仕様書で、/Rotate の説明を見ると、以下のようである。
(Optional; inheritable) The number of degrees by which the page should be rotated clockwise when displayed or printed. The value must be a multiple of 90. Default value: 0.PDF Reference, Fifth edition
Section 3.6 Document Structure
これを見ると、“when displayed or printed”(表示または印刷された場合)という条件が付いている(つまり②が意図されている)ようにも見える。そして、「他の文書に挿入された場合」が「表示または印刷」に該当するかは微妙である。
ところが仕様書の別の場所には次のような記述がある。
The user space coordinate system is initialized to a default state for each page of a document. …(略)… The positive x axis extends horizontally to the right and the positive y axis vertically upward, as in standard mathematical practice (subject to alteration by the Rotate entry in the page dictionary).同書,Section 4.2 Coordinate Systems
これは PDF のユーザ空間の座標系の説明の中にある段落であるので、ここの内容は「一般的に成り立つ」と考えていいだろう。ところがそこで「ページの /Rotate エントリは座標軸の向きを変える」と説明されているのである。これを見ると、①が想定されていると見なす方が妥当だと、自分には感じられる。少なくとも、その画像を挿入した場合は、(ユーザ座標系の中で完結した操作でなく)“外の世界”との位置関係が問題になるので、この段落の記述が適用されてその内容は回転されるべきであろう。
そういうわけで、自分の結論としては、graphics パッケージで /Rotate 付の PDF 画像を挿入した場合は、/Rotate に基づく回転は必ず適用されるべき、ということになる。
*1:または graphicx パッケージ、以下同様。