2014年9月17日水曜日

psfragでepsファイルに数式を入力する

LaTeXで図を入力するにはepsファイルを作成するのがシンプルな方法である. gnuplotやtgifならepsファイルの出力をサポートしているしベクター画像だから, 拡大や縮小にも問題がほとんどおきない.

ただ, epsファイルに数式を入力したいとなると, 少し面倒な作業が必要になる. 方針としては,
  1. epsファイルをTeXに取り込んで, 文字部分を数式に置き換える(psfragを使う).
  2. dvipsでepsファイルを作成する.
  3. epsファイルから余分な情報を取り除く.
  4. 必要に応じて, バウンディングボックスを修正する.
という感じ. 一つづつ説明する.

  1. epsファイルをTeXに取り込んで, 文字部分を数式に置き換える(psfragを使う).
    gnuplotの場合はtgif形式に出力できる.

    set term tgif
    set output "hogehoge.obj"

    とすればよい.

    tgifで数式に変更したいところに, 適当な文字(例えばギリシャ文字のΩを入力したかったら, Omega とか)を入力しておく. そのあと, tgifからepsファイルに出力しておく.

    次に, texファイルで上で作ったepsファイルを取り込み, ソースのプリアンブルに

    \usepackage[dvips]{psfrag}

    を書きこみ, さらに本文中のepsファイルを取り込む前に

    \psfrag{Omega}{$\Omega$}

    と入力する(\mathversion{bold}とか\bfを入れるかは御自由に). これをlatexでコンパイルする. なお, 出てきたdviファイルを見てもあまり意味がない.
  2. dvipsでepsファイルを作成する.

    上で得られたdviファイルをdvipsでepsに変換する.

    dvips -D 1200 -E hogehoge.dvi -o fugafuga.eps

    この -D 1200 は解像度として1200dpiとすることを表す. 入れても入れなくても大差はないし, もっと大きな値にしてもよい. -E はepsを出力するオプション.
  3. epsファイルから余分な情報を取り除く.
    今までは上記で

    dvips -D 1200 hogehoge.dvi

    としたあとに

    ps2eps hogehoge.ps hogehoge.eps

    としていたのだが, これで作ったepsファイルはdvipsに対応していない場合がある. すると, arXivなどで投稿するときに, 画像ファイルの数式が出力されないといったおかしなことがおこることがある(日本数学会のアブストラクトで, 不等式やら\Omegaやらが出力されていないものがあったが, その理由はここに起因しているものと思われる). その問題は, 実はps2eps(i)にあったようで, このコマンドでepsを作ったときに, 一部のフォント情報が抜けてしまうらしい(詳しいことはよくわからない). そこで, 上のようにdvipsでepsファイルを作ってから, そのファイルのバウンディングボックスなどを設定することにした(ついでに不必要なプレビュー画像も削除することにした). ghostscriptを使って

    gs -q -sDEVICE=epswrite -sOutputFile=Final.eps -r1200 -dNOPAUSE -dBATCH -dEPSCrop fugafuga.eps

    とする(改行はしていない. 一行で記述する). windowsの場合はgswin32とかかもしれない. 細かいオプションについて調べてはいないが, たぶん -q はメッセージを出さない(quiet), epswriteはepsを出力するということ, OutputFileは出力ファイル名, -r1200は解像度を1200dpiとすること, -dNOPAUSEはエラーでストップしない, -dBATCH はよくわからない, -dEPSCrop はバウンディングボックスをオートで設定するということだと思う.
  4. 必要に応じて, バウンディングボックスを修正する.

    今回, 自分がやったときはうまくいったが, バウンディングボックスがうまく設定されていないときは, epsファイルをノートパッドなどで開いて, バウンディングボックスの数値を変更する. これは「eps bounding box 修正」とgoogle検索すればあれこれ情報があるはず.

なお, この方法でepsを作ると, プレビューで見たときに数式の部分などがジャギーになっていて綺麗に見えないかもしれないが, これはこれで正常である. texに取り込ませてみると, 綺麗に出力されているようなので問題はないようである.