Gnuplot 4.2 (4.x?) の PostScript ターミナルで半角英数字部分および半角記号部分のフォントを Helvetica にしたい

問題点

Gnuplot 4.2 (4.x?) では PostScript ターミナルを利用して EPS ファイルを出力する際に PostScript フォントを指定できます。日本語を出力したい場合は GothicBBB-Medium-EUC-H (EUC の場合) を指定することで日本語がゴシック体で出力されます。しかしながら、部分的にフォントを変更することができないため、半角英数字および半角記号も GothicBBB で表示されてしまいます。できれば、半角英数字および記号部分は Helvetica で表示したい処です。

フォント変更スクリプト

私は PostScript ターミナルのパッチを書く力がありません。そこで、英数字および半角記号部分だけを Helvetica で表示するように変更するスクリプト (awk) を書いてみました(一部ゴミが入っています)。

スクリプト: conv.awk

/\[\(GothicBBB/{
  if ($1 == "[")
    {
      #print $1,$2,$3,$4,$5,$6,$7;
      printf ( "[ " );
      prefix_ja=$2 " " $3 " " $4 " " $5 " " $6 " " $7;
      str=$8;
      for (i=9; i<=NF; ++i) str=str " " $(i);
    }
  else
    {
      #print $1,$2,$3,$4,$5,$6;
      prefix_ja=$1 " " $2 " " $3 " " $4 " " $5 " " $6;
      str=$7;
      for (i=8; i<=NF; ++i) str=str " " $(i);
    }
  prefix_en = prefix_ja;
  sub(/GothicBBB-Medium-EUC-H/, "Helvetica", prefix_en);
  #print prefix_en;
  sub(/^\(/, "", str);
  sub(/\)]$/, "", str);
  #printf ("%s\n", str);
  while (length(str)>0)
    {
      match( str, "([a-zA-Z0-9:;=.\\-+*/%&$#\\]\\[\\)\\(\\ \\\\])+" );
      if ((RSTART == 0) && (RLENGTH == -1))
        {
          printf ("%s (%s)]\n", prefix_ja, str);
          break;
        }
      str_left_abc  = substr(str, 1, RSTART-1) ;
      str_abc       = substr(str, RSTART, RLENGTH) ;
      str_right_abc = substr(str, RSTART+RLENGTH) ;
      #printf ( "%d, %d: %s, %s, %s:string\n", RSTART, RLENGTH, str_left_abc, str_abc, str_right_abc ) ;
      if (length(str_left_abc)>0)
          printf ("%s (%s)]\n", prefix_ja, str_left_abc);
      if (length(str_abc)>0)
          printf ("%s (%s)]\n", prefix_en, str_abc);
      str=str_right_abc;
    }
}
$0!~/\[\(GothicBBB/

使い方

Gnuplot で出力した EPS ファイル hoge.eps を変換するには以下のようにします。

$ awk -f conv.awk < hoge.eps > hoge2.eps

生成された hoge2.eps では、半角英数および半角記号のフォントが Helvetica になっているはずです。ただし、すべての半角記号に対応しているわけではないので、関数 match の正規表現を適宜変更する必要があるかと思います。

サンプル

プロットスクリプト: test.plt

# ヒストグラム
set style histogram rowstacked
set style data histogram
set boxwidth 0.75

set title  '各地の降水量 (1-6月)' font 'GothicBBB-Medium-EUC-H,24'
set xlabel '都市'                font 'GothicBBB-Medium-EUC-H,24'
set ylabel '降水量 [mm]'         font 'GothicBBB-Medium-EUC-H,24'
set xlabel 0,-0.5
set ylabel 1,0

# 凡例
set key out center top horizontal samplen 2 width 0

# 余白
set tmargin 3.8
set lmargin 6.5 # 3桁
set rmargin 1.5
set bmargin 3

# 出力
set terminal postscript eps mono enhanced font 'GothicBBB-Medium-EUC-H,24'
set output 'test.eps'

plot 'test.dat' \
   using ($2):xtic(1) title "1月" lt -1 fs pattern 4, \
'' using ($3)         title "2月" lt -1 fs pattern 0, \
'' using ($4)         title "3月" lt -1 fs pattern 6, \
'' using ($5)         title "4月" lt -1 fs pattern 5, \
'' using ($6)         title "5月" lt -1 fs pattern 1, \
'' using ($7)         title "6月" lt -1 fs pattern 2

データファイル: test.dat (注意: このデータはサンプルです。)

東京 5 5 30 40 50 60
横浜 5 5 20 30 50 60
名古屋 5 5 30 40 60 20
京都 30 20 10 20 30 40
大阪 5 5 10 20 30 40

グラフを生成し、フォントを変更してみます。

$ gnuplot test.plt
$ awk -f conv.awk < test.eps > post.eps

グラフを表示させてみます。(クリックで拡大)

フォント変更前

フォント変更後