TeX Alchemist Online

TeX のこと,フォントのこと,Mac のこと

dvipdfmx で複数ページPDF/AIファイルを \includegraphics する

この記事は TeX & LaTeX Advent Calendar 2014 の3日目の記事です。2日目の鹿野さんからバトンを受け継ぎました。4日目はCardinalXaroさんです。

今年の TeX & LaTeX Advent Calendar の重点テーマは 「このパッケージがスゴイ!」 となっていますが,パッケージの話は12日目に述べる予定なので,今日は少し毛色の異なる話を述べようと思います。

注意

この記事は TeX Live 2014 のみを対象としており,TeX Live 2013 以前,および TeX Live 2015 以降では成立しません。

  • TeX Live 2013 以前ではこの記事で述べられている「回避法」は使えません。
  • TeX Live 2015 以降,および W32TeX 2014/12/03版 以降では, この記事で述べられている「問題点」は既に解決されており,このような回避法自体が必要なくなりました。

そこで,この記事で述べられている内容を,TeX Live 2015 以降および W32TeX 2014/12/03版 以降を対象とするように書き換えた改訂版記事を用意しました。

目次

はじめに

この記事の記述は TeX Live 2014 に基づいています。この記事で述べる方法は TeX Live 2013 以前には適用できませんのでご注意ください。また,実験環境は次の通りです。

  • OS X Yosemite 10.10.1
  • Adobe Illustrator CS6

背景

昨年の Advent Calendar の記事でも述べましたが,日頃の化学教材の作成にあたり,図版作成には主に Adobe Illustrator を使っています。その際,次のように,少しずつ異なる同系統の図をたくさん用意する必要がある場面が多々あります。

f:id:doraTeX:20141203041041p:plain

その際,これらを1枚1枚別々のファイルにするのではなく,上図のように複数ページ(アートボード)を持つIllustratorファイルとして作成した方が,図版作成の作業効率やファイル管理の観点からは都合が良いと言えるでしょう。

しかし,日本で主流の (u)pLaTeX + dvipdfmx のワークフローの場合,このような複数ページ図版の取り扱いはなかなか厄介です。

この記事では,この問題に対する一つの解決策を提示しようと思います。

現状の何が問題なのか

まず,現状の TeX Live 2014 の仕様を概観し,「何が問題なのか」を整理しましょう。それを飛ばしてさっさと解決策を知りたい方はこちら

単一ページPDFの \includegraphics の場合

\usepackage[dvipdfmx]{graphicx}

とした場合,\includegraphics は次のような挙動をします。

  1. \includegraphics[bb=0 0 100 100] のように,TeXソースにbbオプションを直接与えた場合には,そのバウンディングボックス情報が組版に用いられる。(この方法をとるためには,「このPDFファイルに対して dvipdfmx が認識するバウンディングボックスはどのようなサイズか」を事前に調べておく必要があります。)
  2. 事前に extractbb によって 画像ファイル名.xbb というファイルを生成している場合,そこに書き込まれているバウンディングボックス情報が用いられる。
  3. どちらにも該当しない場合,コンパイル時にその場で extractbb が起動され*1,その場で測定したバウンディングボックス情報が標準出力からのパイプ入力を介してTeX側に伝えられる。(xbbファイルは生成されない。)

このうち,利便性が高いのは 3. の extractbb の自動起動に任せる方法です。というのは,1. や 2. の方法の場合,図版を修正して大きさが変われば,その都度バウンディングボックス情報を更新せねばなりません。3. の方法の場合,extractbb を毎回起動することによる若干のパフォーマンス低下はありますが,図版を頻繁に更新する状況下では,3. の方法にはそのデメリットを補って余りある利便性があると言えるでしょう*2

複数ページPDFを \includegraphics しようとした場合

