TeX Forum のトピックの方に書いた話であるが、そちらの方は私の認識の混乱のため嘘が混じっているので、改めてここに纏めておく。
先にまとめておくと
- mediabb パッケージは(dvipdfmx の前身である)dvipdfm、あるいは、かなり昔(7 年以上前)の dvipdfmx での利用を前提としている。
- 従って、(新しい)dvipdfmx と一緒に使うことは全く考慮されていない。すなわち、その場合の動作は「未定義」だと思うべきである。
- 実際には、mediabb の一部の機能は一応動作するが、残りの機能については不正な、直感に反する動作が起こる。
以上より、dvipdfmx を用いている状況では原則として mediabb パッケージは読み込んではいけない。(例外については後述。)
以下では詳細について述べる。
mediabb パッケージは“dvipdfm”専用
最近の TeX 環境を前提とする場合、(u)pLaTeX を用いて PDF 文書を作成する際には dvipdfmx を用いるのが標準的になっている。このブログで何度か触れているように、dvipdfmx は元々欧文 TeX 用であった“dvipdfm”(x がない)というソフトウェアを pTeX 系に対応するように拡張したものである。*1(なお、いつか改めて説明したいが、最近の TeX Live ではもはや dvipdfm は使えない。)
ところが、mediabb パッケージがサポートしているのは、dvipdfmx ではなく元々の“dvipdfm”の方である。ただし、厳密に言うと、かなり昔(2007 年 5 月以前)の dvipdfmx は dvipdfm と互換性があり、この「昔の dvipdfmx」もサポート対象に含まれている。これは、mediabb の配布元のサイトの記述を見れば判る。
graphics/graphicxパッケージのdvipdfmドライバではpdf画像のサイズを外部のbbファイルから取得しなくてはならない。そこで、pdfの画像サイズの読み込みをpdftex.defのように/MediaBoxを使うようにしたmediabb.styを作った。
\usepackage[dvipdfm]{graphicx} \usepackage{mediabb}のように使うと、.bbファイルを用意する必要がなくなる。なるべくdvipdfmxの動作と同じになるよう……(以下略)
このように、“dvipdfmx”とは書いてあるものの、graphicx で「dvipdfmドライバ」を指定することが前提となっているので、これは「昔の dvipdfmx」(dvipdfm と互換だったため当然ドライバも dvipdfm 用のものがそのまま用いられていた)のことであることは明らかである。*2
2 つの機能
mediabb パッケージは次の 2 つの機能を提供している。
- ① PDF ファイルについて、その中身を(可能であれば)自分で解析することで、バウンディングボックスの値を検出する。(だから .(x)bb ファイルが不要になる。)
- ただし、以前の記事で述べたように、これが上手くいくのは、「PDF のバージョンが 1.4 以下である」か「オブジェクトストリームの内容が非圧縮の場合」に限られる。最近のソフトウェアで“普通に”生成した PDF ファイルでは「上手くいかない方が多い」と考えた方がいいだろう。
- ② ビットマップ画像ファイルについて、シェル実行機能を利用して、ebb を自動で起動して .bb ファイルを作成する。
- シェル実行機能は(セキュリティの理由で)通常は無効になっているので、この機能を利用するためには、pLaTeX のコマンド実行時に
-shell-escape
オプションを指定して有効かする必要がある。 - さらに、UNIX 系のコマンドを使っているため、これが利用できるシェル環境が前提となる。(普通の Windows では利用不可。)
- 「ebb」「.bb ファイル」というのは、dvipdfmx における「extractbb」「.xbb ファイル」に相当するものである。以前の記事で説明したように、dvipdfm(または「昔の dvipdfmx」)と今の dvipdfmx では解像度の扱いが異なるため、処理が別になっている。
- (今の)dvipdfmx の場合、シェル実行機能を利用した extractbb の自動起動(およびそれによる .xbb ファイルの作成)は graphicx パッケージの標準でサポートされているので、この機能は不必要である。
- というより、dvipdfmx を使っている場合は、.xbb ファイルが利用されるるので、.bb ファイルを作成しても無視される。つまり、この機能はそもそも何の役にも立たない。
- シェル実行機能は(セキュリティの理由で)通常は無効になっているので、この機能を利用するためには、pLaTeX のコマンド実行時に
ネット上に存在する割と最近の記事を見る限りでは、(今の)dvipdfmx と mediabb パッケージを併用している人は確かに存在して、そういう人は①の機能を目的としているようである(②はそもそも機能しないのだから当然)。
mediabb が要らない話
ただし、「画像ファイルのバウンディングボックスの情報をどう取得するか」については、現状では、PDFとビットマップの両方について、「extractbb を自動起動」させるアプローチが標準的になっていることに注意してほしい。前述のとおり、外部プログラムの起動の機能は普通は無効化されているのだが、W32TeX では extractbb の起動については「特別に許可」に許可されている。TeX Live については現在(2014 年版)についてはそうなっていないが、最近のインストールの指南においては、extractbb を「特別許可」のリストに含めることが指示されることが多いようだ。なので、単純に「extractbb を手動で起動するのが面倒」という理由で mediabb を利用するのは一般的ではないだろう。
さらに言うと、最近のドライバの実装(dvipdfmx.def の v4.02 以降)においてはこの extractbb の自動起動の挙動が改良されていて*3、次のような利点が得られる。
- 中間ファイルの生成が抑制される。(つまり「邪魔な .xbb ファイルが作られない」。)
- extractbb のファイル書込の挙動を制限することができる。(現在の extractbb では既に制限が実装されている。)これにより、extractbb を安全なプログラムと見做すことが可能になり、次期の TeX Live では「特別許可」のリストに extractbb が含められる模様。
すなわち、そもそも「(今となっては)特殊な PDF ファイルしか扱えない」mediabb を使う必要性は失われつつある、といっていいであろう。