3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gnuplotでLaTeXコマンドを使いたい! ~epslatexを用いたグラフの作成~

Last updated at Posted at 2021-03-29

はじめに

これは私の初めての投稿になります.見苦しい記事かもしれませんがご了承ください.皆さんからご意見・ご指摘をいただけると幸いです.
LaTeX文書に画像を挿入する際,形式はpdfかepsを多く使うのではないでしょうか.「LaTeXといえばepsなんて考えは古い!」という方も多いでしょう.私もその考えには同意しますがepsが悪だとは思いません.ただ,「思考停止でepsを使い続ける」のは愚かな行為かもしれませんね.

epslatexとは

epslatexはフリーソフトgnuplotの機能のひとつで,LaTeXコマンドを用いてグラフへの数式の入力等が可能になります.
gnuplotで作成したグラフ内で複雑な数式やギリシャ文字,日本語を使いたい人,Computer Modernを使いたい人にはオススメ.
しかし使い勝手は決していいとは言えず,普段gnuplotを使用している人でさらに自由度の高いグラフを作成したい場合なら使用してもよいがgnuplot初心者に向いている機能ではありません.
また,使用環境に大きく左右される可能性があることにも注意する必要があります.
epslatexについて扱ったサイトは既にいくつかありますがQiitaでまとめてあるものは無かった気がするのでこの記事でまとめました.

筆者の使用環境

OS: Windows 11 pro
gnuplot: Version 5.2 patchlevel 8

epslatexを使ってみる

話がややこしくなるので初めに登場人物を紹介しておきます.

  1. sample.plt(自分で作る.gnuplotのスクリプト)
  2. sample.eps(gnuplotが作ってくれる)
  3. sample.tex(gnuplotが作ってくれる)
  4. main.tex(自分で作る.メインのLaTeX文書)
  5. standalone_class.tex(おまけ)

gnuplotスクリプトの作成

sample.plt
#setting
set terminal wxt enhanced
set grid
set key right top

#label
set xlabel '$x$'
set ylabel '$y$'

#title
t1 = '$y=e^{-0.25x}$'
t2 = '$y=-e^{-0.25x}$'
t3 = '$y=e^{-0.25x}\sin x$'

#plot the data
plot \
exp(-0.25*x) title t1,\
-exp(-0.25*x) title t2,\
exp(-0.25*x)*sin(x) title t3

#output epslatex
set terminal epslatex size 12.0cm,8.0cm
set output "sample.tex"
replot

epslatex用のスクリプトでは冒頭に

set terminal wxt enhanced

と記述し,末尾で

set terminal epslatex size 12.0cm,8.0cm
set output "sample.tex"

のように出力するepsファイルの大きさとファイル名を指定します.
ここで生成されるファイルはsample.epssample.texです.
epsファイルはグラフの文字以外の画像情報,texファイルはグラフの文字情報が記述されます.
両ファイルを本文のtexファイル(main.tex)に挿入することによりグラフを表示します.
数式を使いたい箇所は

t1 = '$y=e^{-0.25x}$'
t2 = '$y=-e^{-0.25x}$'
t3 = '$y=e^{-0.25x}\sin x$'

のようにシングルクオーテーションで囲んでその中でLaTeXの数式環境を用います.
ダブルクオーテーションだとバックスラッシュで始まるLaTeXコマンド(\sinとか)をpltスクリプトに入れたとき,生成されるtexファイルでバックスラッシュが抜かれてしまいます(つまり,そのまま使うことができないのでtexファイルを書き換える必要が出てくる.そんなの面倒ですよね).

ちなみに軸を対数にしたければ

set log x
set format x '$10^{%L}$'

のように書くと,epslatex_sample.tex内で軸目盛を数式環境にしてくれます.

ただし,挿入する文字列の中にシングルクオーテーションを含む場合(微分記号等),gnuplotがシングルクオーテーションを命令と解釈してしまうため^\primeを使うか,sample.plt内では別の記号で記述しておき,sample.texの中身でシングルクオーテーションに書き換えるようにします.

一つ大事なことを言っておくと,wxtターミナルで出力されたグラフと最終的にLaTeX文書のpdfファイルに埋め込まれるグラフは全然見た目が違います.
「あれれ?wxtターミナルのグラフおかしいな?どこか間違えたかな?」とか思わずに挿入してみてください.
ちなみに筆者の環境ではこのようにターミナルに出力されました.

wxtターミナル.png

LaTeX文書に挿入

まずは普通に作成.

main.tex
\begin{document}
ほげほげ
\begin{figure}[h]
	\centering
   	\input{sample}
   	\caption{普通に挿入.}
   	\label{fig:sample1}
\end{figure}
ほげほげ
\end{document}

