Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2014-07-04

ナントカBoxの話(3)

(前回の続き)
画像挿入関連の機能

著名な DVIウェア/TeX エンジンについて、画像挿入機能の一部(特に bbox に関連するもの)について解説する。無論、これらは「TeX レベル」に属するもので、一般の LaTeX ユーザが用いるべきものではない。

※書式記述中の [ ] 囲いの部分は省略可能であることを示す。LaTeX の命令と異なり、実際に [ ] で囲って記述するのではないことに注意。

pdfTeX/LuaTeX

  • \pdfximagewidth 〈幅〉] [height 〈高さ〉] [depth 〈深さ〉] [page 〈ページ〉] [〈ボックス指定〉]{〈ファイル名〉} : 〔命令〕 画像ファイルを取り込んで画像オブジェクトを生成する。(配置はされない。*1)サイズ指定の既定値は、〈深さ〉はゼロで、〈幅〉と〈高さ〉は画像の bbox のそれに従う。PDF 画像の場合、〈ページ〉は取込対象のページ番号を示し(既定値は 1)、また、〈ボックス指定〉は bbox として使用するボックスの種別を示す。〈ボックス指定〉の有効な値は以下の通り:mediaboxcropboxbleedboxtrimboxartbox。この既定値は \pdfpagebox の値により決定される。*2
  • \pdfrefximage〈オブジェクト番号〉 : 〔命令〕 指定の番号の画像オブジェクトをその場に配置する。
  • \pdflastximage : 〔整数パラメタ:読込限定〕 直近の \pdfximage で生成された画像オブジェクトオブジェクト番号。

    つまり、次のようなコードで画像を挿入することができる。

    \pdfximage page 1 {image.pdf}\pdfrefximage\pdflastximage
    
  • \pdfpagebox : 〔整数パラメタ:読書可能〕 \pdfximagePDF ファイルから画像オブジェクトを生成する際に、〈ボックス指定〉を省略した場合に使われるボックスの種別を指定する。値は 1〜5 の整数で、それぞれ mediaboxcropboxbleedboxtrimboxartbox を表す。ただしゼロも指定可能でこの場合は 2 と同じく cropbox を指す(と思われる)。LaTeX での初期値はゼロ。
  • \pdfximagebboxオブジェクト番号〉 〈位置指定〉 : 〔展開可能〕 指定の番号の画像オブジェクトの bbox の値(寸法)を表す文字列に展開される。〈位置指定〉は 1〜4 の整数で、それぞれ「左下x」「左下y」「右上x」「右上y」を表す。
    なおこの機能はビットマップ画像には適用できないようだ(常に 0pt が返る)。ビットマップ画像の場合、左下隅は必ず (0,0) なので、画像の幅と高さだけ判れば十分で、「(TeX の)ボックスに入れて寸法を測る」という周知の方法を用いればよい。
    \pdfximage{image.png}%
    \setbox0\hbox{\pdfrefximage\pdflastximage}%
    \message{bbox = 0pt 0pt \the\wd0\space \the\dp0}%
    
  • \pdflastximagepages : 〔整数パラメタ:読込限定〕 直近の \pdfximage で生成された画像の元ファイルが PDF 文書であった場合、そのページ数。(PDF で無かった場合は 1。)
  • \pdfimageresolution : 〔整数パラメタ:読書可能〕 ビットマップ画像が解像度情報を持っていない場合に仮定される解像度の値。dpi 単位の整数で指定するが、ゼロの場合は 72 dpi と見做される。LaTeX での初期値はゼロ。