\includegraphics 自体には,pageオプションによって複数ページPDFの任意ページの図版を貼り込むインターフェースが用意されています。また,dvipdfmxにも,「複数ページPDFの指定のページを挿入する」機能は用意されているのです。しかし,問題はバウンディングボックス情報です。extractbbでは,先頭ページのバウンディングボックスしか調べることができないのです。正しく図版を貼り込むためには,指定ページのバウンディングボックスを取得し,それをTeX側に伝えるという作業が必要ですが,extractbbがそれに対応しないため,上記 1. 2. 3. の方法のうち,2. と 3. は封じられます。したがって,残る手段は 1. の bb オプションの手動指定のみということになります。

bbの手動指定も困難

しかし,bbオプションの手動指定という方法にも大きな問題があります。図版を更新するたびに毎回情報の更新が必要という点はもちろん,それ以前に,そもそも「dvipdfmxが認識するバウンディングボックス情報の正解をつきとめるのが難しい」という問題があるのです。

PDFの5つのナントカBox

「dvipdfmxが認識するバウンディングボックス情報の正解をつきとめるのが難しい」ことの理由を理解するには,まずPDFの5つのBoxに関する複雑な事情を理解する必要があります。(ここはややこしいですので,読み飛ばしても問題ありません。)

PDFは,各ページごとに,次の5種類のボックス(通称ナントカBox)を持ちます(ナントカBoxの記事より引用)。

  • MediaBox: 用紙(等の媒体)に実際に印刷される領域。一般の人が行う(非専門的な)印刷行程ではこのボックスのみが指定(および使用)されることが多く,その場合は「用紙サイズ」を表す。
  • CropBox: 最も一般的な意味での,「そのページの(外形を込めた)内容」を表す領域。
  • BleedBox: 専門的な印刷工程における,「断ち落としサイズ」に相当する領域。
  • TrimBox: 専門的な印刷工程における,「仕上がりサイズ」に相当する領域。
  • ArtBox: PDF 文書を画像として用いる場合の,「その画像の(外形を込めた)内容」を表す領域。

これら5つのBoxのサイズが全て一致しているならば,迷うことなく \includegraphicsbb オプションにその値を書き込めばよいのですが,問題は5つのBoxのサイズが一致しない場合に,どのBoxをdvipdfmxが利用するかという点です。それを正しくbbオプションに指定しないと,図版が適切に配置されません。

Box省略時の規則(PDFの仕様)

まず,これら5つのBoxのサイズが全て明示的に記述されているとは限りません。省略された場合は,次のような規則で決まることがPDFの仕様で規定されています。

  • MediaBox の値は必ず明示される。
  • CropBox の値が明示されていない場合は,MediaBox と同じと解釈される。
  • BleedBox,TrimBox,ArtBox の値が明示されていない場合は,CropBox と同じと解釈される。

dvipdfmxのBoxの選択

一方,dvipdfmxがTeX文書に図版を挿入する際に選択するBoxは,PDFの仕様とは無関係に,次の規則で決まります。

CropBox→ArtBox→TrimBox→BleedBox→MediaBox の順で明示されている最初のものを使う。

したがって,\includegraphicsbb オプションには,その明示された最初のBoxの数値を書き込む必要があるのです。

ナントカBoxの調べ方

PDFの5つのナントカBoxのサイズは,例えば Xpdf に付属の pdfinfo というツールで調べることができます。例えば,あるPDFの2ページ目のナントカBoxのサイズを取得するには,次のようにします。

$ pdfinfo -box -f 2 -l 2 fig.pdf
Title:          Empty
Creator:        Adobe Illustrator CS6 (Macintosh)
Producer:       Adobe PDF library 10.01
CreationDate:   Thu Oct  2 11:41:16 2014
ModDate:        Tue Dec  2 23:10:16 2014
Tagged:         no
Form:           none
Pages:          16
Encrypted:      no
Page    2 size: 171.381 x 132.312 pts (rotated 0 degrees)
Page    2 MediaBox:     0.00     0.00   171.38   132.31
Page    2 CropBox:      0.00     0.00   171.38   132.31
Page    2 BleedBox:     0.00     0.00   171.38   132.31
Page    2 TrimBox:      8.50     8.50   162.88   123.81
Page    2 ArtBox:      27.32    24.10   129.97   100.61
File size:      290892 bytes
Optimized:      no
PDF version:    1.5