\includegraphicsコマンドではなく\inputコマンドを使い,\input{sample}のように記述していることに注意してください.
また,拡張子をつけてはいけません.ここで挿入しているのはsample.texだからです.
ここでは挿入するtexファイル(sample.tex)の中身は何もいじっていません.
また,gnuplotから生成されたsample.epssample.texはメイン文書のmain.tex
同じディレクトリになければなりません.

こんな風に出力されたら成功です.
とても綺麗ですよね.
これだけでご飯が美味しくなります.

sample1.png

もしグラフ全体の文字の大きさを変えたかったら

main.tex
{\footnotesize \input{sample}}

みたいな感じで変えてみてください.

異なるディレクトリから画像を挿入

LaTeX文書に挿入する画像が増えると画像用のディレクトリを用意することがあると思います.
その場合,texファイル(sample.texmain.tex)を少しいじる必要があります.
今回は./fig以下の画像を挿入することにします.
まずはメイン文書のmain.texで以下のように画像を挿入します.

main.tex
\begin{figure}[h]
	\centering
   	\input{./fig/sample}
   	\caption{異なるディレクトリから挿入.}
   	\label{fig:sample2}
\end{figure}

\input{./fig/sample}のようにディレクトリを変えていることがわかります.
また,./fig/sample.texの後ろから4行目(行数は作成したグラフ,環境によって異なるかもしれないがだいたい最後の辺り)にも注目してみます.

sample.tex
\put(0,0){\includegraphics{./fig/sample}}%

ここに\includegraphicsがあるのでディレクトリを書き加える必要があります(これは手動).
ここで気がついたと思いますが,sample.texは文字情報だけでなく,epsファイル挿入の命令も行っているのです.
したがって,挿入するepsファイルの階層が変わったらsample.texの中身を書き換える必要があるということです.
これを忘れると「ファイルが見つからないよ!」と怒られてしまいます.

sample2.png

当然ですが同じ結果を得られます.

応用

epslatexはLaTeXの機能を使って文字を挿入しています.
ということは複雑な数式は勿論,ギリシャ文字や日本語も挿入できます.

sample3.png

上の図は下記コマンドをsample.texに挿入しました.

sample.tex
\put(6000,1200){\makebox(0,0)[r]{\strut{}{\footnotesize $\displaystyle \lim_{n \to \infty} \sum_{k=1}^{n} \int_{(k-1)\pi}^{k\pi}|e^{-0.25x}\sin x|\mathrm{d}x$を求めよ.}}}%

\displaystyleコマンドを入れないとディスプレイ数式にならないので注意.

sample4.png

別の画像形式で保存

グラフをepsファイルとtexファイルの組み合わせで使用するのではなく,一つの画像ファイル(pdfやpng)として使用したい場合.
「TeX2img」というフリーソフトをオススメします.
これはTeXソースからさまざまな形式の画像を生成してくれるスグレモノです.
つまり,TeX2img用のスクリプトにsample.tex挿入の命令をすればよいというわけです.
おそらくTeX2imgの大部分の利用者は複雑な数式を画像として貼り付けたい場合に使うと思いますが,このような使い方も可能です.
勿論,pdf化してLaTeX文書に再挿入することも可能です.

BoundingBoxについて

ここで述べることは使用するLaTeXの環境に依存するので万人共通ではありません.
epslatexで画像を挿入すると下図のようにepsファイルと文字がズレて表示されることがあります.

sample5.png

epsファイルはベクター画像としてさまざまな情報を含んでいるため,epsファイルをテキストエディタで開くとその情報が出てきます.
sample.epsの最初の方を見てみると次のような記述があるはずです.

%% BoundingBox: 50 50 390 276

epslatexのデフォルトだとBoundingBoxの最初の二つの数字は50 50になっていると思います.
しかし,TeXのバージョンや使用環境によっては50 50だとズレて表示されてしまう場合があります.
この場合,0 025 25に書き換えると解決する可能性が高いです.

やっぱりepsで挿入したくないという人は

先程書いたようにBoundingBoxの関係などもあり,epsで画像を挿入したくない人は多くいると思います.
その場合はTeX2imgでpdf化してから挿入してもいいですし,standaloneクラスを用いて図だけのpdfをLaTeXで作成するのもアリだと思います.

standalone_class.tex
\documentclass{standalone}
\begin{document}
\input{sample}
\end{document}

gnuplot Version5.4について

gnuplot Version5.4でepslatexを使用したところ,仕様が変更されていたようでうまく動作しませんでした.
細かい原因は暇なときに調査しますが,一旦古いバージョンを使うことをオススメします.

参考文献等

  1. 山本昌志,gnuplotの精義[第二版](2013),(ISBN: 978-4-87783-304-6).
  2. gnuplotのepslatexを使ってTeXへちゃんとした数式入りのグラフを挿入する
  3. gnuplotのepslatexターミナルで図がずれる場合の対処法
  4. TeX2img配布サイト
3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?