5.2 マージンに文字列を書く

沢山の図を出力すると, いつ, どのプログラムで描いた, 何の図だったのかわ からなくなってしまいます. そんな時, SLPACK の機能を使って, タイトル, その図を出力したプログラム名, 使用したデータ名等々をマージンに書き込ん でおくと, あとの整理が楽になります.

# lay2.rb


require "narray"
require "numru/dcl"
include NumRu
include Math


#-- graph ---
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::sgopn iws

DCL::slmgn(0.1, 0.1, 0.1, 0.1)
DCL::slsttl( 'FIGURE TITLE',  'T', 0.0, 0.0, 0.03, 1)
DCL::slsttl( 'PROGRAM.NAME',  'B', -1.0, 1.0, 0.02, 2)
DCL::slsttl( '#DATE #TIME',   'B', 0.0, 0.0, 0.02, 3)
DCL::slsttl( 'page:#PAGE',    'B', 1.0, -1.0, 0.02, 4)

DCL::sgfrm
DCL::slpvpr(1)
DCL::sgtxv(0.5, 0.5,  'FIGURE' )

DCL::sgcls

program lay2

\resizebox{10cm}{!}{\includegraphics{layout/lay2.eps}}
lay2.rb: frame1

lay2 の例にあるように, タイトルなどを書くには slsttl ルー チンで書きたい文字列を指定しておきます. 文字列は, 最大5つまでの番号を つけて指定し(最後の引数), それぞれの書くべき位置を設定します. この番号 を指定することで, 例えば右下の文字列だけをページごとに変える, というこ とが可能になります. その場合には, slsttlsgfrmを呼んだ あとにも呼ぶことになります. 位置の設定ですが, 第2番めの引数で 'T' (トップマージン)または 'B'(ボトムマージン)を指定し, 第3番め と第4番めの引数で, マージン内における文字列の位置を -1.0(左寄せまた は下寄せ)から+1.0(右寄せまたは上寄せ)までの実数値で指定します. 0.0とす ると中央合わせになります. 第5番めの引数は文字の高さです.

slsttlルーチンでタイトル等を書くときには, そのためにあらかじめ第 1レベルのマージンをとっておく必要があります. この時, 文字列が書かれる のは, フレームの分割の有無に関わらず, 第1レベルのマージンに対してだけ です. ここで注意すべきことは, マージンは各レベルごとの最大作画領域に 対する比率で指定されるのに対して,文字の大きさの単位は第1レベルにおける 最大作画領域の長辺を1とするような単位となることです.たとえば,ここで 描いたタイトルと次の作画例におけるタイトルでは文字の高さの単位が違うこ とに注意しましょう.

なお, 12・13行めで用いたように, #date, #time, #pageという予約変数があって, それぞれ, 日付, 時刻, ページ数にあたる 文字列に置き換えられます.