このようにして,5つのBoxのサイズが分かりました。

しかし,問題は,どのBoxが明示指定されたBoxで,どのBoxが暗黙に決定されたものかこの出力からは判断できないという点です。pdfinfoは,PDFの仕様に従い,非明示のBoxに対しては,他のBoxから暗黙的に決定されたBoxの値を表示しています。ですが,「CropBox→ArtBox→TrimBox→BleedBox→MediaBox のうち最初に明示されたものはどれか」が判断できないと,「dvipdfmxが利用する『正解』のBox」がどれであるかが判断できないのです。

例えば,上記の例の出力

Page    2 MediaBox:     0.00     0.00   171.38   132.31
Page    2 CropBox:      0.00     0.00   171.38   132.31
Page    2 BleedBox:     0.00     0.00   171.38   132.31
Page    2 TrimBox:      8.50     8.50   162.88   123.81
Page    2 ArtBox:      27.32    24.10   129.97   100.61

の場合,ArtBoxのサイズが他と異なりますので,ArtBoxが明示指定されていることが分かります。しかし,この出力からは,CropBoxがこの値に明示的に指定されているのか,MediaBoxから暗黙に決まったのかが判断できません。CropBoxが明示指定されているのであればdvipdfmxはCropBoxを使いますが,暗黙に決まったのであればArtBoxを使います。どちらであるかが判断できない以上,\includegraphicsbb オプションに書き込むべき値がどちらであるのか分からないのです。

Illustrator の図版のナントカBox

Illustrator のデフォルトの設定でPDF/AIファイルを保存した場合*3,5つのナントカBoxの情報は通常次のようになるようです*4

f:id:doraTeX:20141203042408p:plain

  • MediaBox:アートボードの赤枠に明示指定される。
  • TrimBox:アートボードの白い部分に明示指定される。
  • ArtBox:図版自体を取り囲む外接長方形とアートボードの白い部分の共通部分に明示指定される。
  • CropBox:明示指定されず,MediaBoxの値から暗黙に決まる。
  • BleedBox:AI形式の場合はMediaBoxと同じ値に明示指定される。PDF形式の場合は明示指定されず,(かつCropBoxも明示指定されていないので結果的に)MediaBoxと同じ値に暗黙に設定される。

したがって,上記の

CropBox→ArtBox→TrimBox→BleedBox→MediaBox の順で明示されている最初のものを使う。

というルールに従えば,Illustratorの図版に対しては,dvipdfmxは通常ArtBoxをバウンディングボックスとして使用することが分かります。

他のツールでトリミングした場合

しかし,こうしてIllustratorで作成した図版を,さらに他のツールで編集すると,状況は複雑化します。手元で実験してみると次のようになりました。

Preview.app で「範囲選択」→「切り取り」した場合

  • CropBox が新たに明示指定され,選択された範囲に指定される。
  • MediaBox, BleedBox, TrimBox, ArtBoxは変更されない。

Adobe Acrobat の「トリミングツール」でトリミングした場合

  • CropBox が新たに明示指定され,選択された範囲に指定される。
  • MediaBox は変更されない。
  • BleedBox, TrimBox, ArtBox は CropBox と同じ値に変更(明示指定)される。

いずれにせよ,このようなトリミングを行うと,新規にCropBoxが明示指定されます。その結果,dvipdfmxが使用するバウンディングボックスはCropBoxに変わります。したがって,事後に他のツールで編集される可能性がある場合,Illustrator図版に対して常にArtBoxをbbに指定しておけばよいとは言えないことが分かります。

問題点のまとめ

