dvipdfmx が /Rotate
指定付きの PDF 画像の挿入に対応させる場合、仕様はどうすべきか、という話。
- アレな dvipdfmx.def
ドライバ☃の改修実装の試案。
注意事項。
- dvipdfmx において PDF 画像の挿入を行う special 命令が
pdf:epdf
命令。 - 従来の dvipdfmx では、
pdf:epdf
が挿入する PDF 画像がゼロでない/Rotate
の値を持っていた場合は「/Rotate
は未対応(Not supported yet)」という警告メッセージが出て、/Rotate 指定が無視される(回転しない)。 - 以下の例で、snowman,pdf は「
/Rotate 270
」の指定を持っていると仮定する。 - dvipdfmx(
pdf:epdf
命令)の仕様だけでなく、extractbb や\includegraphics
の仕様についても考える必要がある。
今のところの案。
- 「
/Rotate
の設定を無視する」という動作を“仕様”であると認定する。この場合、従来通りの指定の動作は変えてはいけない。pdf:epdf (snowman.df) →回転なし
- ①
pdf:epdf
命令に回転角度を示すrotate
パラメタを新設する。PDF自体がもつ/Rotate
の値は見ない。pdf:epdf rotate 270 (snowman.pdf) →270度回転 pdf:epdf rotate 180 (snowman.pdf) →180度回転
- ②
pdf:epdf
命令に回転角度を示すrotate
パラメタを新設する。ただし PDF 自体がもつ/Rotate
の値以外が指定された場合はエラーとする。pdf:epdf rotate 270 (snowman.pdf) →270度回転 pdf:epdf rotate 180 (snowman.pdf) →エラー
- ③
pdf:epdf
命令に「回転を適用するか」を示すuserotate
パラメタを新設する。この値が 1 の時は PDF の/Rotate
の値に従って回転する。0 の時は回転しない。pdf:epdf userotate 1 (snowman.pdf) →270度回転 pdf:epdf userotate 0 (snowman.pdf) →回転なし
- ④
pdf:epdf
命令の「回転を適用する」変種としてpdf:epdf☃
命令(名前は仮)を新設する。この新しい命令は PDF の/Rotate
の値に従って回転する。pdf:epdf☃ userotate 1 (snowman.pdf) →270度回転
/Rotate
指定付の PDF については「回転させる」方の命令記述を使う。/Rotate
がない(またはゼロ)の場合は「回転させる」方でも従来の方でも構わない。 - ①
- 「
/Rotate
の設定を無視する」という動作を“仕様”とは認定しない。本来は回転すべきであったが未対応のため不正な結果になったと見なす。この場合、従来通りの指定は「本来は回転すべき」なので、/Rotate の値に従って回転させる。pdf:epdf (snowman.df) →270度回転
ただこの方式には問題がある。/Rotate
付き PDF について従来の .xbb ファイルを用いて LaTeX コンパイルが行われた場合、回転なしとして扱って DVI にpdf:epdf
命令を作成する。これを新しい dvipdfmx で処理するとこの命令を回転ありと扱うため支離滅裂な出力になってしまう。ただし、この項においては、従来の動作(一見まともな出力だが回転が無視されている)も“不正な結果”と見なされていることに注意。- ⑤ 一見まともだろうが支離滅裂だろうが不正である点は変わらないので、何も対策しない。
- ⑥ 従来の .xbb と新しい .xbb が確実に区別がつくようにする。(例えば、ゼロであっても必ず
/Rotate
の値を出力に含める。)そして、新しいものでない場合は(支離滅裂な出力が予期されるので)エラーにする。 - ⑦ ⑥と同様だが、エラーでなく警告扱いにして結果自体は出力する。(従来の動作が「不正であるが警告扱い」だったのでそれに合わせる。)