3.3 もっとテキスト

プログラム KIHONB で, ちょっと進んだ文字出力をしてみましょう.

'|', '_', '"'の3文字が添字の制御 に使われるのですが, 何も指定しなければ, これらの文字も他の文字と同様に 文字として出力されます(最初の例). Textのパラメタlcntl.TRUE. にすると, 2番め の例のように, 上付や下付の添字を出力することができます. '|'と '_'は, それぞれ, 上付添え字と下付添え字のモードの始まりをしめす 制御文字で, '"'は上付および下付添え字のモードの終わりをしめす制 御文字です. ここで注意すべきことは, 文字列が添字で終る場合でも, 添字の 後に必ず '"'を入れて通常の文字モードに戻すことです. こうしないと 文字列の長さが正確に求まらないので, センタリングや右よせ等の処理がうま くいきません. また, 添字の大きさや上下の移動量は, それぞれ パラメタ small, shift を指定すること により変更できます(3番め).

巻末付録に示したように SGPACK は2種類のフォントを持っています. SGISET ルーチンで内部変数 'IFONT' を2とすると, フォント番号2の 高品位フォントを出力することができます. 高品位フォントは複数の線を引い て線の太さを調節していますから, SGSTXI ルーチンで文字を描く線の 太さを太くすると空白が潰れてそれらしい文字になります. また, 当然のこ とながら高品位フォントを使うと出力量が増えますから,出力に時間がかかる ようになります.

フォントテーブルを見ればわかるように, 普通のアルファベットだ けでなく, ギリシャ文字や特殊記号のフォントも持っています. プログラムの 50行め以降に示したように, これらのフォント番号をDCL文字関数の1つ Text.spchar で文字コードに変換して, それをテキストとして Text.vdraw メソッド等に渡せば, 出力できます.

    #
# kihonb.rb


require "narray"
require "numru/advanceddcl"
include NumRu::AdvancedDCL
include NMath


nmax = 9
y = NArray.sfloat(nmax)

#-- graph ---
Dev.open

Frame.new

x1 = 0.1
x2 = 0.9
xc = 0.5

#-- 罫線 ----
for n in 1..nmax
  y[n-1] = 0.1*(10-n)
  Plot.vdraw([x1, x2], [y[n-1], y[n-1]])
end

Plot.vdraw([xc, xc],[0.05, 0.95])

#-- デフォルト ----
Text.vdraw(xc, y[0], 'SGTXV|SUP"RST_SUB"')

#-- 添字 ----
Text.lcntl=true
Text.vdraw(xc, y[1], 'SGTXV|SUP"RST_SUB"')

Text.small= 0.5
Text.shift= 0.5
Text.vdraw(xc, y[2], 'SGTXV|SUP"RST_SUB"')

#-- フォント ----
Text.vdraw(xc, y[3], 'ABCDEFG abcdefg')

Text.ifont=2
Text.vdraw(xc, y[4], 'ABCDEFG abcdefg')

Text.vdraw(xc, y[5], 'ABCDEFG abcdefg', "charindex"=>3)

Text.ifont= 1

#-- ギリシャ文字 ----
greek1 = Text.spchar(128) + Text.spchar(129) + Text.spchar(130) + Text.spchar(131) + Text.spchar(132) +
         Text.spchar(133) + Text.spchar(134) + Text.spchar(135) + Text.spchar(136) + Text.spchar(137)
greek2 = Text.spchar(152) + Text.spchar(153) + Text.spchar(154) + Text.spchar(155) + Text.spchar(156) +
         Text.spchar(157) + Text.spchar(158) + Text.spchar(159) + Text.spchar(160) + Text.spchar(161)

Text.vdraw(xc, y[6], greek1)
Text.vdraw(xc, y[7], greek2)

#-- 特殊記号 ----
symbol = Text.spchar(189) + Text.spchar(190) + Text.spchar(191) + Text.spchar(192) + Text.spchar(193) +
         Text.spchar(210) + Text.spchar(211) + Text.spchar(212) + Text.spchar(217) + Text.spchar(218)

Text.vdraw(xc, y[8], symbol)

Dev.close
PROGRAM KIHONB

\resizebox{10cm}{!}{\includegraphics{kihon2/kihonb.eps}}
kihonb.rb: frame1