さて,現状の問題点の列挙が長くなりましたので,まとめましょう。

  • \includegraphics[page=2] のようにして2ページ目以降の図版を貼り込むことは可能だが,2ページ目以降はextractbbによるバウンディングボックス情報の自動取得ができない
  • \includegraphics[page=2,bb=0 0 100 100]のように手動指定しようと思っても,bbの値にどのBoxの値を用いればよいかが一概に判断できない
  • 運用によって,仮に使用するBoxをArtBoxに固定できるとしても,bbオプションを手動指定するのであれば,図版を更新するたびにいちいちArtBoxの新たな値を調べ直して,TeXソースのbb指定を毎回手動で更新せねばならず大変面倒

解決策:pdfinfo を拡張する

この問題に関し,以前こんなことを言っていました。

幸い,pdfinfo はオープンソースのツールなので,必要だと思う機能は自分で追加することができます。そこで,pdfinfo の独自拡張版を作成しました。

拡張版 pdfinfo の新仕様

この拡張版は,オリジナルの pdfinfo を次のように拡張しています。

  1. デフォルトで全ページのボックス情報を出力します。
  2. 明示指定されておらず,暗黙に決定されたナントカBoxには [Implicit] というラベルを付けて出力します。
  3. 各ページについて,dvipdfmx が選択するBoxには [dvipdfmx BB] というラベルを付けて出力します。
  4. 新オプション -extractbb を指定すると,extractbb -O の動作を模倣します。 すなわち,-f オプションで指定されたページの,dvipdfmxが認識するバウンディングボックスの情報を,extractbb と同じ書式で標準出力にアウトプットします。

まず,1. 〜 3. の改良により,pdfinfo の出力は次のようになります。

$ pdfinfo fig1.pdf
Title:          fig1
Creator:        Adobe Illustrator CS6 (Macintosh)
Producer:       Mac OS X 10.10.1 Quartz PDFContext
CreationDate:   Wed Dec  3 01:55:15 2014
ModDate:        Wed Dec  3 01:55:15 2014
Tagged:         no
Form:           none
Pages:          3
Encrypted:      no
Page size:      242.189 x 166.796 pts (rotated 0 degrees)
------------------------------------------------------------------------
Page    1 MediaBox:     0.00     0.00   242.19   166.80
Page    1 CropBox:      0.00     0.00   242.19   166.80   [Implicit]
Page    1 BleedBox:     0.00     0.00   242.19   166.80   [Implicit]
Page    1 TrimBox:      8.50     8.50   233.69   158.29
Page    1 ArtBox:      56.76    52.38   187.18   114.42   [dvipdfmx BB]
------------------------------------------------------------------------
Page    2 MediaBox:     0.00     0.00   224.28   117.61
Page    2 CropBox:      0.00     0.00   224.28   117.61   [Implicit]
Page    2 BleedBox:     0.00     0.00   224.28   117.61   [Implicit]
Page    2 TrimBox:      8.50     8.50   215.78   109.11
Page    2 ArtBox:      48.49     8.50   156.40    55.23   [dvipdfmx BB]
------------------------------------------------------------------------
Page    3 MediaBox:     0.00     0.00   159.43   215.19
Page    3 CropBox:      7.90    85.69   100.99   183.20   [dvipdfmx BB]
Page    3 BleedBox:     0.00     0.00   159.43   215.19
Page    3 TrimBox:      8.50     8.50   150.93   206.69
Page    3 ArtBox:      38.39    23.82   137.23   149.43
------------------------------------------------------------------------
File size:      11395 bytes
Optimized:      no
PDF version:    1.3

これにより,各ページで dvipdfmx が用いるBoxがどれであるかが一目瞭然に分かります。

しかし,「正解のボックス」が分かったとしても,\includegraphics[page=2,bb=0 0 100 100] のように手動指定するのでは,図版の更新に追従できないという問題が依然として残ります。