XeTeX
  • \XeTeXpdffile 〈ファイル名〉 [page 〈ページ〉] [〈ボックス指定〉] [scaled 〈拡大率〉] [xscaled 〈横拡大率〉] [yscaled 〈縦拡大率〉] [width 〈幅〉] [height 〈高さ〉] [rotated 〈回転角度〉] : 〔命令〕 PDF ファイルから画像を読み込みその場に配置する。〈ボックス指定〉の意味は \pdfximage と同じだが、値の名前が異なる(‘box’ がない;既定値は crop): mediacropbleedtrimart。〈回転角度〉は反時計回りの度単位で表す。TeX としては珍しく、ここは「単位無しの実数」を指定する仕様になっている。*3それに対して、何故か〈拡大率〉、〈横拡大率〉、〈縦拡大率〉には整数しか指定できない。
  • \XeTeXpicfile 〈ファイル名〉 [scaled 〈拡大率〉] [xscaled 〈横拡大率〉] [yscaled 〈縦拡大率〉] [width 〈幅〉] [height 〈高さ〉] [rotated 〈回転角度〉] : 〔命令〕 ビットマップ画像ファイルから画像を読み込みその場に配置する。パラメタの意味は前項と同じ。
  • \XeTeXpdfpagecount 〈ファイル名〉 : 〔展開可能〕 指定の PDF ファイルのページ数(の十進表記)に展開される。
dvips

これ以降は DVI ウェアについての説明なので、「special 命令」の書式を述べることにする。

  • PSfile=〈ファイル名〉 [hscale=〈横拡大率〉] [vscale=〈縦拡大率〉] [angle=〈回転角度〉] [clip] [llx=〈左下x〉] [lly=〈左下y〉] [urx=〈右上x〉] [ury=〈右上y〉] [rhi=〈幅〉] [rwi=〈高さ〉] : EPS 画像を読み込みその場に配置する。clip は元画像の bbox の外の部分の描画を抑止する。〈横拡大率〉、〈縦拡大率〉は百分率の整数で指定。〈回転角度〉は度単位の整数で指定。〈左下x〉〈左下y〉〈右上x〉〈右上y〉は bbox の座標を表し bp 単位の実数で指定。〈幅〉、〈高さ〉は挿入後の寸法を表し、これらは 0.1 bp 単位の実数で指定する。*4
    psfile=...PSfile=...同値である。
  • epsfile=〈ファイル名〉 [hscale=〈横拡大率〉] [vscale=〈縦拡大率〉] [hsize=〈幅〉] [vsize=〈高さ〉] : (dvi2ps 互換の命令。)EPS 画像を読み込みその場に配置する。〈横拡大率〉、〈縦拡大率〉は実数で指定(百分率ではない)。〈幅〉、〈高さ〉は bp 単位の実数で指定する。
  • postscriptbox={〈幅〉pt}{〈高さ〉pt}{〈ファイル名〉 : (jdvi2kps 互換の命令。)EPS 画像を読み込みその場に配置する。〈幅〉、〈高さ〉は pt 単位の実数で指定する。
dvipdfmx

あとで書く

dviout
  • dvips の PSfile=psfile=)命令に対応している。
  • dvips の epsfile= 命令に対応している。
  • dvips の postscriptbox 命令に対応している。
  • pbmfile=〈ファイル名〉 〈パラメタ〉... : raw PBM 形式画像ファイルを読み込みその場に配置する。パラメタの形式は PSfile= と同じ。
  • bmpfile=〈ファイル名〉 〈パラメタ〉... : PSEPSraw PBM 以外の形式の画像ファイルを読み込みその場に配置する。パラメタの形式は PSfile= と同じ。なお、dviout では WMF、EMF、BMP、BMC 形式を標準でサポートしていて、他の形式の画像ファイルを Susie plug in を通して扱うことができる。

*1:ちなみに、\pdfximage で生成されたがその後一度も参照(\pdfrefximage)されていない画像オブジェクトは結果の PDF ファイルには出力されないようである。

*2\pdfforcepageboxx というパラメタもあるが obsolete のようなので省略する。

*3:内部寸法値からのキャストが可能で、その場合 1pt → 1 と換算される。例えば rotated \p@rotated 1.0 と同じ。

*4:単位が奇妙であるが、恐らく元々は整数での指定であったのだろう。なお、本項の説明で「整数で指定」となっているキー(angle 等)はマニュアルの説明に従ったものだが、実際には実数を受け付けるようである。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証