|
2.9.12 ボックスの文字列表記
ボックスオブジェクトを文字列でコンパクトに表すこともできる.文字列表記を使うとボックスの仕様をテキスト書式でインポートやエキスポートするのに便利である.
InputFormで記述した上付き文字用ボックスをテキスト書式に変換し出力する.
In[1]:= ToString[SuperscriptBox["x", "2"], InputForm]
Out[1]= 
上付き文字のボックスを作る.
In[2]:= \( x \^ 2 \)
Out[2]= 
ToExpressionを作用させる.ベキ乗として認識されるのが分かる.
In[3]:= ToExpression[%] // FullForm
Out[3]//FullForm= 
単なる表示用ボックスと演算上意味のあるボックスは記述上違うので注意する.
この記述は単に上付き文字として表示するボックスオブジェクトである.
In[4]:= \( x \^ 2 \)
Out[4]= 
こうするとベキ乗を意味するようになる.
In[5]:= \!\( x \^ 2 \)
Out[5]= 
ベキ乗として扱われたか確かめてみる.
In[6]:= FullForm[ \!\( x \^ 2 \) ]
Out[6]//FullForm= 

単なるボックス表示と演算的意味付けの記述上の違い
テキストエディタ等の外部プログラムにStandardFormのセル内容をコピーすると, \!\( ... \)の書式が自動的に使われ式がコピーされる.この書式を使っておけば,ユーザが式を Mathematicaにコピーし直しても,自動的に式をStandardFormで再構築できる. \!を付けておかないと,単なるボックス表示しかしない式になってしまう.
ノートブックに \!\( ... \)の形でペーストした式は通常,二次元的な数学表記で表示される.「編集」(Edit)のメニューコマンド「二次元式の作成」(Make 2D)を使えば,キーボードから入力した \!\( ... \)形の式も数学表記で表示できる.

文章にボックスオブジェクトを組み込む方法
文字列中に起る \( ... \)の形の記述は単なる文字の羅列としか扱われない.これに対して, \!を追加した形なら,記述文はボックスを表すものとして扱われる.ボックスオブジェクトを普通の文章に組み込むにはこの方法を使うとよい.
この記述だと,単なる文字列としか扱ってくれない.
In[7]:= "\( x \^ 2 \)"
Out[7]= 
\!を加えると,文字列がボックスを含むことになる.
In[8]:= "\!\( x \^ 2 \)"
Out[8]= 
文章にボックスを混ぜる.
In[9]:= "box 1: \!\(x\^2\); box 2: \!\(y\^3\)"
Out[9]= 

キーボード入力用短縮記述によるボックスオブジェクトの作成
ボックスオブジェクトの記述は \(と \)でくくっておかなければいけない.その内側になら, \(と \)のペアをいくつも使いネスト形のボックス構造を構成できる.
カッコを使い式の項をまとめる.
In[10]:= \( x \/ (y + z) \) // DisplayForm
Out[10]//DisplayForm= 
カッコを使わないと項のまとめ方が変 わってしまう.
In[11]:= \( x \/ y + z \) // DisplayForm
Out[11]//DisplayForm= 
\(と \)も項のまとめに使うが,表示には現れない.
In[12]:= \( x \/ \(y + z\) \) // DisplayForm
Out[12]//DisplayForm= 
内側にある \(と \)のペアは RowBoxの構成に使っている.
In[13]:= \( x \/ \(y + z\) \)
Out[13]= 
例えば, aa+bbと式を入力すると,カーネルで aa, +, bbの成分に分解される.各成分はシンボルとして扱われる. \( ... \)の記述を使いボックスオブジェクトを入力したときもシンボルの分解が行われる.ボックスの入力では文字列の形でシンボルが与えられ,式の入力では演算的に意味ある成分として与えられる,という点が違う.
入力すると,RowBoxになり aa,+,bbの各文字列に分解する.
In[14]:= \( aa+bb \) // FullForm
Out[14]//FullForm= 
プラス記号の両脇にスペース記号を入れたが,表示にはでない.
In[15]:= \( aa + bb \) // FullForm
Out[15]//FullForm= 
バックスラッシュスペースを用いるとスペースが表示される.
In[16]:= \( aa \ + \ bb \) // FullForm
Out[16]//FullForm= 
ネストした RowBoxオブジェクトを2つ作る.
In[17]:= \( aa+bb/cc \) // FullForm
Out[17]//FullForm= 
スラッシュ記号(/)の後に何も続けなくても,上の例と同じ形のボックスが作られる.
In[18]:= \( aa+bb/ \) // FullForm
Out[18]//FullForm= 
\(と \)の内側で記述すれば, \^と \@のバックスラッシュ記述のボックスを構成できる.他の種類のボックスは, \*に続ける形で標準の Mathematica式として入力しなければいけない.
GridBoxを作る.
In[19]:= \( \*GridBox[{{"a", "b"}, {"c", "d"}}] \) // DisplayForm
Out[19]//DisplayForm= 
StyleBoxを作る.
In[20]:= \( \*StyleBox["text", FontWeight->"Bold"] \) // DisplayForm
Out[20]//DisplayForm= 
\*はエスケープのように振る舞い, \( ... \)の記述中に式を挿入する場合に使う. \*に続ける式の記述の中には,別の \( ... \)の記述を入れても構わない.
\*と \( ... \)の記述を交互に入力しても構わない.引用符は \( ... \)記述の外に出しておく.
In[21]:= \( x + \*GridBox[{{"a", "b"}, {\(c \^ 2\), \(d \/ \*GridBox[{{"x","y"},{"x","y"}}] \)}}] \) // DisplayForm
Out[21]//DisplayForm= 
ノートブック用フロントエンドを使っている場合, \*の記述法を使う代りに, * か  8 のキー操作でダイアログボックスを呼び出し,そこからボックスを構成してもよい.

表記法に依存した記述の解釈
セルがStandardFormになっていれば,乗積として解釈される.
In[22]:= \!\( c(1+x) \)
Out[22]= 
TraditionalFormとして式を解釈するよう特別に指定する.
In[23]:= \!\(TraditionalForm\` c(1+x) \)
Out[23]= 
テキストエディタ等の外部プログラムへセルの内容をコピーすると, \`はコピー内容には含まれない.ただし,別の種類のセルから式をペーストする際は, \`を加えておかないと正確な解釈が行われなくなってしまう.
|