お知らせ+活動記録+たわごと

HP と Twitter を補完するとともに、互いの密接な連携を図るため、本ブログを開設した。三位一体を目指す。情報提供、広報活動、教育・啓蒙活動の一環として、肩の力を抜き、冗長性を廃し、簡にして要を得た文章を書くよう心がける。
<< March 2017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>
 
MOBILE
qrcode
PROFILE
無料ブログ作成サービス JUGEM
 
Gnuplot で pdfcairo ターミナルを使うための手続き
最近購入した "Gnuplot in Action", 2nd ed. を流し読みしていたとき、
A major breakthrough is the development of a family of terminals that are all based on a single set of contemporary libraries for graphics and text rendering. Because these terminals all share the same back end, you can now create bitmaps (PNG), vector images (PDF), and graphs for interactive viewing (wxWidgets) with consistent appearance across all formats. Gnuplot takes advantage of the cotemporary features of the underlying libraries to produce high-quality graphs through the use of over-sampling, anti-aliasing, and so on.
.....
In the past, gnuplot's support for PDF was relatively weak, particularly in comparison to the very full-featureed PostScript terminal. This situation has now been reversed, and the Cairo-based PDF terminal is probably to be preferred over the classic PostScript terminal.
という指摘(14ページ)が目に付いた。213, 214, 220ページでも 2D グラフィックス・ライブラリー cairo に基づくターミナルに言及している。その的確な現状認識に触発され、RIETAN-FP v2.81 に至るまで長く出力先に指定してきた gnuplot の postscript ターミナルを pdfcairo ターミナルに切り換えようと決意した。グラフの枠と目盛りの線幅を同一にできないという postscript ターミナルの欠陥には我慢がならなかった。古くからあるターミナルだが、未だに枯れきっていないのである。PDF ファイルへの変換に余計な時間がかかるのも気になっていた。pdfcairo なら直接 PDF ファイルが生成する。

以前 pdfcairo の利用を検討した際には、Homebrew を通じて macOS 上で gnuplot と cairo とを連携させる方法が突き止められず、あえなく挫折した。今回は不退転の覚悟で臨み、徹底的に調査した。その結果、習い覚えたノウハウとテクニックを以下に報告する。

macOS 用 gnuplot は、次の手続きに従ってインストールすることを推奨する:
  1. すでに gnuplot をインストール済みだったら、必ずアンインストールする。たとえば Homebrew でインストールした場合は、ターミナルで "brew uninstall gnuplot" と入力してアンインストールする。
  2. 古いバージョンの gnuplot が残っている場合は削除用コマンドが指示されるので、その通り入力する。
  3. Gnuplot の Web サイトの contributed executables for OSX でインストーラー gnuplot-5.0.5-quartz.pkg をダウンロードする。
  4. gnuplot-5.0.5-quartz.pkg をダブルクリックして gnuplot 5.0.5 をインストールする。
  5. Applications フォルダーに gnuplot(実体は Gnuplot.app パッケージ)が生成したことを確認する。
gnuplot をダブルクリックし、"gnuplot> set terminal" と入力すると利用できるターミナルが出力されるが、その中に pdfcairo, epscairo, pngcairo, wxt といった cairo と pango ライブラリーを使うターミナルも含まれている。

readme.text に明記されているように、こうしてインストールした gnuplot は cairo に加え多言語テキスト配置・レンダリング用ライブラリー pango も包含しており、pdfcairo を出力先とする RIETAN-FP v2.82 以降と互換性がある。macOS 版 RIETAN-FP の出力する hoge.plt における文字のシフトやマージンはこの gnuplot 用に最適化されている。シェルスクリプト中では
/Applications/Gnuplot.app/Contents/Resources/bin/gnuplot-run.sh
を gnuplot コマンドとして使えばよい。gnuplot-run.sh 中で11個の環境変数が定義された後、同じフォルダー内の(環境変数を設定できない)実行形式ファイル gnuplot が起動する。/usr/local/bin/gnuplot が存在しなければ、起動可能な /usr/local/bin/gnuplot が置かれるが、以前インストールした gnuplot が残っていると、それが実行されてしまう。したがって絶対パス付きの gnuplot-run.sh を実行する方が安全・確実である。Gnuplot スクリプトファイル *.plt は cat コマンドでテキストデータに変えた後、パイプを通じて gnuplot-run.sh に渡すか、gnuplot-run.sh の引数にすればよい。

Windows 用インストーラーは SourceForge からダウンロードできる。Windows 用 RIETAN-FP・VENUS システムに同梱している gnuplot は、インストーラーの実行によって生成した gnuplot フォルダーを RIETAN_VENUS フォルダーの下にコピーしたものに他ならない。ありがたいことに、その gnuplot では cairo + pango、ひいては pdfcairo が標準で使える。ただし、fontscale と offset の最適値は macOS 用と微妙に異なる。

