論文を TeX で書く人にとっては、図版を EPS (Encapsulated PostScript) 形式で準備する必要がある。Illustrator のような便利なソフトを持っていればいいが、そうでなければなにかのソフトで描いた絵を EPS に変換しなければいけまい。
僕がよく使うのは PowerPoint で、これはプレゼン用のソフトなので簡単な絵であれば描きやすい。さらに、論文で使った図をそのままプレゼンに転用することもできます。で、便利なんだが、問題はそれを EPS に変換する方法というわけだ。
ここで紹介する方法は、高品質な EPS ファイルが得られるうえ、Makefile に EPS 出力を組み込むことができるので EPS の作り忘れもないという、非常に便利な方法。ただし Unix のようなコマンドプロンプト環境になるので、Unix 使いでない人にはちょっと覚悟が必要になる。基本的には、日本語 TeX と cygwin をインストール (perl と make を忘れずに指定のこと) してあることが前提である。
これで、PowerPoint などのソフトから、このプリンタで印刷とすると、ファイル名を入力するダイアログボックスが出る。ここで 適当なファイル名を入力すれば、そのファイル (拡張子 .prn) に PostScript が出力されるようになる。ここでは、仮に figures.prn というファイルを用意したとしよう。
GS_LIB=c:\gs\gs7.03\lib;c:\gs\gs7.03\kanji;c:\gs\fonts
の環境変数が設定されているか再確認 (Win95/98/ME なら c:\autoexec.bat の中。それ以外なら [コントロールパネル] - [システム] - [詳細設定] - [環境変数])。もちろんここで c:\gs\gs7.03\... は ghostscript をインストールした場所(スペースを含むパス名が大丈夫かどうかは、知らないです)。そして、cygwin 内から使えるように ln -s /cygdrive/c/gs/gs7.03/bin/gswin32c.exe /usr/local/bin/gs などとしておく (ここで /cygdrive/c/gs/gs7.03/ ... は ghostscriptをインストールした場所の Cygwin 名)。Cygwin プロンプトから gs コマンドを実行して GS> と表示されることを確認する (Ctrl-C で抜ける)。
psselect 1 figures.prn > figures_1.ps次に、抽出した ps を eps に変換する。
ps2eps -B -f figures_1.ps figures_1.epsこれを、もとの ps ファイルのページ数だけ繰り返せば、各ページが eps として扱えるようになる。 ps2eps のオプション
-f は、すでに出力ファイルがある場合に上書きする指定。-B は、元の Bounding Box を無視する(これがないと図が切れてしまうことがある)。ほかにもいろいろオプションがあるので研究すべし。
これで基本的には完了で、.tex ファイル中に
\includegraphics[clip=yes]{figures_1.eps}
などと記入すれば図版を貼り付けることができるようになる。([clip=yes] は図版の外側にはみ出た描画を切り取る指定。PowerPoint の場合はもとのスライドのサイズいっぱいに白い四角を描くという悪い習性があり、[clip=yes] がないと、論文のほかの場所が隠されてしまうる)。
ただし、論文の締め切りなどで非常によく起こるのが、「元の図版は修正したけど eps への変換を忘れてしまったために古い図版で印刷してしまい、しかも気づかず提出してしまった」という事態である。このような事態を避けるためには、自動処理を設定するのがベストである。Makefile を使うと、図版が更新された場合にだけ自動処理させることが可能なので、こういう場合に向いているといえる。
次のような内容の Makefile という名前のファイルを用意しておく(ここで論文が main.tex であるとする)。論文と同じディレクトリにおいておこう。
# 論文用 makefile
POWERPOINT = "/cygdrive/c/Program files/Microsoft Office/Office10/POWERPNT.EXE"
PPOPTS = /pt "PSPrint" "PSCRIPT5.DLL" "FILE:"
main.ps: main.dvi
dvipsk -Pbi main
main.dvi: main.tex figures_stamp
platex main
jbibtex main
platex main
platex main
figures_stamp: figures.prn
@for i in `perl -ne 'if(/^%%Pages: ([0-9]+)/)\
{print join(" ",1..$$1);exit}' figures.prn` ; do \
echo Processing page $$i ; \
psselect $$i figures.prn > figures_$$i.ps ; \
ps2eps -B -f figures_$$i.ps figures_$$i.eps ; \
rm -f figures_$$i.ps ; \
done
touch figures_stamp
figures.prn: figures.ppt
@rm -f figures.prn
@echo "Type 'figures.prn' in the box!"
$(POWERPOINT) $(PPOPTS) $<
@while test ! -e figures.prn; do echo -n .; sleep 1; done
clean:
rm -f figures.prn figures_*.ps figures_*.eps
rm -f figures_stamp main.aux main.bbl
ここで POWERPOINT= の行には powerpnt.exe の cygwin 名を書いておく。
PPOPTS= の行は、コマンドラインから Print to の指定をするためのオプション。"PSPrint" は最初に作った PS プリンタ名、"PSCRIPT5.DLL" はドライバ名 (ここで作った手順であればこのドライバ名でいいはずだが、うまく動かなければテストページの印刷をさせてドライバ名を確認しよう) である。
cygwin のコマンドラインから、論文ファイルが置いてあるディレクトリで make と打つと、PowerPoint が立ち上がって、いきなり出力ファイル名を聞いてくる。ここでは figures.prn と入力しよう。ここだけはどーしても自動化できなかったのだ。あとは、今までのコマンドがぜんぶ自動で動き、すべての図版の eps ファイルを生成して platex を何回も実行してくれ、最後に dvipsk で .ps ファイルまで作ってくれるのである。なんとすばらしい。
make プログラムは、Makefile に書かれているルールを読み込み、それにしたがって目的のものを作ろうとする。ルールは「作るもの: 必要なもの 必要なもの...」という行のあとに、タブでインデントして「必要なものから作るものを生成するためのコマンド」を並べるという形をとる。たとえば、main.ps を main.dvi から作るなら、dvipsk コマンドを実行しろ、というような感じである。ここで、main.dvi がない、あるいは古い場合には、ほかのルールを参照して、main.dvi を作ってから main.ps を作ろうとする。
たんにコマンドラインから make と打つと、最初のルールのターゲットを生成しようとする(この場合は main.ps)。しかし、main.ps には main.dvi が必要である。次のルールには、main.dvi は main.tex と figures_stamp が必要であると書いてある(この figures_stamp は、図版生成ができたことを示す、空のファイル)。さらに、figures_stamp を作るには figures.prn が必要であり……と連鎖的に動作して、けっきょく必要なものを全部作ってくれるのである(これを依存関係解析と呼ぶ)。
make のすばらしいところは、ファイルの変更時刻を見て最低限のコマンドだけを実行してくれるという点である。たとえば、いったん make したあとに、main.tex だけを変更したとしよう。そうすると、make は main.tex が新しくなっていることを調べ、main.dvi を作るところから仕事をやってくれる。もちろん、元の図版が変更されれば、また figures.prn の生成からやってくれる。これさえあれば、図版の更新忘れの心配をもうしなくてもよくなるわけだ。
最後の clean というのは特殊なターゲットである。別に clean というファイルを作るわけではなく、論文作成の途中でできるごみファイルをぜんぶ削除するコマンドが書いてある。make clean とすれば、このコマンドが実行されて、余計なファイルを消せるというわけだ(操作のしかたによっては、たまにファイルの変更時刻がずれて、必要なコマンドも実行されないということが起こるが、その場合でも make clean してから make すれば全部作り直してくれる)。
Makefile にもっとルールを追加してもかまわない。どう使うかはその人しだいである。
[clip=yes] が効かないという事態に見舞われている。こういう場合は、描いた図を描画領域の左上に移動してやれば、たいていのばあい問題がなくなる。
\usepackage{mathptmx}
\usepackage{helvet}
\usepackage{courier}
と書くと、Computer Modern フォントでなく Times、Helvetica、Courier を使うようになる (ほかのフォントも使える。詳しくは ptex のディレクトリの中にある /ptex/share/texmf/source/latex/psnfss/psnfss2e.pdf を参照)。図版のほうは、PowerPoint で [書式] メニューの中に [フォントの置換] があるので、Times New Roman を Times に、Arial を Helvetica に、のように置き換えを行うとよい(このとき、プリンタ指定が PostScript プリンタになってないと Times などがプルダウンメニューで表示されないが、ボックス内に Times などとタイプしてしまえばよい)。
PDF を作る際には、dvipdfm でも大丈夫なのだが、内部で ghostscript を使っている関係で図版の PostScript フォントがベクタデータに展開されてしまう。これだと最新の Acrobat Reader についている CoolType 機能が図版の中の文字だけには効かなくなってしまうという問題があるのであった。可能なら dvipsk で ps にしたあと、Adobe Acrobat (製品版) 付属の Distiller で pdf に変換しよう。