いちからはじめる GMT その10 - pstext

2008年 12月 1日 掲載


psxyコマンドには,まだまだたくさんの機能があるのだが, たまには違うコマンドもためしてみたい. ということで,今回あつかうのは pstextコマンドである.


pstext は,文字(text)を描画するコマンドである. さっそくためしてみよう.まずは,コマンドを単独で実行してみる.

$ pstext
pstext 4.2.1 - To plot text on maps

usage: pstext <txtfile> -J<params> -R<west>/<east>/<south>/<north>[/<zmin/zmax>][r]
	[-A] [-B<params>] [-C<dx>/<dy>] [-D[j]<dx>/<dy>[v[<pen>]] [-Eaz/el] [-G<color>]
	[-H[<nrec>]] [-K] [-L] [-M[<flag>]] [-N] [-O] [-P] [-S<pen>] [-U[/<dx>/<dy>][<label>]]
	[-V] [-W[<fill>,][o|O|c|C[<pen>]]] [-X[a|c|r]<x_shift>[u]] [-X[a|c|r]<x_shift>[u]]
	[-Z<zlevel>] [-:[i|o]] [-c<ncopies>]

	Reads (x,y,size,angle,fontno,justify,text) from <txtfile> [or stdin]
	OR (with -M) one or more text paragraphs with formatting info in the segment header.
	justify is of the form [T|M|B][L|C|R] (top/middle/bottom/left/center/right)
	Built-in escape sequences:
	   @~ toggles between current font and Symbol font
	   @%<no>% switches to font number <no>; @%% resets font
…

標準エラー出力に使い方がずらっと出てくる. 最初の方に <txtfile>(または標準入力)から, x, y, size, angle, fontno, justify, text を読むとある. これまでの psxyコマンドでは,せいぜい 3項目しかデータがなかったから, ずいぶん多く感じる.これをひとつずつ見ていこう.

x, y は,描画する位置座標である.これは psxy と変わらない.

size は文字のサイズだが,単位は何だろう. これは man(man pstext)にポイントで指定すると書いてある.

angle は描画する角度だが,これの説明も man に書いてあり, x方向から反時計回りの「度(degrees)」で指定する.

fontno はフォントの番号である.これは pstext の man を読むと, gmtdefaults の man を読むか,pstext -L を実行せよ,と書いてある. 今回は pstext -L を実行してみる.

pstext 4.2.1 - To plot text on maps

usage: pstext <txtfile> -J<params> -R<west>/<east>/<south>/<north>[/<zmin/zmax>][r]

…

	Font #	Font Name
	------------------------------------
	  0	Helvetica
	  1	Helvetica-Bold
	  2	Helvetica-Oblique
	  3	Helvetica-BoldOblique
	  4	Times-Roman
	  5	Times-Bold
	  6	Times-Italic
	  7	Times-BoldItalic
	  8	Courier
	  9	Courier-Bold
	 10	Courier-Oblique
	 11	Courier-BoldOblique
	 12	Symbol
	 13	AvantGarde-Book
	 14	AvantGarde-BookOblique
	 15	AvantGarde-Demi
	 16	AvantGarde-DemiOblique
	 17	Bookman-Demi
	 18	Bookman-DemiItalic
	 19	Bookman-Light
	 20	Bookman-LightItalic
	 21	Helvetica-Narrow
	 22	Helvetica-Narrow-Bold
	 23	Helvetica-Narrow-Oblique
	 24	Helvetica-Narrow-BoldOblique
	 25	NewCenturySchlbk-Roman
	 26	NewCenturySchlbk-Italic
	 27	NewCenturySchlbk-Bold
	 28	NewCenturySchlbk-BoldItalic
	 29	Palatino-Roman
	 30	Palatino-Italic
	 31	Palatino-Bold
	 32	Palatino-BoldItalic
	 33	ZapfChancery-MediumItalic
	 34	ZapfDingbats

簡単な使い方のあとに,使えるフォントと番号の一覧が出てきた. 35種類のフォントが使えるようである.

justify は,位置座標をテキストのどこにするかの指定で, アルファベット 2文字 [T|M|B](top/middle/bottom) と [L|C|R](left/center/right) の組合せで指定するとある. [T|M|B]は,指定した y座標がテキストの上辺(Top)か, まん中(Middle)か,下辺(Bottom)かの指定で, [L|C|R]は,指定した x座標がテキストの左辺(Left)か, まん中(Center)か,右辺(Right)かの指定である.

[TMB][LCR]

text は,描画したい任意のテキスト文である.

パラメータが,ひと通りわかったところで,早速描画をためしてみる. まずは簡単な例から.

$ echo '0 0 32 0 0 MC Hello, world!' | pstext -R-2/2/-2/2 -Jx2 > helloworld.eps

Hello, world!

この例では,データファイルを作らず, echo の出力をパイプで pstext の標準入力にわたしている. 座標 (0, 0)に中心がくるように(MC), Helvetica(0) で,32ポイントの「Hello, world!」を, 水平 (0) に描画した.

次に,justify を変えた場合をためしてみる. まずは,以下のようなファイル justify.txt を作るか, ダウンロードする(justify.txt はこちら).

$ cat justify.txt
 0    0   16 0 0 MC [MC]
 1.4  0   16 0 0 ML [ML]
 1    1   16 0 0 BL [BL]
 0    1.4 16 0 0 BC [BC]
-1    1   16 0 0 BR [BR]
-1.4  0   16 0 0 MR [MR]
-1   -1   16 0 0 TR [TR]
 0   -1.4 16 0 0 TC [TC]
 1   -1   16 0 0 TL [TL]

これを,psxyコマンドと pstextコマンドで描画する.

$ psxy justify.txt -R-2/2/-2/2 -Jx2 -K >  justify.eps
$ pstext justify.txt -R -J          -O >> justify.eps

位置関係をかえた例

中央の点と八角形の頂点が,それぞれ指定した xy座標で, 指定した justify の値をテキストで描画している. xy座標とテキストの位置関係がわかるだろうか.

次は angle を変える例をためす. justify を ML と指定して,左端を (0, 0) に固定し, 60度づつ回転させてみた.

$ awk 'BEGIN{for(i=0; i<360; i+=60) print 0, 0, 16, i, 0, "ML", "--- "i" ---"}' > angle.txt
$ pstext angle.txt -R-2/2/-2/2 -Jx2 > angle.eps

角度をかえた例

fontno を変える例としては,pstext -L の出力を使って, フォントの一覧表を作ってみる. 位置の微調整で試行錯誤をくり返すので,シェルスクリプトを書いた.

#!/bin/sh
pstext -L 2>&1 | tail -35 |\
  awk '{print int($1/18)*12, 17 - $1%18, 16, 0, $1, "ML", $1":"$2}' > font.txt
pstext font.txt -R-1/25/-1/18 -Jx0.8  > font.eps

フォント一覧


[ KDOホームにもどる ] [ いちからはじめる GMT インデックスにもどる ]


(C) 2008 KDO