gnuplot & eps

dvipdfmxをすると、fontでエラーを吐く場合の対応方法

TexShopで、タイプセットをすると、dvipdfmxで次のエラーを吐いて進まない。

dvipdfmx tmp.dvi
tmp.dvi -> tmp.pdf
[1][2][3][4Error: /typecheck in /findfont
Operand stack:
   Arial
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1967   1   3   %oparray_pop   1966   1   3   %oparray_pop   --nostringval--   1950   1   3   %oparray_pop   1836   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   1919   1   10   %oparray_pop
Dictionary stack:
   --dict:1200/1684(ro)(G)--   --dict:0/20(G)--   --dict:85/200(L)--   --dict:5/8(L)--   --dict:85/200(L)--   --dict:5/8(L)--   --dict:85/200(L)--   --dict:5/8(L)--   --dict:85/200(L)--   --dict:184/256(L)--
Current allocation mode is local
Current file position is 20118
GPL Ghostscript 9.18: Unrecoverable error, exit code 1

dvipdfmx:warning: Filtering file via command -->rungs -q -dNOPAUSE -dBATCH -dEPSCrop -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -sOutputFile='/var/folders/z1/sml48c6n5qz1rc04s3fsck7c0000gn/T//dvipdfm-x.8068844cd047fdb67e64f642c4b7c5ba' './fig1.eps' -c quit
  • gnuplotで出力したepsファイルの処理中に/findfontで失敗していて、Arialが見つからないらしい。
  • osxのユーティリティーのFont Bookで調べると、Arialは/Library/Fontsに存在するので、ghostscriptが見つけられないのが問題。
  • ghostscriptでのフォントパスは、Fontmapファイルに書く。
  • brewでghostscriptを入れている。
  • Fontmapファイルの場所を探す。
$ find /usr/local/share/ghostscript/9.18/  -name "*Fontmap*
/usr/local/share/ghostscript/9.18//Resource/Init/Fontmap
/usr/local/share/ghostscript/9.18//Resource/Init/Fontmap.GS
  • Fontmap.GSに書き方がのっているのでその通りに書く。あるいは、fontパスをそのときどきGS_FONTPATH環境変数に入れると良いらしい。
  • さて、gnuplotでeps出力するときには古い指定の方法で”Arial”とか”Arial-Italic”とフォント指定している。
  • postscript内にも”(Arial)”とか”(Arial-Italic)”フォント指定されている。
  • これだとデフォルトのghostscriptの設定では読んでくれない。そもそもArialはpostscript 1のcore font set に入っていない。PostScript fonts – Wikipedia, the free encyclopedia
  • そのため、サンセリフを使いたいなら Helvetica, Helvetica-Obliqueを使ったほうがよいのではないか。
  • 今回は、epsファイルをvimで開いて、
:%s/Arial/Helvetica/g
:%s/Italic/Oblique/g

と置換して、無事タイプセットが通るようになりました。(Arial, Arial-Italic, Symbolしかフォントを使っていない)

vim quickrun, gnuplotメモ

vimでgnuplotを使う環境を整えるのは面倒である。
emacsのgnuplot-modeのようなことをしたい場合は、そちらを使うことを検討したほうがよい。
環境: mac osx el capitan

  • 日本語で参考になる記事

vimでgnuplotをコンパイルしてepsを表示 | 身の回り
vimでgnuplotをQuickrunするやつを改良させていただく – くれなゐの雑記

  • vimで編集中のソースコードを、コンパイルして結果を分割したウィンドウに表示する、という一連の操作をショートカットキーでできるようにするのがquickrunプラグイン。インストールは、githubのthinca/vim-quickrunでプラグインファイルを拾ってきて、プラグイン用のディレクトリに置けばよい。
  • ディレクトリは、runtimepathと呼ばれていて、vimノーマルモードで :set runtimepathと入力すると、表示される。~/.vim/など。
  • quickrunの実行は、ノーマルモードで :QuickRunとする。ショートカットはrとなっている。
  • というメタキーはデフォルトでは、バックスラッシュ\になっている。ノーマルモードで、:set mapleaderと打ってみて、表示されればそれがである。Undefinedと表示されれば、設定されていないので、デフォルトである。mac日本語キーボードだと、¥キーでは、¥が入力され、option+¥でバックスラッシュが入力される。日本語環境設定で、逆にできる。
  • を設定するには、let mapleader = “\”などと.vimrcに記述しておく。
  • 無名ファイル編集中は、quickrunがfiletypeを認識しないので、:setfiletype pythonなどとする。あるいは、ヘッダをファイルに書いておく。#!/usr/local/bin/env pythonなど。
  • gnuplotはデフォルトではquickrunできない。
  • gnuplotのfiletypeを認識させる設定と、そのfiletypeのときのquickrunの設定をする。
  • 次の内容を書いたファイルを~/.vim/ftdetect/gnuplot.vimに置く。*.pltというファイル名のとき、’gnuplot’ファイルであるとvimが認識する。

au BufRead,BufNewFile *.plt setfiletype gnuplot
  • 次の内容を~/.vimrcに追記。gnuplotファイルの時、quickrunすると、編集中ファイルのディレクトリにcdをしてから、gnuplot を実行してくれる。

"quickrun gnuplot
let g:quickrun_config = {}
let g:quickrun_config['gnuplot'] = {
    \ 'type'    : 'gnuplot',
    \ 'command' : 'gnuplot',
    \ 'exec'    : 'cd %s:h; %c %s',
    \}
  • gnuplotで、x11へプロットする場合は、次のようにpersistオプションを付けると、ウィンドウが閉じられなくてすむ。しかし、プロットするごとにウィンドウが増えてゆく。emacsのgnuplot-modeみたいに、gnuplotを起動したままでないとダメかも。しかし起動したままだとvimに操作が戻ってこないので、quickrunの非同期実行をするなどしないといけないかも。解決方法は不明。

set term x11 persist
  • gnuplotで次のようにすると、epsへ出力したのち、Preview.appで開いてくれるが、Preview.appはepsをpdfへ変換して表示する関係で、epsの内容が更新されても、previewの表示は更新されない。tell activateしても同様。Preview.appの設定では対応できないとの話。

set term postscript enhanced eps
set out "tmp.eps"
rep
set out
!open -g -a Preview.app tmp.eps
  • なので、他のepsビューアを使う必要がある。gvを使う。homebrewならば。

$ brew search gv
$ brew install homebrew/x11/gv
  • gvはファイルを監視するオプション -watchをつけて起動すればok. 起動したら、vim上でquickrunでepsを作るたびに、epsが更新される。

gv -watch tmp.eps

gnuplotのeps出力で、文字を斜体・太字・太字斜体にする方法

ターミナル設定が次のようなとき。

set term postscript enhanced eps color solid

bold italic(太字&斜体)両方適用する

set label "{/Arial-BoldItalic foo}"

Boldだけ適用する。ダブルコーテーション内を次に変更。

{/Arial-Bold foo}

Italicだけ適用。

{/Arial-Italic foo}

Bold Italicじゃなくて、ベクトル記号の矢印を斜体字の上につける。

@^{/Symbol \256}{/Arial-Italic a}

hbarを表示。他に、マイナス記号を別のバー記号にするとかフォントサイズを替えるとかいう方法もあるけれど、どのフォントサイズでも安定した形となる次の方法がよいみたい。

{/Arial-Italic @^-h}

追記

Arialはpostscript 1のcore font set に入っていないため、互換性の点から、現在ではHelvetica(立体)とHelvetica-Oblique(斜体)を使用するのをお勧めしています。例えば、Arialフォントが入っている図を macOSの「プレビュー」アプリケーションで表示すると次の警告メッセージが出ます。

PostScript Conversion Warning
PostScriptファイル“sample.eps”の変換で次の警告がありました:
· Arial not found, using Courier.
· Arial-Italic not found, using Courier.

arial-preview-error

Helveticaは、postscript 1のcore font set に入っており、警告は出ません。

詳しくは、次のeps出力まとめ記事の「フォント」の項を御覧ください。hbarの様々な書き方についても紹介しています。

gnuplot での eps 出力の Tips (2016年版)