gnuplot で pdf が出力されない時: 最後にunset outputを指定する

2017年8月16日

gnuplot で pdf が出力されないときは unset output (unset terminalでも良い)などを指定すると上手くいくことがあります。

LaTeXで使うならepsよりもpdf

dvipdfmxでpdfにすることが多いですが、そのときは図面をeps ファイルにして埋め込むよりも、pdf ファイルにして埋め込む方が速いようです。

gnuplot でも pdf に出力できますが、少し注意する点があります。

複数ページをサポートするformatの場合はページの終わりを指示する必要がある

特に対話モードの場合に注意が必要です。

gnuplot FAQ 7.6 My output files are incomplete!という項目があります。 要点としてはpdfのように複数ページをサポートするformatの場合は、ページの終わりを指示しないと出力ファイルがクローズされません。

ですからunset outputして初めてpdfが出力されます。

epsやpng、emfのようにいつでも1ページのformatでは、このような問題は生じません。

具体的にページの終わりを指示するには

unset output
あるいは
set output
を最後に入力します(set outputの場合は出力ファイルを指定せずに、空ままにしておきます)。

または

unset terminal
set terminal pop

でもOKです。

set terminal pop はデフォルトのterminalに復帰させるコマンドです。

Emacsのgnuplot-modeは、対話モードで起動されているプロセスバッファに対して、バッファの内容を1行ずつ流し込んでいるため、明示的にページの終わりを知らせる必要があります。(別のgnuplot modeもありますが、この場合はファイルをbatch modeでgnuplot に渡しているため、”unset output”が無くても正しいpdf が生成されます。)

pdf で出力するには terminal は pdfcairo を指定する

pdf でグラフを出力するには terminalに pdfcairo を指定します。以下は一例です:

set terminal pdfcairo color enhanced font "Helvetica,18"
set output "pdf-test.pdf"

set xlabel 'xlable' font "Helvetica,18"
set ylabel 'ylable' font "Helvetica,18"
set tics font "Helvetica,18"
set xrange [:]
set yrange [:]
plot sin(x) title "" with lines \
     lc rgb hsv2rgb(0, 1, 1) lt 1

set terminal pop

(おまけ) eps からpdfを生成するには

gnuplot の epsとpdf の出力エンジンは違うようで、結果が微妙に異なることがあるようです。 もしも、epsの出力の結果が好みの場合は次のようにパイプを使えばpdfに出来ます。

set terminal postscript esp enhanced
set output "| epstopdf -f -o=hoge.pdf"

gnuplot

Posted by Gordius