LoginSignup
1
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-08

この記事ではdebian JessieにインストールしたTeXlive, gnuplotを使っています. tgifについては, debian Stretch からpinning して使っています.

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

ただ, epsファイルに数式を入力したいとなると, 少し面倒な作業が必要になる. 方針としては,

  1. epsファイルをTeXに取り込んで, 文字部分を数式に置き換える(psfragを使う).
  2. dvipsでepsファイルを作成する.
  3. epsファイルから余分な情報を取り除く.
  4. 必要に応じて, バウンディングボックスを修正する.

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

epsファイルをTeXに取り込んで, 文字部分を数式に置き換える

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

gnuplot
set term tgif
set output "hogehoge.obj"

とすればよい.

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

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

mkeps.tex
\usepackage[dvips]{psfrag}

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

mkeps.tex
\psfrag{Omega}{$\Omega$}

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

dvipsでepsファイルを作成する

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

bash
dvips -D 1200 -E mkeps.dvi -o mkeps.eps

この -D 1200 は解像度として1200dpiとすることを表す. 入れても入れなくても大差はないし, もっと大きな値にしてもよい. -E はepsを出力するオプション.

epsファイルから余分な情報を取り除く

今までは上記で

bash
dvips -D 1200 mkeps.dvi 

としたあとに

bash
ps2eps mkeps.ps mkeps.eps 

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

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

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

(必要に応じて)バウンディングボックスを修正する.

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0