12 拡張文字列処理モード (Enhanced text mode)

多くの出力形式が、拡張文字列処理モード (enhanced text mode) をサポート しています。これは、文字列に追加の書式情報を埋めこみます。例えば "x^2" は x の自乗を、通常我々が見る上付きの 2 がついた形で書き出します。この モードは、例えば、"set term png enhanced" のように普通は出力形式を設定 するときに選択しますが、後で "set termoption enhanced" を使ってその機 能を有効/無効にもできますし、"set label 'x_2' noenhanced" のように個々 の文字列に適用することもできます。

拡張文字列制御記号
制御記号 結果 説明
^ a^x ax 上付き文字
_ a_x ax 下付き文字
@ a@^b_{cd} abcd 空ボックス (幅がない)
& d&{space}b d b 指定した長さのスペースを挿入
~ ~a{.8-} $ \tilde{{a}}$ 'a' の上に '-' を、現在のフォントサ
   イズの .8 倍持ち上げた位置に重ね書き

中カッコは一文字が期待される箇所に複数の文字を書く場合に使われます (例 えば 2^{10})。フォント、およびそのサイズを変更するには、以下の形式を使ってください: {/[fontname][=fontsize | *fontscale] text} よって、例えば {/Symbol=20 G} は 20 ポイントのΓ (ガンマ)に、{/*0.75 K} は現在の有 効なフォントサイズの 3/4 の大きさの K になります (文字 '/' は、'{' の 直後の文字でなくてはなりません)。

空ボックス (phantom box) は a@^b_c の上付き文字と下付き文字を揃えると きに有用ですが、文字にアクセント記号を重ねる場合にはうまく働きません。 後者の目的のためには、色々なアクセントやその他のダイアクリティカルマ ークのある多くの文字を持つエンコード (例えば iso_8859_1 や utf8) を使 用する方がいいでしょう。以下参照: set encoding (81.20)。そのボックスはスペー シングが行なわれないので、ボックス内 (つまり @ の後ろ) の上付き文字や 下付き文字を短く出力するのに適しています。

ある文字列と同じ長さのスペースを文字 '&' を使うことで入れることができ ます。すなわち、

       'abc&{def}ghi'

は以下を生成します (abc と ghi の間は 3 文字分の空白):
       'abc   ghi'

文字 '~ ' は、次の文字、またはカッコで囲まれた文字列に、それに続く文字 またはカッコで囲まれた文字列を重ね書きします。2 番目の文字は最初の文字 にあわせて水平方向にセンタリングされます。よって '~ a/' は 'a' を貫くよ うなスラッシュが得られます。2 番目の文字は、その前に数字を置くことで垂 直方向に移動させることができます。その数字は現在のフォントサイズに対す る割合を意味し、それに従って文字が上がったり下がったりします。この場合 数字と文字列は 1 文字より長くなるのでカッコで囲む必要があります。重ね 書きされる文字列が数字から始まっている場合は、垂直にずらす値と文字列と の間にスペースを入れてください ('~ {abc}{.5 000}')。それ以外はスペースは不要です ('~ {abc}{.5 -- }')。一方、あるいは両方のフォントを変更するこ ともできます ('~ a{.5 /*.2 o}'; 'a' その 1/5 の大きさの 'o'、この場合数 字とスラッシュの間のスペースは必要です) が、その文字列が始まった後で変 更することはできません。それぞれの文字列内で、他の特殊な書式を使うこと もできません。もちろん、'~ a{ \ ^}' のように特殊な文字をエスケープするこ と (下記参照) は可能です。

\ 文字コード (8 進数) を指定することで特殊な記号を指定することができま す。例えば、{/Symbol \ 245} は無限大の記号になります。しかし、これは、 UTF-8 のようなマルチバイトエンコードの場合にはうまくいきません。UTF-8 環境では、タイプ入力するかまたは別のやり方であなたが望む文字を選択する ことでマルチバイト列を入力できるようにすべきです。

制御文字は、 \ \ \ { などのように \ を使ってエスケープできます。

しかし、二重引用符内の文字列は単一引用符内の文字列とは異なって解釈され ることを知っておいてください。主な違いは、二重引用符内の文字列ではバッ クスラッシュは 2 つ重ねる必要があることです。

例 (これらは言葉で説明するのは難しいのでとりあえずやってみてください):

     set xlabel 'Time (10^6 {/Symbol m}s)'
     set title '{/Symbol=18 \\362@_{/=9.6 0}^{/=12 x}} \\
                {/Helvetica e^{-{/Symbol m}^2/2} d}{/Symbol m}'

gnuplot ソース配布物内の /docs/psdoc サブディレクトリにあるファイル "ps_guide.ps" に、拡張された書式に関する例が更に載っています。

竹野茂治@新潟工科大学
2012年3月10日