そこで,より重要となってくるのが 4. の改良点です。これは pdfinfo に extractbb の挙動を模倣させることにより,コンパイル時の2ページ目以降のバウンディングボックス自動測定を可能とします。したがって,TeXのコンパイル時にこの拡張版 pdfinfo が自動起動するよう設定しておくことにより,どのページでも適切なバウンディングボックス情報をその場で測定して組版することが可能となります。これにより,図版の更新にも自動的に追従できます

$ pdfinfo -extractbb -f 2 fig1.pdf
%%Title: fig1.pdf
%%Creator: pdfinfo version 3.04
%%BoundingBox: 48 9 156 55
%%HiResBoundingBox: 48.488300 8.503910 156.398000 55.230500
%%PDFVersion: 1.3
%%Pages: 3
%%CreationDate: Wed Dec  3 10:57:47 2014

-extractbb オプションをつけると extractbb の出力を模倣します

使用法解説

1. 拡張版 pdfinfo のバイナリをダウンロード または ソースをコンパイル

拡張版 pdfinfo のMac用バイナリはGitHubのリリースページに置いてあります。10.6 SnowLeopard以上で動くようになっています。pdfinfo.zip をダウンロードし,展開して出てくる pdfinfo を,パスが通ったディレクトリ(extractbbと同じディレクトリなど)に配置してください。

その他のOSの場合,GitHubレポジトリからソース一式をダウンロードしてコンパイルします*5

$ ./configure
$ make pdfinfo

すると,xpdf ディレクトリの中に pdfinfo の実行バイナリが生成されますので,適切なディレクトリに配置してください。

2. pdfinfo の自動起動設定

次に,TeXのコンパイル時に,extractbb と同様に pdfinfo が自動起動することを許可しておきましょう。 extractbb の自動起動を許可したときと同様に,texmf.cnf を編集して pdfinfo の自動起動を許可します。

shell_escape_commands = \
bibtex,bibtex8,bibtexu,upbibtex,biber,\
kpsewhich,\
makeindex,mendex,texindy,xindy,\
mpost,upmpost,\
repstopdf,epspdf,extractbb,pdfinfo

3. graphicx パッケージの dvipdfmx 用ドライバの改造版を取得

\usepackage[dvipdfmx]{graphicx}

とした場合,graphicx パッケージのドライバである dvipdfmx.def というファイルが読み込まれます。この中で extractbb の自動起動が規定されています。

これを,PDFおよびAIファイルに対しては pdfinfo が起動するように改変したものは,こちらからダウンロードできます

これを適切な場所に配置し,必要に応じて mktexlsr します。とりあえずは,コンパイルしたいTeXソースと同じディレクトリに置いておけば動きます。

参考:dvipdfmx.def の改変点

これは,オリジナルの dvipdfmx.def を次のように改変しています。

【オリジナル】

\immediate\openin\@inputcheck="|extractbb -O \Gin@base\Gin@ext"%

【改造版】

\def\@tempa{!}%
\ifx\Gin@page\@tempa
  \def\@tempa{}%
\else
  \def\@tempa{-f \Gin@page\space}%
\fi
\def\@temp@ext@pdf{.pdf}%
\def\@temp@ext@PDF{.PDF}%
\def\@temp@ext@ai{.ai}%
\def\@temp@ext@AI{.AI}%
\ifnum0%
  \ifx\Gin@ext\@temp@ext@pdf1\fi
  \ifx\Gin@ext\@temp@ext@PDF1\fi
  \ifx\Gin@ext\@temp@ext@ai1\fi
  \ifx\Gin@ext\@temp@ext@AI1\fi>0\relax
    \immediate\openin\@inputcheck="|pdfinfo -extractbb \@tempa \Gin@base\Gin@ext"%
\else
  \immediate\openin\@inputcheck="|extractbb -O \Gin@base\Gin@ext"%
\fi

これにより,拡張子 .pdf / .PDF / .ai / .AI のファイルに対しては pdfinfo が起動するようになっています*6。一方,.png や .jpg などのビットマップ画像に対しては,引き続き extractbb を使用してサイズ測定します。

