マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

/Rotate な画像は「回転した画像」か

再び「/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 パッケージ、以下同様。