|
2.9.10 ボックス形テキスト表記
テキスト表記の式は,究極的にすべてボックスの集合として表せる.ボックスとは二次元的に相対配置されるオブジェクトを指す.
a + bの式を表すボックスである.
In[1]:= ToBoxes[a + b]
Out[1]= 
DisplayFormを作用させ,ボックスがどう表示されるか見てみる.
In[2]:= DisplayForm[%]
Out[2]//DisplayForm= 

ボックスの表示
3つの文字を1行に並べる.
In[3]:= RowBox[{"a", "+", "b"}] // DisplayForm
Out[3]//DisplayForm= 
2番目の文字を下付き文字として表示 する.
In[4]:= SubscriptBox["a", "i"] // DisplayForm
Out[4]//DisplayForm= 
下付き文字ボックスを2つ横に並べる.
In[5]:= RowBox[{SubscriptBox["a", "1"], SubscriptBox["b", "2"]}] // DisplayForm
Out[5]//DisplayForm= 

基本的なボックス
根号の中に分数を入れるためボックスをネストさせる.
In[6]:= RadicalBox[FractionBox[x, y], n] // DisplayForm
Out[6]//DisplayForm= 
文字書式ボックスを組み合せ,上付き文字を下付き文字の後に付ける.
In[7]:= SuperscriptBox[SubscriptBox[a, b], c] // DisplayForm
Out[7]//DisplayForm= 
1つのボックスで,上付き文字と下付き文字を一括で作る.
In[8]:= SubsuperscriptBox[a, b, c] // DisplayForm
Out[8]//DisplayForm= 

罫線
分数の周囲に罫線を引く.
In[9]:= FrameBox[FractionBox["x", "y"]] // DisplayForm
Out[9]//DisplayForm= 
配列の列と列の間,そして,行と行の間に罫線を引く.
In[10]:= GridBox[Table[i+j, {i, 3}, {j, 3}], RowLines->True, ColumnLines->True] // DisplayForm
Out[10]//DisplayForm= 
その周りにも罫線を引く.
In[11]:= FrameBox[%] // DisplayForm
Out[11]//DisplayForm= 

ボックスの書式変更
StyleBoxの条件設定の仕方は StyleFormと同じである.両者の違いは動作にある. StyleFormが式のオプションとして働くのに対し,StyleBoxはボックスの構造を表す.
文字列「名前」のフォントサイズを6にする.
In[12]:= StyleBox["名前", FontSize->"6"] // DisplayForm
Out[12]//DisplayForm= 
今度は,文字列を現在のノートブックに登録されている見出し用スタイルで表示させる.
In[13]:= StyleBox["名前", "Section"] // DisplayForm
Out[13]//DisplayForm= 
見出し用スタイルを使うが,文字は灰色で表示させる.
In[14]:= StyleBox["名前", "Section", FontColor->GrayLevel[0.5]] // DisplayForm
Out[14]//DisplayForm= 
ノートブック用フロントエンドを使っている場合,スタイルや表示書式はメニューを介して直接変更できる.それでも内部では,書式変更があるたびに StyleBoxのオブジェクトが挿入される.

ボックスの解釈
表示は になる.
In[15]:= SuperscriptBox["x", "2"] // DisplayForm
Out[15]//DisplayForm= 
式に変換すると,ベキとして解釈される.
In[16]:= ToExpression[%] // InputForm
Out[16]//InputForm= x^2
また,表示が になる.
In[17]:= InterpretationBox[SuperscriptBox["x", "2"], vec[x, 2]] // DisplayForm
Out[17]//DisplayForm= 
ただし,今度は InterpretationBoxの指定があるため, vec[x, 2]として扱われる.
In[18]:= ToExpression[%] // InputForm
Out[18]//InputForm= vec[x, 2]
InterpretationBoxにあるボックスを編集してしまうと,解釈用情報が不正になってしまうかもしれない.これを防ぐために InterpretationBoxオブジェクトの選択や編集を制限するオプションが各種用意されている.

InterpretationBoxと関連するボックスのオプション
TagBoxを使うと,ボックスの内容を解釈しやすくする情報を付加しておくことが可能である.例えば,ボックスに対応する式の頭部を tagという関数にするには, TagBox[boxes, tag]と指定する.オブジェクトを編集しても,それが引数だけなら,オブジェクトと関数の関連付けは残るので引き続き的確な解釈ができる.ボックスを編集可能にしておくため, Editable->Trueのデフォルトの条件が TagBoxに与えられている.
各種の規則がボックスの内容に適用され,式の解釈が行われる.規則の適用において,通常, StyleBoxオブジェクト等の書式指定は無視される.このため, StripWrapperBoxes->Falseの条件があらかじめ設定していなければ,例えば,文字色が赤でも xなら文字色が黒の普通の xと同じにみなされてしまう.
文字色が赤でも, xは通常,普通の黒の xと同じに扱われる.
In[19]:= ToExpression[ StyleBox[x, FontColor->RGBColor[1,0,0]]] == x
Out[19]= 

アクティブなボックス
ノートブックでは,特定要素がクリックされると,あるアクションが開始するように文書を設定しておける.要素とアクションの関連付けは ButtonBoxを使う. ButtonBoxオブジェクトがアクティブな状態にないという条件 Active->Trueが設定されていれば,オブジェクトの内容を直接編集できるので,必要なアクションを記述する.そして, Activeの設定を Trueに変え,オブジェクトがクリックされたらこのアクションを実行するようにしておく.
アクションをどう ButtonBoxオブジェクトへ割り付けるかは2.11.6を参照のこと.
|