テスト

テスト用ファイルの説明

テスト用レポジトリの右下の Download ZIP ボタンを押して,テスト用ファイル一式をダウンロードしてください。

この中には,fig1.pdf, fig2.ai という2つの画像ファイルが入っています。これらは,Illustrator で次のように3つのアートボードを持つ書類として作成したものです。

f:id:doraTeX:20141203105205p:plain
Illustratorで作成した3ページからなる図版

この Illustrator 書類を,PDFおよびAI形式で書き出しました。ただし,fig1.pdf については,Illustrator で保存した後,Preview.app で開き,3ページ目の一部を範囲選択してトリミングしました。

その結果,fig1.pdf の Preview.app 上での見た目は次のようになっています。

f:id:doraTeX:20141203105532p:plain
fig1.pdf の3ページ目を Preview.app でトリミングした

なお,Preview.app 上で見えているのはCropBox(明示の場合はその値,非明示の場合はMediaBoxから暗黙に決められる値)の領域です。

テスト用ファイルのナントカBox

テスト用ファイルのナントカBoxは次のようになっています。

$ pdfinfo fig1.pdf
------------------------------------------------------------------------
Page    1 MediaBox:     0.00     0.00   242.19   166.80
Page    1 CropBox:      0.00     0.00   242.19   166.80   [Implicit]
Page    1 BleedBox:     0.00     0.00   242.19   166.80   [Implicit]
Page    1 TrimBox:      8.50     8.50   233.69   158.29
Page    1 ArtBox:      56.76    52.38   187.18   114.42   [dvipdfmx BB]
------------------------------------------------------------------------
Page    2 MediaBox:     0.00     0.00   224.28   117.61
Page    2 CropBox:      0.00     0.00   224.28   117.61   [Implicit]
Page    2 BleedBox:     0.00     0.00   224.28   117.61   [Implicit]
Page    2 TrimBox:      8.50     8.50   215.78   109.11
Page    2 ArtBox:      48.49     8.50   156.40    55.23   [dvipdfmx BB]
------------------------------------------------------------------------
Page    3 MediaBox:     0.00     0.00   159.43   215.19
Page    3 CropBox:      7.90    85.69   100.99   183.20   [dvipdfmx BB]
Page    3 BleedBox:     0.00     0.00   159.43   215.19
Page    3 TrimBox:      8.50     8.50   150.93   206.69
Page    3 ArtBox:      38.39    23.82   137.23   149.43
------------------------------------------------------------------------
$ pdfinfo fig2.ai
------------------------------------------------------------------------
Page    1 MediaBox:     0.00     0.00   242.19   166.80
Page    1 CropBox:      0.00     0.00   242.19   166.80   [Implicit]
Page    1 BleedBox:     0.00     0.00   242.19   166.80
Page    1 TrimBox:      8.50     8.50   233.69   158.29
Page    1 ArtBox:      56.76    52.38   187.18   114.42   [dvipdfmx BB]
------------------------------------------------------------------------
Page    2 MediaBox:     0.00     0.00   224.28   117.61
Page    2 CropBox:      0.00     0.00   224.28   117.61   [Implicit]
Page    2 BleedBox:     0.00     0.00   224.28   117.61
Page    2 TrimBox:      8.50     8.50   215.78   109.11
Page    2 ArtBox:      48.49     8.50   156.40    55.23   [dvipdfmx BB]
------------------------------------------------------------------------
Page    3 MediaBox:     0.00     0.00   159.43   215.19
Page    3 CropBox:      0.00     0.00   159.43   215.19   [Implicit]
Page    3 BleedBox:     0.00     0.00   159.43   215.19
Page    3 TrimBox:      8.50     8.50   150.93   206.69
Page    3 ArtBox:      38.39    23.82   137.23   149.43   [dvipdfmx BB]
------------------------------------------------------------------------

fig1.pdf の3ページ目だけが,CropBoxが明示指定されていることが分かります。

