|
2.9.16 出力書式の定義
入力式の評価法をカスタマイズできるように,出力式の表示書式もカスタマイズできる.カーネルから式が出力される前に書式変更関数 Format[expr]が適用される. Format[expr]にカスタム書式をあらかじめ指定しておけば,式の表示様式を自由に変えれる.具体的には,指定したい書式をボックスオブ ジェクト等で構成し,書式変更関数 Format[expr]に割り付けておく.関数が出力式に適用されると,ボックス形の書式に対応した数学記号等が使われ式がカスタム表示される.
binの要素をグリッドボックスとして表示するよう書式変更関数を定義しておく.
In[1]:= Format[bin[x_, y_]] := MatrixForm[{{x}, {y}}]
数学の二項係数の形で binの項が表示される.
In[2]:= bin[i + j, k]
Out[2]= 
内部表記を見てみると, binの項はそのままになっている.
In[3]:= FullForm[%]
Out[3]//FullForm= 

出力式の書式変更
このように,書式変更関数 Formatを個別に定義しておくことで,特定の式を別の形で表示できる.さらに,特定の要素に対応した書式変換法をプログラムに記述しておき,プログラム全体を書式変更関数に割り付けておけば,より複雑な変換が実現できる.
簡単なプログラムを使い xrepを書式変換するように関数を定義しておく.
In[4]:= Format[xrep[n_]] := StringJoin[Table["x", {n}]]
書式変換されると xrepの各要素が引数に対応した長さの xの文字列の形で表示される.
In[5]:= xrep[1] + xrep[4] + xrep[9]
Out[5]= 
それでも,内部では, xrepの要素のままである.
In[6]:= % /. xrep[n_] -> x^n
Out[6]= 

演算子の表示型と表示位置の指定
fを前置形の演算子とし,表示上の演算記号を <>とする.
In[7]:= Prefix[f[x], "<>"]
Out[7]= 
中置形の演算子  を使い表示する.
In[8]:= s = Infix[{a, b, c}, "<>"]
Out[8]= 
演算子  は ^より優先度が高いのでカッコでくくる必要がない.
In[9]:= s^2
Out[9]= 
出力する式にいくつも演算子がある場合,どの演算子の引数をカッコでくくる必要があるのだろうか.また,どうやって見分けるのだろう.実は,演算子の評価優先度に応じてカッコが使われることになっている( 2.1.3を参照のこと).デフォルトの優先順位が適当でない場合は,関数 PrecedenceFormを使い演算子の優先度が変えられる.指定可能な優先度は 1から 1000のレベルで,高い値ほど高い優先度を意味し,また,カッコが不要になる方向である.
 に優先度100を割り付ける.他の演算子に比べ 100の優先度は低すぎるため,カッコが使われ要素がグループ化される.
In[10]:= PrecedenceForm[s, 100]^2
Out[10]= 
Format[expr]で式 exprに対応した変換書式を定義すると,現行の出力表記が標準的な出力表記のいずれかである限り変換書式は有効である.また, Format[expr, form]を使えば表記法を限定した上で式 exprの書式変換ができる.
TeXFormの表記が使われているときに限り, xに書式変換を施す.
In[11]:= Format[x, TeXForm] := "{\\bf x}"
TeX表記で出力させると,上の定義が有効になり, xの表示書式が変わる.
In[12]:= TeXForm[1 + x^2]
Out[12]//TeXForm= 1 + {{\bf x}}^2
|