# 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::sgclsprogram lay2
lay2 の例にあるように, タイトルなどを書くには slsttl ルー
チンで書きたい文字列を指定しておきます. 文字列は, 最大5つまでの番号を
つけて指定し(最後の引数), それぞれの書くべき位置を設定します. この番号
を指定することで, 例えば右下の文字列だけをページごとに変える, というこ
とが可能になります. その場合には, slsttl をsgfrmを呼んだ
あとにも呼ぶことになります. 位置の設定ですが, 第2番めの引数で 'T' (トップマージン)または 'B'(ボトムマージン)を指定し, 第3番め
と第4番めの引数で, マージン内における文字列の位置を -1.0(左寄せまた
は下寄せ)から+1.0(右寄せまたは上寄せ)までの実数値で指定します. 0.0とす
ると中央合わせになります. 第5番めの引数は文字の高さです.
slsttlルーチンでタイトル等を書くときには, そのためにあらかじめ第
1レベルのマージンをとっておく必要があります. この時, 文字列が書かれる
のは, フレームの分割の有無に関わらず, 第1レベルのマージンに対してだけ
です. ここで注意すべきことは, マージンは各レベルごとの最大作画領域に
対する比率で指定されるのに対して,文字の大きさの単位は第1レベルにおける
最大作画領域の長辺を1とするような単位となることです.たとえば,ここで
描いたタイトルと次の作画例におけるタイトルでは文字の高さの単位が違うこ
とに注意しましょう.
なお, 12・13行めで用いたように, #date, #time, #pageという予約変数があって, それぞれ, 日付, 時刻, ページ数にあたる 文字列に置き換えられます.