テスト実行

同梱の test.tex は次のようなソースです。

\documentclass[twocolumn]{article}
\usepackage[dvipdfmx,hiresbb]{graphicx}
\begin{document}
\fboxsep=0pt
\fboxrule=1pt
\parindent=0pt

\section{fig1.pdf}
\fbox{\includegraphics[page=1,clip]{fig1.pdf}}\par
\fbox{\includegraphics[page=2,clip]{fig1.pdf}}\par
\fbox{\includegraphics[page=3,clip]{fig1.pdf}}

\newpage

\section{fig2.ai}
\fbox{\includegraphics[page=1,clip]{fig2.ai}}\par
\fbox{\includegraphics[page=2,clip]{fig2.ai}}\par
\fbox{\includegraphics[page=3,clip]{fig2.ai}}
\end{document}

これを

$ ptex2pdf -l test

でコンパイルした場合を考えます。

普通の TeX Live 2014 でコンパイルした結果

同梱の test-extractbb.pdf が得られます。

f:id:doraTeX:20141203110047p:plain
普通の TeX Live 2014 でコンパイルした結果

このように,バウンディングボックスのサイズが1ページ目のArtBoxに揃えられてしまっていることが分かります。

拡張版 pdfinfo と dvipdfmx.def を用いてコンパイルした結果

同梱の test-pdfinfo.pdf が得られます。

fig1.pdf の3枚目に対しては CropBox,それ以外のページについては ArtBox がバウンディングボックスとして認識されて正しく貼り込まれていることが分かります。

f:id:doraTeX:20141203105938p:plain
拡張版 pdfinfo と改造版 dvipdfmx.def を用いてコンパイルした結果

根源的解決策は……

本来的には,extractbb を改修して,「2ページ目以降のバウンディングボックス情報を出力する機能」を実装するのが理想的な解決手段です。 それが実装されれば,この拡張版 pdfinfo やその自動起動設定はもはや不要になります*7

将来的に extractbb 自体にその機能が実装されることを願いつつ,とりあえず現状で機能する暫定的解決策として,この拡張版 pdfinfo をご紹介いたしました。

参考記事

  1. dvipdfmx で画像する時に色々とアレな話 - マクロツイーター
  2. ナントカBoxの話(1) - マクロツイーター
  3. ナントカBoxの話(2) - マクロツイーター
  4. ナントカBoxの話(3) - マクロツイーター
  5. ナントカBoxの話(4) - マクロツイーター
  6. bbox とか ナントカBox に関する補足 - マクロツイーター

*1:そのためには texmf.cnf で extractbb の自動起動を許可しておく必要があります。

*2:TeX Live 2013以前ではパイプ入力ができませんでしたので,初回コンパイル時にextractbbによってxbbファイルが生成されていました。そのため,「xbbファイル生成後に図版を更新すると図の貼り付け位置がおかしくなった」というトラブルが続発する原因となっていました。TeX Live 2014 の dvipdfmx ドライバでは,xbbファイルを生成せず毎回bbを測定し直すため,図版の更新に常に追従できます。

*3:最近のIllustratorでは,Illustrator PDF形式で保存しても,AI形式で保存しても,出来上がるものはほとんど同じで,どちらもPDFとして扱うことができます。TeX Live 2014 の dvipdfmx ドライバは,拡張子が .ai のファイルもPDFと同等に扱って \includegraphics できるようになっています。

*4:このあたり,今一つ実験不足です。より確かな情報をお持ちの方がおられましたらぜひご教示ください。

*5:これはUnix系OSでのコンパイル法。Windows環境では付属の ms_make.bat を利用すればコンパイルできるのかもしれません。しかし手元にWindows環境がないため試せておりません。

*6:\ifnum0 のところはTeXで OR を表現するためのイディオムです。

*7:その場合も,この拡張版 pdfinfo は,PDFの各ページのナントカBoxの詳細を閲覧するためのツールとしては役立つでしょう。