*バウンディングボックス [#k5651e3e]

TeX におけるバウンディングボックスとは,TeX が組版する際に必要となる「画像のサイズ」を表す数値の組です。
元来は画像が実際に占める領域をちょうど囲む矩形ですが,画像データによっては,バウンディングボックスとして設定された領域からはみ出していることもしばしばあります。

----
#contents
----


**TeX の画像とりこみとバウンディングボックス [#zae8d627]

画像のとりこみは TeX 自身の機能ではなく,実際のとりこみは「ドライバ」がすべてを担います。
TeX が組版するうえで必要なのは「その画像を版面(紙面)に配置するためにどれくらいの幅と高さを確保するか」だけで,その際に必要となるのがバウンディングボックスです。

-参考:[[TeX と「TeX 以外」]],[[ドライバ依存>graphicx#driver-dependent]]

実際のとりこみをドライバが担っているため,バウンディングボックスの値もそのドライバに合致したものである必要があります。
逆にいえば,''使用するドライバが決まれば,TeX が利用すべきバウンディングボックスの値は一意に定まります''。
この唯一の「正解の値」以外が TeX に使われた場合,ドライバからの出力がどうなるかは''未定義''です。
「正解のバウンディングボックスの値」は,画像の形式によって以下のように扱われます。

***EPS ファイルにおけるバウンディングボックス [#bac9d80a]

EPS ファイルの冒頭には,バウンディングボックスを指定する行を持つことが仕様で定められています。
以下の値は,[[エラー報告用の標準データセット]]の tiger.eps から抜き出したものです:
 %%BoundingBox: 17 171 567 739
EPS ファイルによっては,より桁数の多い高精度なバウンディングボックスをあわせもつこともあります。
 %%HiResBoundingBox: 17.817252 171.021390 566.801823 738.921393

この値の組は,左下を原点とした座標系における,バウンディングボックスとして設定する矩形の左下頂点と右上頂点の各 x, y 座標を順に並べたものです(PostScript 言語には「座標系」の概念があることに注意)。
単位は bp(PostScript big point; 1bp = 1/72in)です。

TeX が EPS 画像を配置するときは,ファイルの中身を読んで冒頭の BoundingBox または HiResBoundingBox を見つけ,これを利用します。

これが「TeX で使う画像はとにかく EPS に」と昔はよく言われていた所以です。
現在では

-[[extractbb の自動実行>extractbb の自動実行許可の設定]]によってバウンディングボックスを取得する(dvipdfmx を使う場合)
-TeX エンジン自体が種々の画像のバウンディングボックスを自前で取得するライブラリを持っている([[pdfTeX]],[[LuaTeX]],[[XeTeX]] など)

といった仕組みが整ったこともあり,いちいち [[Ghostscript]] を呼び出して PDF に変換しなければとりこめない不便な EPS 形式の画像は好まれなくなりました(参考:[[古い情報]])。

***EPS ファイル以外の画像におけるバウンディングボックス [#cdc13012]

JPG や PNG,PDF といったファイルには BoundingBox や HiResBoundingBox といった記述がありませんので,なんらかの方法でバウンディングボックス情報を取得する必要があります。
そこで,pdfTeX / LuaTeX や XeTeX は TeX エンジン自体を拡張し,これらのバウンディングボックスを取得することができるようになっています。
しかし,日本でよく用いられている pTeX や upTeX はこうした拡張を経ていないいわば “素の TeX” で,画像のサイズを知る手段がありません。
そこで,TeX からの[[外部コマンドの実行]]の機構を利用して extractbb という「バウンディングボックスを抽出するプログラム」を実行し,バウンディングボックス情報を取得します。

TeX はバウンディングボックスの概念について PostScript を踏襲しているため,EPS 以外の画像形式でも単位は基本的に bp です。
JPG や PNG などのビットマップ画像には「ピクセル」(px) という概念がありますが,これとは必ずしも一致しませんので注意してください。


**dvipdfmx の場合のバウンディングボックス [#h2cbd128]

LaTeX + [[dvipdfmx]] の処理で [[graphicx]] パッケージを使う場合,EPS 形式以外の画像におけるバウンディングボックスの指定は

+ソースに bb オプションがあればそれを最優先に採用
+bb がなければ .xbb ファイルを探しに行って読む
+.xbb もなければ extractbbを実行

の順に優先されます(これは dvipdfmx.def の中で定義されています)。
extractbb というプログラムは実は dvipdfmx のシンボリックリンクで,dvipdfmx そのものです。
したがって,dvipdfmx を使う場合のバウンディングボックスの正解の値は「extractbb が返すもの」ということができます。
graphicx パッケージの dvipdfmx オプションは,TeX に続いて dvipdfmx を経由することが決まっている場合に自分自身である extractbb に「正解のバウンディングボックスの値」を返させるという役割を担っています。