出力先として pdfcairo を指定したとき、gnuplot スクリプトファイル中でギリシャ文字や記号などをどのように記述すればいいのかについては、"Gnuplot in Action" の10.2.3を参照されたい。RIETAN-FP v2.82 以降が出力する *.plt も恰好の手本となる。その際の手間を減らすために、RIETAN-FP・VENUS システムのマクロが出力する *.plt ファイル中の8進コード(\+3桁の8進数の繰り返し)を以下に列挙しておく:
\316\261: α
\316\262: β
\316\270: θ
\316\273: λ
\316\274: μ
\302\260: ° (度)
\303\205: Å
\342\210\222: −(マイナス; UNICODE: U+2212)
\342\200\262: ′ (プライム)
\342\200\262: ̋ (ダブルプライム)
特定文字の8進コードを知るには、二つの Web ページ「UTF8エンコードをデコードする」「文字コード変換」で変換するとよい。その際には「Unicode 対応 文字コード表」も役立つ。イタリックの書体にするには、たとえば θ の場合 "{/:Italic \316\270}" と入力する。

一般にグラフ中のラベルや数値には sans-serif 系のフォントが適している。terminal pdfcairo のデフォールトは sans である。"Gnuplot in Action" の215ページには
If a sans-serif font is selected as the default font for a terminal, then the font subsystem will attempt to find sans-serif glyphs for all requested characters even for special symbols.
と書かれている。実際、デフォールト・フォントのまま8進コードを書くと、ギリシャ文字なども sans-serif 書体となる。ただし Windows 10 ではたとえば
set terminal pdfcairo ..... font "Arial" fontscale 0.5
というように sans-serif 系フォントを明示するべきである。デフォールトのフォントが斜体のフォントスタイルを含んでいないと、標準文字が出力されてしまうためだ。C:¥Windows¥Fonts フォルダー内の Arial を見ればわかるように、標準、極太、斜体、太字、太字・斜体の TrueType フォントが使える。Arial を指定した場合もギリシャ文字などが sans-serif 書体で出力されることに変わりはない。なお、fontscale のデフォールトは0.5だが、これの変更により実質的なフォント・サイズを一挙に変えられる。

イタリックでない文字は、たとえば
{/Symbol \260}: ° (度)
{/Symbol \242}: ′ (プライム)
というように PostScript 文字コードを書いてもよい。ただし sans-serif 書体にはならない。

上述の8進コードや PostScript 文字コード (Symbol) は macOS、Windows を問わずに通用する。Unicode のテキストファイルを出力できない高級言語でビルドしたプログラムで gnuplot スクリプトファイルを出力する場合に役立つ。一方、テキストエディターでスクリプトファイルを編集するのであれば、「RIETAN vs. Z-Rietveld」に例示したように "set encoding utf8" という行を挿入し、それ以降にギリシャ文字、記号、かな漢字などを直接書いて、UTF-8エンコーディングでファイルを保存する方がはるかに楽だ。

Gnuplot 5.0.4以前の pdfcairo には major tics(主目盛)に対する数値が負のとき、数字の前にマイナスでなくハイフンが付いてしまうという欠陥があった。Gnuplot 5.0.5からは "set minussign" コマンドによりハイフンでなくマイナス (UNICODE: U+2212) を出力できるようになった。ただし、UTF-8 エンコーディングを有効にするために "set encoding utf8" と宣言せねばならない。すなわち Shift_JIS エンコーティングでは無効である。

ターミナル pdfcairo はフォントを指定しなければ、英数字はもとよりギリシャ文字や記号などもグラフに最適の sans-serif 書体に統一して出力するという利点を持つ。terminal pdfcairo には crop オプションがなく、pdfcairo へのグラフ出力ではデフォールトで余白が切り取られることも、利便性の高さと処理時間の短縮に寄与する。タイトルやラベルの一部が隠れてしまうようだったら、
set margins <left>, <right>, <bottom>, <top>
という命令で余白を微調整すればよい。負の値だと gnuplot が決めたマージンが使われる。

ターミナル pdfcairo への出力で得られた PDF ファイルは LaTeX, Microsoft Word, Keynote などの文書に直接挿入できる。今後は pdfcairo をフル活用していく。

なお、"Gnuplot in Action" 中の一節(213〜214ページ)、
Because an entire family of terminals(注: pngcairo, pdfcairo, epscairo, wxt のこと)shares a common back end, it's now possible to generate bitmap (PNG), vector (PDF and EPS), and interactive (wxWidgets) versions of the same graph, with only minor differences between them.
では cairo・pango ライブラリーを使うターミナルの互換性の高さが強調されているが、そう簡単にターミナルを変更できる訳ではない。グラフの見かけ、とりわけラベルや数値の offset を最適化するには、十分時間をかけて試行錯誤する必要がある。
コメント
コメントする









 

(C) 2017 ブログ JUGEM Some Rights Reserved.