最初のプログラムLAY1 では, Dev.open のあと, Frame.mgnルー チンを呼び, 第1レベルめ(用紙全体)のフレームでマージン(余白部分)をとる ように指定しています. ここで, 引数は,順に左辺, 右辺, 下辺, 上辺のマー ジンで, それぞれの全幅を1とする比率で与えます. 次に, マージンを除いた 部分を Frame.div を用いて横3, 縦2に分割し, 次のレベルのフレームを定 義します. 最初の引数では順に割り付ける方向を指定します. 'Y' なら ば横方向に, 'T' ならば縦方向に割り付けられます. さらに, 分割された第2レベルめのフレームでさらに5%ずつのマージンをとっていま す. Frame.div は2回まで呼ぶことができて, 分割されたフレームをさらに もう一度分割することが可能です.
# # lay1.rb require "narray" require "numru/advanceddcl" include NumRu::AdvancedDCL include NMath #-- graph --- Dev.open Frame.mgn(0.1, 0.1, 0.05, 0.05) Frame.div('Y', 3, 2) Frame.mgn(0.05, 0.05, 0.05, 0.05) for i in 1..12 Frame.new ctxt = format("FRAME%2.2d", i) Text.vdraw(0.5, 0.5, ctxt) Frame.pvpr(1) end Dev.closePROGRAM LAY1
分割された領域は縦横比が1ではありませんが, Frame.newが1:1のフレーム
を設定しています. Frame.rat ルーチンを用いると, 今のレベルのフレーム
すべてについて, 縦横比を指定してフレームが最大内接するようにマージンを
とることができます.
このように分割されたフレームを あたかも1枚の紙のように扱い,
FRame.new の実行により, 次のフレームに自動的に移っていきます. プログ
ラムの for ループの中では, 普通に改ページをしながら描画するのと同
じように, Frame.pvpr を呼んで各フレームのビューポートの枠を描き, そ
の真中にText.vdraw で 'FRAME01', 'FRANE02', などの文字列
を書いています. 第3.1節の出力結果と比較して, 文字の大きさ
が分割されたフレームの大きさに応じて小さくなっていることに注意して下さ
い.
このように, 同じ図形を規則的に並べることは Frame を使うと非常に簡単にできます. しかし, 大きな図形の横に小さな図形を並べるというようなことは, Frame を使うより Fig.viewport で陽にビューポート の設定をした方がよいでしょう.