2013年10月17日木曜日

TeX: pdflatex で eps を取り込む

windows 上の tex で文書に eps ファイルを貼り込んで pdflatex でコンパイルする際,エラーが出て困ったのを解決した事例.

まとめ:
  • eps の図を取り込み指定した tex 文書を pdflatex にかけるとエラーが出て図が取り込まれなかった.
  • そこで,次の処置を行った.
    • perl の処理系(strawberry perl)をインストールし,PATH を確認した.
    • gswin32c にもパスを通した.
  • 上記処置により,pdflatex で eps 図入り tex 文書を正しく処理できるようになった
  • おまけ1,おまけ2 

では行ってみよう.


顛末:

windows 上で日本語が通る tex の処理システム(ディストリビューション)としては,角藤さんのW32TeXというパッケージが大メジャーだろう.筆者もこれを使っている.エディタとしては emacs や WinShell などを時に応じて使っている.文書作成の流れとしては,エディタで作成した tex ファイルを,処理システムで処理(コンパイル)し,最終的に pdf などに出力することになる.tex 文書の最終出力形態を pdf にする場合の方法は複数あって,通常は dvipdfmx を使っていたのだが,先日,pdflatex を使う必要が生じた.

ところが,この pdflatex を使ったら,文書中で貼り込み指定した eps ファイルが取り込めなかったのである.

tex 文書に図を貼り込むには,文書のプリアンブル(\begin{document}の前)に,

\usepackage{graphicx}

などと指定する. 処理に pdflatex を使う場合に eps 形式の図を貼り込むには,さらに

\usepackage{epstopdf}

と追加しておく.pdflatex は様々な形式の図の貼り込みをサポートするが,残念ながら eps を直接サポートしない(参考).そこで,eps を予め pdf (こちらは pdflatex で取り込みサポートされる)に変換してくれるパッケージを使うわけだ.

このように準備して,本文中で

\begin{figure}[htbp]
\begin{center}
\includegraphics[width=50mm]{fig1}
\end{center}
\caption{A very nice figure of something.}
\label{fig1}
\end{figure}

などとすれば,fig1.eps が貼り付けられる‥はずである.


しかし,コンパイルしてみると,次のようなエラーが出てしまった
fig1-eps-converted-to.pdf not found.

epstopdf が準備してくれたはずの pdf が見つからないよ,という話のようだ.このエラーが出る原因はいくつも考えられるらしい.まずはコマンドラインで直接 epstopdf を実行してみると,

C:\my_work_dir>epstopdf
Script interpreter is not found in PATH

というエラーが出る(似たような目にあった人もいるらしい).epstopdf.exe という実行ファイルなのにスクリプトインタプリタを要求するなんてヒドいじゃないか.しかし exe といいつつこいつの実体は perl スクリプトらしいので,perl の処理系を入れてみた.今回は texwiki の情報にしたがって strawberry perl というものを入れてみた.昔は windows 上で perl というと ActivePerl などを入れていたと思う.ともかく,strawberry perl をインストールし,PATH 環境変数設定の反映のためログオフ・ログオンしなおし,コマンドラインから perl が呼び出せることを確認した.そしてもう一度 epstopdf を実行してみると,

C:\my_work_dir>epstopdf
Error: Input filename missing (try --help for more information)

となり,どうやら動いたようだ.しかし,pdflatex で文書をコンパイルすると,まだエラーが出る.
確認のため,epstopdf を直接適用してみると,

C:\my_work_dir>epstopdf fig1.eps
'gswin32c' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
epstopdf ($Id: epstopdf.pl 18319 2010-05-17 16:34:21Z karl $) 2.16
!!! Error: Writing to gswin32c failed, error code 1

というエラーが出ている.gswin32c というのは ghostscript 本体のコマンドライン版だったはず.ghostscript は当然インストール済みなので,手動で gswin32c のディレクトリをパスに追加し,epstopdf fig1.eps すると,今度は動いて fig1.pdf ができた.

最終確認のため,fig1.pdf を消して文書に pdflatex をかけると,ようやく無事に eps 図入りの pdf 文書が出来上がったのだった.

めでたしめでたし.

おまけ1:

図を描いて eps ファイルで出力するには,OpenOffice.org 系の draw が便利だと思う.図を描いて,出力したい部分を選択して,そこだけ(その周囲に boundingbox の設定された)eps として出力できるのがありがたい.PowerPoint では(少なくとも 2010 では)できないはず.

※ OpenOffice.org というのは,要は Microsoft Office みたいなものをフリーのオープンソースで作成・配布しようというプロジェクト.Apache OpenOfficeLibreOffice, IBM の Lotus Symphony など,いろいろ派生版がある.公共機関に導入される例も増えてきた.ただ,OneNote に相当するアプリはないのかな?

さて,ここでは ooo系のひとつ,LibreOffice Draw でやってみよう.図を描いたら,それらを選択し,メニューの「ファイル」→「エクスポート」を選ぶ.
LibreOffice Draw で,図を描き,「ファイル」→「エクスポート」
そして,保存のダイアログボックスで,ファイルの種類を eps にし,チェックボックス「選択範囲」にチェックを付ける.これで,選んだ図形だけが保存される.チェックを付けないと,ページ丸ごと eps になる.
LibreOffice Draw の保存ダイアログボックスで,ファイル形式を eps に,「選択範囲」にチェックを付けた状態.
あとは eps を gsview などで見てにんまりしてもよいし,本記事のように tex に貼り付けて喜んでも良い.もちろん,epsでなくpdfでも出せる.pdflatexを使うなら最初からpdfの方がいいかも.

ちなみに,amazonでOpenOffice.org本を検索すると128件ヒットした.LibreOfficeで検索しても16件も出てるってすごいね. あとの latex もだけど,フリーソフトのディスク付き解説本というジャンルは,ネットが普及しても強いってことだろうか.まあこういう入門書(解説書)+ソフトを買うのはなにか嬉しいし.なんでだろ?挫折する場合もあるけど,よく使うものはほんとボロボロになるまで使って愛着わいてきたり.



おまけ2:

tex の設定絡みのもろもろのトラブルを避けるには,「処理系は固定」というのがカタい.ディスク(CD/DVD)付属の解説本にするのが定法だろう.



例によってamazonでlatex本を検索するとなんと163件ほども出てきた.
昔からの定番というと[改訂第5版] LaTeX2e 美文書作成入門 だろうか.時代に合わせて改訂されつづけているようだ.私が昔購入したころは確かまだディスクも付属せず,LaTeX であって LaTeX2e ではなかったりしたものだ.懐かしい.最初は 16bit 機の dos 上で使ったのだった.
latex本については,TeXWiki にも本の紹介ページがある.amazonでlatex本の精選リストを作ってる人もいるようだ.いい本も大分増えたのだろう.ソフトなんて栄枯盛衰が激しいように思うが,TeX のような一見とっつきにくい理系御用達のシステムに,かくも長年にわたり大量の本が書かれているのはなかなか大したことだ.

0 件のコメント:

コメントを投稿