TeX で画像を貼り込む場合,EPS (Encapsulated PostScript) ファイルを利用するのが標準的です. 直接 EPS ファイルを書き出すことができない Windows のアプリケーション (Excel, PowerPoint など)から EPS を作成するためには,PostScript プリンタドライバを使う手があります. 印刷機能を利用して EPS に変換してしまおうというわけですが,単純にやると Bounding Box が正しく設定されないので,GSview の PS to EPS 機能を使うなどして Bounding Box を再設定する必要があります. しかし,これをいちいち手動でやるのはたいへん面倒なので,以下のような手順で自動化しておくと便利です.なお,ここでは Windows 10 を想定していますが,他の Windows でも手順は同様です.W32TeX や TeX Live および Ghostscript がすでにインストールされ,PATH が通っていることを前提とします.
EPS の BoundingBox を自動設定するための準備として,RedMon をインストールします. これは,プリンタドライバの出力を任意のプログラムにリダイレクトするためのものです.
EPS の BoundingBox を自動設定するソフト, ps2eps を使用可能にします. ps2eps 自体は W32TeX や TeX Live に含まれていますが,元々が Perl スクリプトなので,Perl が入っていない場合は Strawberry Perl などの Perl 処理系をインストールしておきます(※TeX Live には tlperl が入っている).
プリンタドライバ経由で EPS を作成するために,PostScript プリンタをインストールします.
「プリンターのプロパティ」から,PostScript オプションで 出力データの形式を EPS に設定します.
作成した RedMon のポート ("RPT1:" など)の設定をして, PS プリンタドライバの出力が ps2eps に引き渡されるようにします. ただし,設定には管理者権限が必要ですので,スタートメニューの「Windows システムツール」→「コマンドプロンプト」を右クリックし,「その他」→「管理者として実行」でコマンドプロンプトを起動したのちに,
rundll32 printui.dll,PrintUIEntry /n "Ghostscript EPS" /pとしてPS プリンタのプロパティ画面を出します(プリンタ名を変えているときは "Ghostscript EPS" の部分を適宜変更). そして,「ポート」→「ポートの構成」で
cmd.exe
/c cd %TEMP% & ps2eps.exe -l -f > "%1"
などと設定すればよいでしょう. また,"Run as User" にもチェックを入れておきます(デフォルトでチェックされている).オプションはお好みで(ps2eps のマニュアルを参照).
新たに設定された PATH などが有効になるよう再起動します.
実際に EPS を作るためには, アプリケーションソフトから上記で設定したプリンタに印刷を行います. このとき,用紙設定が縦 (portrait) になっている必要があります. 横 (landscape) だとうまくいきません. 用紙設定を縦に設定した PowerPoint ファイルや LibreOffice Draw ファイルなどに (一時的に)コピー&ペーストしてもよいでしょう. また,1ページ分だけを印刷する必要があります. あとはダイアログで EPS のファイル名を指定すれば OK です.
このようにすれば,印刷機能を持つほぼすべてのアプリケーションが, EPS 出力対応になります. できた EPS ファイルは,おおむね問題なく graphicx パッケージなどを 使って TeX の文書に取り込めます. ただし includegraphics に clip オプションをつけておかないと, EPS ファイルの余白が思わぬ悪さをする(地の文を隠してしまう) ことがあるので気をつける必要があります. epstopdf などで PDF に変換してから利用するのもよいでしょう(EPS は不要で PDF だけがあればよい場合はこちらを参照).
うまく EPS が作成できない場合は,再び管理者権限でプリンターのプロパティを開き,「ポート」→「ポートの構成」→「Log File」でログファイルを作成するようにすれば,どんなエラーが発生しているかを調べて対策することができます.
<参考>ビットマップ画像ファイルを EPS にする際には,やり方によって EPS のファイルサイズが大きく変わります. あとあとのハンドリングを考えると,できるだけコンパクトな EPS を 作っておくのが得策です.
JPEG にして jpeg2ps を使うのがよいようです.
# jpeg2ps foo.jpg > foo.eps
# magick convert -compress jpeg foo.jpg EPS2:foo.eps
としてもよいでしょう. imgtops も使えるようです.
PostScript3 を使ってもいい場合は, bmeps を使って flate エンコーディングの EPS ファイルを作るのがよいと思います.
# bmeps -p 3 -e f -c foo.png foo.eps
などとします.
PS3 を使いたくないならば, Run Length エンコーディングで
# magick convert -compress RLE foo.png foo.eps
とするのが無難そうです. ただしあまりサイズは小さくなりません (圧縮しないよりははるかにマシですが).
あるいは,UNISYS の特許が切れたようなので,
# imagick convert -compress LZW foo.png EPS2:foo.eps
としてもよいかもしれません.
<参考>