7.1 フレームの分割

同じ様な図形を沢山並べたい時, gropn のあとで sldivルーチン を呼ぶと, 第1レベルめ(用紙全体)のフレームが分割され, 次のレベルのフレー ムが定義されます. 分割されたフレームをあたかも1枚の紙のように扱って, grfrm の実行により, 次のフレームに自動的に移っていきます.

次のプログラム lay1 では, do 20 のループの中で, 普通に改 ページをしながら描画するのと同じように, grfrmusgrph を 呼んで折れ線グラフを描いています. 21行めの sldiv ルーチンでは 3×2=6分割していますから, 7番めの図は自動的に次のページに移って います. また, 第5.2節の出力結果と比較して, 文字の大きさが 分割されたフレームの大きさに応じて小さくなっていることにも注意して下さ い.

# lay1.rb

require "narray"
require "numru/dcl"

include NumRu
include Math

nmax = 401
jmax = 51

y = NArray.sfloat(nmax)

#-- data ----
y0 = 0.5
for n in 0..nmax-1
  y[n] = 5.0*y0 + 10.0
  y0 = 3.7*y0*(1.0-y0)
end

rundef = DCL::glrget('RUNDEF')

#-- graph ----
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::gropn iws
DCL::sldiv('Y', 3, 2)

for i in 1..8

  DCL::grfrm

  j = (i-1)*(jmax-1)
  xmin = j + 1600.0
  xmax = xmin + jmax - 1

  DCL::grswnd(xmin, xmax, rundef, rundef)
  DCL::ussttl('TIME', 'YEAR', 'TEMPERATURE', 'DEG')
  DCL::usgrph(rundef, y[j..j+jmax-1])

end

DCL::grcls

 
program lay1

\resizebox{10cm}{!}{\includegraphics{layout/lay1_001.eps}}
lay1.rb: page1

\resizebox{10cm}{!}{\includegraphics{layout/lay1_002.eps}}
lay1.rb: page2