22.2 文字列変数のマクロ置換 (Substitution macros)

コマンドラインのマクロ置換はデフォルトでは無効になっていますが、 set macros で有効にできます。マクロ置換が有効である場合、文字 @ は、 コマンドライン上でその文字列変数の値への置換を行なうのに使われます。文 字列変数の値としての文は、複数の単語からなることも可能です。これにより 文字列変数をコマンドラインマクロとして使うことが可能になります。この機 能により展開できるのは文字列定数のみで、文字列を値に取る数式を使うこと はできません。 例:


     set macros
     style1 = "lines lt 4 lw 2"
     style2 = "points lt 3 pt 5 ps 2"
     range1 = "using 1:3"
     range2 = "using 1:5"
     plot "foo" @range1 with @style1, "bar" @range2 with @style2

この @ 記号を含む行は、その入力時に展開され、それが実際に実行されると きには次のように全部打ち込んだ場合と同じことになります。


     plot "foo" using 1:3 with lines lt 4 lw 2, \
          "bar" using 1:5 with points lt 3 pt 5 ps 2

関数 exists() はマクロの評価に関して有用でしょう。以下の例は、C が安全にユーザ定義変数の名前に展開できるかどうかをチェックします。


     C = "pi"
     if (exists(C)) print C," = ", @C

マクロの展開は、単一引用符内、または二重引用符内では行なわれませんが、 バッククォート内ではマクロ展開されます。

マクロの展開は、gnuplot が新しいコマンド行を見たときに非常に早い段階で gnuplot が処理し、そしてただ一度だけそれを行います。よって、


    A = "c=1"
    @A

のようなコードは正しく実行しますが、以下のような行はだめです。それは、 マクロの定義が同じ行にあるため展開に間に合わないからです。


    A = "c=1"; @A   # will not expand to c=1

コマンドを完成させて実行するには、コマンド evaluate も有用でしょう。

竹野茂治@新潟工科大学
2013年10月16日