EPS形式の作成

TIFFからEPS

ibtiff-3.5.7-6vl2に含まれるtiff2psを使う。

 tiff2ps -e -2 -z  stapred-grey03.tif > stapred03.eps

zオプションを付けないと余計な空白が入る場合がある。

PSFragによる数式の埋め込み

tgifで数式部分を\tex{数式などTeXコマンド}と書いておく。TeXコマンドは自 動実行されて結果が出力される位置は左寄せであることを念頭に置きながら、 tgif上で数式などを埋め込む。

次に適当なTeXファイルに入れ込む。

\documentclass[14pt]{article}
\usepackage{graphicx}
\usepackage[scanall]{psfrag}
\begin{document}
\thispagestyle{empty}
\includegraphics[scale=1]{tmp2.eps}
\end{document}

psfrag.styのオプションであるscanallは便利なオプションで、\tex{}の中に TeXコマンドを書いておけば、自動的に変換してくれる。このオプションをつ けない場合は、変換する対象の単語とTeXコマンドの対応を1つ1つ書 く必要がある。この場合は、変換後の出力位置を細かく指定できるので、必要 に応じて使い分ければよいが、ほとんどの場合は、tgif上で\tex{}を書き込む 位置を微調整して、scanallオプションで一気に変換した方が楽であると思う。

拡大縮小を避けるために、includegraphicsのサイズ指定オプションの scale は1にする。これをコンパイルした後に、 dvips でepsにする。

$ dvips -E tmp.dvi

左に余白ができる。 eps2eps で余白を削ることもできるが、やってみると、フォ ントがアウトライン化(ビットマップ化かも)されて、きれいにならない。 epstopdf で出力されたpdfはフォント埋め込みなしでやや汚いpdfになった(下 図左、pdfをAdobe Reader上に表示させて得たスクリーンショット)。下図右は、 eps2eps を通す前のオリジナル(正確には、 epstopdf で変換したpdfをAdobe Reader上に表示させて得たスクリーンショット)。

 

ubuntu 8.04 では、epstopdfは、texlive-extra-utils パッケージに入ってい る。探すのに苦労した。なお、このパッケージは、他にも重要で不可欠なコマ ンド、pdfclose pdfopenなども含んでいる。

結果的に、余白はepsのBoundingBoxをテキストエディタで直接編集するのがもっとも 迅速かつ妥当な方法といえると思う。

一連の作業手順をシェルスクリプトにすると作業が楽そうだ。

BBoxの修正

Rで出力すると余白が大きくなることがある。gvでマウスを動かしながら表示される座標を読み取る原始的な方法が一番確実。BBoxの修正プログラムとして、 eps2epsepstool などが定番だが、ちゃんと機能してくれないときもある。

今、Rで次のような画像を作成するとする。

m <- matrix(rep(2,8),nrow=1)
symbols(5,5,stars=m,axes=FALSE,xlab='',ylab='')
dev.copy2eps(file="octagon.eps")

このように余白が大きい。また、不要なはずのフォントの定義などが入っており、

$ wc -l octagon.eps
104 octagon.eps

104行もある。これにファイルに対して、

$ epstool --test-eps octagon.eps
"gs"  -dNOEPS -dNOPAUSE -dBATCH -dNODISPLAY  "/tmp/gsviewp0rjVf"
GPL Ghostscript 8.63 (2008-08-01)
Copyright (C) 2008 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading NimbusSanL-Regu font from /var/lib/defoma/gs.d/dirs/fonts/n019003l.pfb... 2646860 1084914 3135424 1835976 2 done.
Loading NimbusSanL-Bold font from /var/lib/defoma/gs.d/dirs/fonts/n019004l.pfb... 2663524 1174047 3135424 1839602 2 done.
Loading NimbusSanL-ReguItal font from /var/lib/defoma/gs.d/dirs/fonts/n019023l.pfb... 2700284 1264475 3135424 1842801 2 done.
Loading NimbusSanL-BoldItal font from /var/lib/defoma/gs.d/dirs/fonts/n019024l.pfb... 2797332 1365734 3135424 1846004 2 done.
Loading StandardSymL font from /var/lib/defoma/gs.d/dirs/fonts/s050000l.pfb... 2837524 1418985 3135424 1849380 2 done.

EPSWARN PASS

"gs"  -dNOPAUSE -dBATCH -sDEVICE=bbox   -c "<</PageSize [9400 9400] /PageOffset [3000 3000]>> setpagedevice" -f "/tmp/gsviewDmfjmR"
GPL Ghostscript 8.63 (2008-08-01)
Copyright (C) 2008 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading NimbusSanL-Regu font from /var/lib/defoma/gs.d/dirs/fonts/n019003l.pfb... 2606740 1073526 3846428 2550346 2 done.
Loading NimbusSanL-Bold font from /var/lib/defoma/gs.d/dirs/fonts/n019004l.pfb... 2623404 1162659 3846428 2553972 2 done.
Loading NimbusSanL-ReguItal font from /var/lib/defoma/gs.d/dirs/fonts/n019023l.pfb... 2700356 1259743 3846428 2557171 2 done.
Loading NimbusSanL-BoldItal font from /var/lib/defoma/gs.d/dirs/fonts/n019024l.pfb... 2797404 1361002 3846428 2560374 2 done.
Loading StandardSymL font from /var/lib/defoma/gs.d/dirs/fonts/s050000l.pfb... 2837596 1414253 3866524 2567078 2 done.
%%BoundingBox: 0 0 0 0
%%HiResBoundingBox: 0.000000 0.000000 0.000000 0.000000

File has   %%BoundingBox: 0 0 504 504
Correct is %%BoundingBox: -3000 -3000 -3000 -3000
File bounding box needs to be larger
PostScript appears well behaved.
File claims to be EPS.
FAIL: File does not comply with EPS specification.
Failed

と失敗する。BBoxもおかしな値を計算する。 eps2eps もBBoxの計算に失敗する。 そこで、 purifyeps を試してみる。

$ purifyeps --fontmap=/usr/share/pstoedit/mpost.fmp octagon.eps octagon4.eps
pstoedit: version 3.45 / DLL interface 108 (build Jun 17 2008 - release build - g++ 4.3.1) : Copyright (C) 1993 - 2007 Wolfgang Glunz
This is MetaPost, Version 0.993 (Web2C 7.5.6)
(/tmp/purifyeps-y3ektDXB.mp [1] )
1 output file written: purifyeps-y3ektDXB.1
Transcript written on purifyeps-y3ektDXB.log.

File seems to have been purified successfully.
$ wc -l octagon4.eps
22 octagon4.eps

たった44行に削られており、正しくBBoxを計算できた。

この44行は、下記の通り

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 193 186 339 332
%%HiResBoundingBox: 193.934 186.734 338.684 331.484
%%Creator: MetaPost 0.993
%%CreationDate: 2008.12.12:1844
%%Pages: 1
%%BeginProlog
%%EndProlog
%%Page: 1 1
 0 0 0 setrgbcolor 0 0.75 dtransform truncate idtransform setlinewidth pop
 [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit
newpath 338.309 259.109 moveto
317.219 310.02 lineto
266.309 331.109 lineto
215.398 310.02 lineto
194.309 259.109 lineto
215.398 208.199 lineto
266.309 187.109 lineto
317.219 208.199 lineto
338.309 259.109 lineto stroke
showpage
%%EOF

Creator部分がMetaPostになっている点が興味深い


更新:2009年 3月 24日 火曜日 13:32:34 JST  Top