読者です 読者をやめる 読者になる 読者になる

kengo92iの日記

プログラミングとかやったことの記録を書いていきます。

gnuplotでフォント埋め込みした画像の作成方法【gnuplot】

gnuplotでフォント埋め込みした画像の作成方法です.論文などを投稿する場合に画像にフォントが埋め込まれてなくて投稿できないといった状態になることがよくあります.今回はgnuplotで出力した画像にフォントデータを埋め込む方法を紹介します.

実験環境

  1. MacOSX: 10.11.6
  2. gnuplot: 5.1

gnuplotとは?

2次元もしくは3次元のグラフを作成するためのアプリケーションソフトウェアである。インターネットにおいて無料で配布されているフリーウェアである。オープンソースソフトウェアとして公開されており、高機能・高精度であることから、特に学術研究に広く利用されている。gnuplot - Wikipedia

gnuという名前がついてるが,GNUプロジェクトとは関係ないらしい.論文を書く時に非常にお世話になった.グラフを描画するときの必需品です.

gnuplotのインストール

gnuplotがインストールされていない人はインストールしましょう.ここらへんは,先人の知恵を借りる .
Mac OS X El Capitanでgnuplotをソースからビルド・インストール - プログラミングする数学信者

フォント埋め込みの方法

結論から言うと,以下のコードを画像出力前に実行すれば良い.

$ set terminal postscript eps enhanced "NimbusSanL-Regu" fontfile "uhvr8a.pfb" 14

念のためにもうすこし詳しく説明します.

フォントデータを手にいれる

いきなり,"uhvr8a.pfb"とか書かれていて困るという人もいるので,以下のサイトからフォントデータをダウンロードします."uhvr8a.pfb"でGoogle検索しても似たようなページが出てくると思います.埋め込むフォントデータはお好きなものに変更してもらえたらと思います.
uhvr8a.pfb [44648 bytes] - Download Mirrors (1/6)

画像出力してみる

フォントデータを入手したら,カレントディレクトリにでも移動させましょう.テスト用に以下のファイル群を利用してグラフ画像を出力してみます.

Sample
├── data.txt  # 実験データっぽいもの
├── script.plt  # gnuplotのスクリプトファイル
└── uhvr8a.pfb  # フォントデータ

それぞれのファイルの詳細は以下のようになってます.

data.txt

0 12 
1 9
2 8
3 5
4 19
5 28
6 16
7 1
8 11
9 3
10 12
11 19
12 4
13 22
14 28
15 17
16 15
17 17
18 10
19 25
20 18


script.plt

set xlabel "x axis"
set ylabel "y axis"
set grid
plot "data.txt" using 1:2 title "sample" with line lc rgb "red"
set terminal postscript enhanced color
set terminal postscript eps enhanced "NimbusSanL-Regu" fontfile "uhvr8a.pfb" 14
set output "Sample.eps"
replot

フォントが埋め込まれているかの確認

出力した画像データを貼り付けた文章をPDF形式で出力する(今回はTeXを使用).出力したPDFを埋め込みチェッカー or Adobe Acrobat/Adobe Reader で開く.今回は Adobe Acrobat Pro を使用しました.Adobe Acrobat Proの場合は「ファイル」→ 「プロパティ」→ 「フォント」で確認できます.

以下がフォント埋め込み「あり」と「なし」の結果です.

フォント埋め込み「あり」
f:id:kengo92i:20161125220704p:plain

フォント埋め込み「なし」
f:id:kengo92i:20161125220716p:plain

「埋め込みサブセット」というのがついてないとフォントの埋め込みがされてないということです.フォントの埋め込みをしていないPDFは,文字化けが起きたり,正常に表示されないといった状態が起きる可能性があります.学会への論文投稿などのときは画像にフォントを埋め込むようにするのが良いです.