最終更新:2017-06-19 (月) 01:53:09 (158d)

チュートリアル

Illustrator の図を TeX に



TeX から Illustrator の AI ファイルを張り込む

経験上 Illustrator で作成した図(特に EPS)がうまく TeX に張り込めないという事が多いです.

そこには uplatex + dvipdfmx + ghostscript + Illustrator + EPS の連鎖反応的問題があるように思います.

TeX Live 2016 以降であれば AI ファイルは直接張り込む事が可能です

手順を以下に示します.

  1. Illustrator で適当な fig.ai を作成する.但し,編集機能は有効になっている必要があります.普通は Illustrator 形式で保存すれば編集機能は保持されますが,一度 PDF 等で保存すると編集機能が失われる事になり得ます.
  2. BoundingBox に CropBox を使用する場合は \includegraphics[pagebox=cropbox]{fig.ai} と記述し,BoundingBox に ArtBox を使用する場合は \includegraphics[pagebox=artbox]{fig.ai} と記述する.

TeX から Illustrator の fig.ai を張り込むために次のような TeX ファイルを作成します.

BoundingBox に CropBox を使用する場合は

\documentclass[uplatex]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\begin{document}
\begin{center}
 \includegraphics[pagebox=cropbox]{fig.ai}
\end{center}
\end{document}

BoundingBox に ArtBox を使用する場合は

\documentclass[uplatex]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\begin{document}
\begin{center}
 \includegraphics[pagebox=artbox]{fig.ai}
\end{center}
\end{document}

約束事として

  1. graphicx パッケージを読み込むときには dvipdfmx オプションを付与
  2. \includegraphics 命令で pagebox=cropbox あるいは pagebox=artbox オプションを付与して AI ファイルを指定

を守るだけです.

なぜ Illustrator の AI ファイルを直接張り込めるの?(原理的な話)

手元の fig.ai を少し調べてみます.まずは Unix の伝統的なコマンド file で調べてみます.

file fig.ai

すると

fig.ai: PDF document, version 1.6

という出力が得られます.要するに fig.ai の中身は単なる PDF だったという訳です.

head -1 fig.ai | strings

とすると

%PDF-1.6

となることから,PDF のバージョン 1.6 のファイルである事も判明します.

cat fig.ai | strings | less

とかやると,もろ PDF の中身が見えます.

そこで,この fig.ai の BoundingBox を取得する事を考えます.試しに

cat fig.ai | strings | grep -e 'Box' 

とすると,例えば次のように表示されます.

/MediaBox [ 0 0 592 840 ] 
/ArtBox [ 5.96045 10.56055 586.03906 829.43994 ] 
/TrimBox [ -1 -1 594 841 ] 
%%BoundingBox: 5 10 587 830
%%HiResBoundingBox: 5.9604 10.5605 586.0391 829.4399
%AI3_TemplateBox: 296.5 419.5 296.5 419.5
%AI3_TileBox: 12 12 581 828
%%BoundingBox: 5 10 587 830
%%HiResBoundingBox: 5.9604 10.5605 586.0391 829.4399
/FontBBox [ 0 -137 1000 859 ] 

少なくとも Illustrator が吐き出す領域情報(ページボックス)には

  • MediaBox?: 用紙サイズ
  • ArtBox?: 実際にオブジェクトが描かれている領域
  • TrimBox?: 仕上がりサイズ
  • %%BoundingBox: ArtBox? 以外に互換性のために挿入する描画領域情報
  • %%HiResBoundingBox?: %%BoundingBox の少数を含む高解像度版

の五つの情報が含まれているようです.ここでは単純に %%BoundingBox を使うようにしています.トンボを出していたり,何かしらの特殊な処理をしている場合は dvipdfmx による変換の時に

** WARNING ** "TrimBox" different from current CropBox found.
** WARNING ** TrimBox (PDF): [ -1 -1 594 841 ]
** WARNING ** CropBox/MediaBox (PDF)   : [ 0 0 592 840 ]
** WARNING ** "ArtBox" different from current CropBox found.
** WARNING ** ArtBox (PDF): [ 5.96045 10.5605 586.039 829.44 ]
** WARNING ** CropBox/MediaBox (PDF)   : [ -1 -1 594 841 ]

の様な警告を頼りに調整をしてください.

これは fig.ai の中に記述されている描画領域情報 /TrimBox?, /CropBox?, /MediaBox?, /ArtBox? に統一性がないためです.dvipdfmx はメインで /Cropbox を使っています.画像の切り抜きが変な場合は,上記の警告で表示されている TrimBox?MediaBox?, ArtBox? のいずれかの値を用いてください.

付録 Illustrator のバージョン関係の話

バージョン発売時期標準保存形式
Illustrator CC (2017)2016/11/02PDF 1.6
Illustrator CC (17)2013/06/17PDF 1.6
Illustrator CS 62012/05/07PDF 1.6

コメント

  • \includegraphics 命令(1) (一般の)EPS ファイルに対しては, -- 2007-01-15 (月) 09:31:51
  • includegraphics 命令は,自動的に下記のファイル内の BoundingBox 値を読み込んでくれます. (1) (一般の)EPS ファイル (2) Adobe Illustrator 9 or later で作った編集可能型の pdf ファイル しかし,これら以外に対しては,各ファイルに対して BoundingBox ファイル(.bb) を作る必要があります. -- kd 2007-01-15 (月) 09:37:25
  • 情報ありがとうございます,とんだ勘違いをしていたようです.何も指定しなければ \includegraphics で指定された画像は EPS と見なされ,ファイルを seek して %%BoundingBox なる行を探す,というのが gprahics.sty の動作になりますよね.Thor