|
2.9.11 書式の変更
式の表示用書式に関連した数多くのオプションが用意されており,表示の微調整が可能になっている.ほとんどの場合は,デフォルトの設定で十分である.調整が必要なら,次の表にあるオプションが使える.

GridBoxの設定条件
要素が数字の配列を作っておく.
In[1]:= t = Table[{i, (2i)!, (3i)!}, {i, 4}] ;
グリッドボックスで配列を表示する.設定条件はデフォルト値のままである.
In[2]:= GridBox[t] // DisplayForm
Out[2]//DisplayForm= 
右揃えで表示しなおす.
In[3]:= GridBox[t, ColumnAlignments->Right] // DisplayForm
Out[3]//DisplayForm= 
最初の2列を左揃えで,最後の列を右揃えにする.
In[4]:= GridBox[t, ColumnAlignments->{Left, Left, Right}] // DisplayForm
Out[4]//DisplayForm= 
列と列の間隔を指定する.
In[5]:= GridBox[t, ColumnSpacings->{5, 10}] // DisplayForm
Out[5]//DisplayForm= 
列の幅を揃える.
In[6]:= GridBox[t, ColumnsEqual->True] // DisplayForm
Out[6]//DisplayForm= 
グリッドボックスで表を表示すると,通常,行と行の間は1文字分のスペースがあけられる. RowMinHeight->0と設定すれば,間隔なしになる.
In[7]:= {GridBox[{{x, x}, {x, x}}], GridBox[{{x, x}, {x, x}}, RowMinHeight->0]} // DisplayForm
Out[7]//DisplayForm= 

列配置ColumnAlignmentsの設定
複雑な表を見やすく表示するには,表の要素配置を詳細に設定する必要がある.設定書式 ColumnAlignments->"c"を使い,表の要素に含まれる記号 "c"の位置で列ごとに要素を揃えることが可能である.
例えば, ColumnAlignments->"."とすれば小数点位置で数値データを揃えられる.また,位置揃え専用のマーカー \[AlignmentMarker]が用意されているので,それを列揃えしたい位置に挿入しておけば,表示に現れないマーカー位置で列揃えができるようになる.マーカーを入力するにはエイリアス am を使ってもよい.

行配置 RowAlignmentsの設定
GridBox表示における行の要素は通常このように揃えられる.
In[8]:= GridBox[{{SuperscriptBox[x, 2], FractionBox[y, z]}}] // DisplayForm
Out[8]//DisplayForm= 
強制的に縦方向に下揃えにしてみよう.
In[9]:= GridBox[{{SuperscriptBox[x, 2], FractionBox[y, z]}}, RowAlignments->Bottom] // DisplayForm
Out[9]//DisplayForm= 
普通の文の表示ではフォントのベースラインで字が揃うようになっている. mや xに代表されるアル ファベット文字の多くはベースラインが字の底辺位置にくる.一方,小文字の gや yでは,表示するフォントにより程度の差はあれ,ベースラインより下がった位置に底辺がある.
グリッドボックスで文字を表示してみる.行揃えはデフォルト設定のRowAlignments->Baselineである.
In[10]:= GridBox[{{"x", "m", "g", "y"}}] // DisplayForm
Out[10]//DisplayForm= 
今度は,文字の底辺位置で揃える.
In[11]:= GridBox[{{"x", "m", "g", "y"}}, RowAlignments->Bottom] // DisplayForm
Out[11]//DisplayForm= 
ボックスオブジェクトを連ねたものも文字列の場合と同じようにベースラインを基準に揃えられる.ボックスオブジェクトに複数の要素がある場合,通常,オブジェクトの主要素の持つベースラインが共通ベースラインとして使われる.例えば, xと yからなる の上付き文字ボックス(SuperScript)では xのベースラインが使われる.
の分数ボックス( FractionBox)では区切り線がボックスの軸になる.文字列にも軸を定義できる.フォントによっては,上下対称なプラス記号「+」やカッコ「 (」の中心を通る水平線を軸として指定してできる.その場合,分数ボックスのベースラインは,文字のベースラインが文字の軸から下がった距離だけ分数の軸から下がった位置を指す.
グリッドボックス(GridBox)では,オプション GridBaselineを使い所定の位置にベースラインをおくことが可能である. GridBaselineは RowAlignmentsと同じような設定が可能である.特に指定しなければ,軸位置(Axis)で揃えられるため,グリッドボックスの中心が文字列の軸に揃うようになる.
GridBaselineを設定して各 GridBoxの ベースラインをどこにおくか指定する.
In[12]:= {GridBox[{{x,x},{x,x}}, GridBaseline->Top], GridBox[{{x,x},{x,x}}, GridBaseline->Bottom]} // DisplayForm
Out[12]//DisplayForm= 

ButtonBoxオブジェクトの書式変更用オプション
ボタンのフレームをダイアログボックスの要素のように設定する.
In[13]:= ButtonBox["abcd", ButtonFrame->"DialogBox"] // DisplayForm
Out[13]//DisplayForm= 
パレットは通常,ButtonBoxのグリッドオブジェクトで構成する.列間隔はゼロにしておく.
In[14]:= GridBox[{{ButtonBox["abc"], ButtonBox["xyz"]}}, ColumnSpacings->0] // DisplayForm
Out[14]//DisplayForm= 
ボタンオブジェクトを GridBoxに入れておけば,自動的に揃えてくれる.
In[15]:= GridBox[{{ButtonBox["abcd"]}, {ButtonBox["x"]}}] // DisplayForm
Out[15]//DisplayForm= 
下の方におくボタンは拡大しないように指定する.
In[16]:= GridBox[{{ButtonBox["abcd"]}, {ButtonBox["x", ButtonExpandable->False]}}] // DisplayForm
Out[16]//DisplayForm= 
2.11.6に, ButtonBoxのオブジェクトにアクションを関連付けるための方法が説明してあるので参照のこと.

表示・印刷における代表的なサイズ

間隔調整コード( はキーボードのスペースキーを指す)
式 x+yを入力すると, Mathematica内部では RowBox[{"x","+","y"}]に記述変換される.また, RowBoxが出力されるときは,見やすさのため適当な間隔をおいて式の要素が配置される.特に指定しなければ,プラス記号「+」は演算記号なので,その両側に大きな間隔があけられる.x等の文字には狭い間隔があけられる.標準の間隔設定が適当でない場合は,ユーザ自身で間隔調整コードを挿入すれば任意の間隔で再配置できる.上の表にある符号指定なしのスペースコードは間隔を広げるのに使い,マイナス指定のコードは間隔を狭めるのに使う.
演算記号である +や -の周りにはデフォルトで幅広の間隔がおかれる.
In[17]:= RowBox[{"a", "b", "+", "c", "-", "+"}] // DisplayForm
Out[17]//DisplayForm= 
微調整コードを指定すれば,任意の間隔にできる.
In[18]:= RowBox[{"a", "\[ThickSpace]", "b", "+", "\[NegativeMediumSpace]", "c", "-", "+"}] // DisplayForm
Out[18]//DisplayForm= 

自動的な間隔調整を避ける方法
文字間隔を一定にする.
In[19]:= StyleBox[RowBox[{"a", "b", "+", "c", "-", "+"}], AutoSpacing->False] // DisplayForm
Out[19]//DisplayForm= 
ノートブック用フロントエンドを使えば,キー操作で式の要素の配置関係を直接調整できる.   ,   ,   ,   のキーを押せば,選択してある要素をピクセル単位で移動できる.また,そうして設定された調整値は AdjustmentBoxのオブジェクトとして式に保管される.

ボックスの位置調整
Bの左側をあけ,右側を詰める.
In[20]:= RowBox[{"A", AdjustmentBox["B", BoxMargins-> {{1, -0.3}, {0, 0}}], "C", "D"}] // DisplayForm
Out[20]//DisplayForm= 
うまく調整すれば,字の上に別の字を積み重ねて表示することも可能である.
In[21]:= RowBox[{"C", AdjustmentBox["/", BoxMargins->{{-.8, .8}, {0, 0}}]}] // DisplayForm
Out[21]//DisplayForm= 
AdjustmentBoxの書式を使い右端と左端に挿入する間隔はem単位で指定する.また,上と下の間隔はxの高さを1とした単位で指定する.マイナスの値を指定すると,隣接するボックスとの間隔が狭くなる. RowBoxでは垂直方向のすり合せはベースラインに対して行われる.これに対して, FractionBoxや OverscriptBoxでは上下のマージンに対して行われる.

ボックスの表示禁止
複数の要素を表示するとき,特定の要素を StyleBoxに指定して ShowContents->Falseの条件を与えれば,内容は表示されず,この位置にはその要素の大きさを示す空白が設けられる.
Yについて,その大きさ分の間隔をあけるが表示はしない.
In[22]:= RowBox[{"X", StyleBox["Y", ShowContents->False], "Z"}] // DisplayForm
Out[22]//DisplayForm= 
ほとんどの文字の表示サイズは使っているフォントにより決まる.例えば,StyleBoxで指定してあるFontSizeで決まる.しかし,中には特殊な文字もあり,属するフォントが普通のものでも,表示される大きさは周囲に依存して可変になっている.その典型的な例がカッコである.デフォルトでは,カッコ内の要素を完全に囲むまで伸張される.
完全に要素を囲むようカッコのサイズが調整される.
In[23]:= {RowBox[{"(", "X", ")"}], RowBox[{"(", FractionBox["X", "Y"], ")"}]} // DisplayForm
Out[23]//DisplayForm= 

可変長文字と記号に関するStyleBoxのオプション
RowBoxに入れたカッコは要素を完全に囲むまで拡大される.
In[24]:= RowBox[{"(", "(", GridBox[{{X},{Y},{Z}}]}] // DisplayForm
Out[24]//DisplayForm= 
記号によってはデフォルト設定によって伸び方が制限される.
In[25]:= RowBox[{"{", "[", "(", GridBox[{{X},{Y},{Z}}]}] // DisplayForm
Out[25]//DisplayForm= 
スタイルボックスに入れたすべての文字・記号を制限なしで伸張可とする.
In[26]:= StyleBox[%, SpanMaxSize->Infinity] // DisplayForm
Out[26]//DisplayForm= 
伸張可能な文字は,普通,ボックス軸を中心に対称に伸ばされる.
In[27]:= RowBox[{"(", GridBox[{{X},{Y}}, GridBaseline->Bottom], ")"}] // DisplayForm
Out[27]//DisplayForm= 
SpanSymmetric->Falseとし,対称的な伸張をしないよう指定しておく.
In[28]:= {X, StyleBox[%, SpanSymmetric->False]} // DisplayForm
Out[28]//DisplayForm= 
メニューにあるコマンド「特殊数学記号の設定」(Spanning Characters)を使い,記号をどう引き伸ばすか微調整ができるようになっている.複数の記号や文字を選択しておけば,まとめて伸長できる.

伸長可能な記号とデフォルトの性質
真上文字ボックスに対してオーバーブラケットを指定すると,文字列の全長にわたるように調整される.
In[29]:= OverscriptBox["xxxxxx", "\[OverBracket]"] // DisplayForm
Out[29]//DisplayForm= 
右矢印は,通常,所属する列の隅から隅にわたるように引き伸ばされる.
In[30]:= GridBox[{{"a", "xxxxxxx", "b"}, {"a", "\[RightArrow]", "b"}}] // DisplayForm
Out[30]//DisplayForm= 
行間にわたるように上向き矢印が垂直に引き伸ばされる.
In[31]:= GridBox[{{FractionBox[X, Y], "\[UpArrow]"}}] // DisplayForm
Out[31]//DisplayForm= 

下付き文字・上付き文字等に関する StyleBoxのオプション
上付き文字のボックスオブジェクトをネストさせる.
In[32]:= b = ToBoxes[X^X^X^X^X]
Out[32]= 
デフォルト設定では,上付き文字は順に小さくなっていく.
In[33]:= b // DisplayForm
Out[33]//DisplayForm= 
全ネストレベルを同じ大きさで表示するよう指示する.
In[34]:= StyleBox[b, ScriptSizeMultipliers->1] // DisplayForm
Out[34]//DisplayForm= 
今度は,ネストするに従い小さくなる.大きさの下限を5ポイントにしておきそれより小さくならないようにする.
In[35]:= StyleBox[b, ScriptMinSize->5] // DisplayForm
Out[35]//DisplayForm= 
Mathematicaは,一般に,その環境によって下付きと上付きの位置を効果的に活用する.複数の異なる下付きと上付きを1列に並べたい場合は,通常,オプションScriptBaselineShiftsを使って,各々をどの間隔でシフトするかを明確的に指示する.
2つ目の下付き文字は,デフォルト設定によって1つ目の下付き文字より多少下にシフトされる.
In[36]:= RowBox[{SubscriptBox["x", "0"], "+", SubsuperscriptBox["x", "0", "2"]}] // DisplayForm
Out[36]//DisplayForm= 
このコマンドを使えば,両方の下付き文字の位置が同じになる.
In[37]:= StyleBox[%, ScriptBaselineShifts->{1, Automatic}] // DisplayForm
Out[37]//DisplayForm= 

真下真上文字ボックス(UnderoverscriptBox)に関する配置用オプション
総和の記号では上限と下限の値は,通常,記号の真上文字と真下文字として表示される.
In[38]:= Sum[f[i], {i, 0, n}]
Out[38]= 
この例のように,表示が小さくなるときは,上付き・下付き文字として横に小さく表示した方が読みやすい.
In[39]:= 1/%
Out[39]= 
強制的に XXの真上に highを,真下に lowを配置する.
In[40]:= UnderoverscriptBox["XX", "low", "high", LimitsPositioning->True] // DisplayForm
Out[40]//DisplayForm= 
こうすると,上付き・下付き文字のように表示される.
In[41]:= FractionBox["a", %] // DisplayForm
Out[41]//DisplayForm= 
UnderscriptBoxで有効であLimitsPositioning->Automaticと配置を自動設定にしておくと,引数が総和記号(\[Sum])か積記号(\[Product])の場合は,LimitsPositioning->Trueのように作動する.このような記号のリストは,オプションLimitsPositioningTokensを設定することによって指定できる.

ボックスの改行指定で使うオプション
式が長くなり1行におさまらないときは改行しなければならない.改行するとボックスによっては表示形態が変わってしまうときがあるので注意する.
この入力例は分数の形で単一行で表示される.
In[42]:= Expand[(1 + x)^5]/Expand[(1 + y)^5]
Out[42]= 
この例は複数行に分割する.
In[43]:= Expand[(1 + x)^10]/Expand[(1 + y)^5]
Out[43]= 
表示上,式が複数行にわたるときはオプション MultilineFunctionを使い改行の仕方を指定できる.MultilineFunction->Noneとすれば改行禁止になる.
式が予期しない点で改行するようなら,改行位置に分割禁止コード \[NoBreak]と \[NonBreakingSpace]を挿入し,式が分割しないようにする.
特別に改行コード\[NewLine]を式に挿入すれば,その位置で強制的に式を改行できる.ノートブック用フロントエンドでは,Returnとタイプすることで改行コードが入力できる.改行した行には,通常,左インデントが施される.新しい行で入力を始めるとインデント幅が固定され,編集を続けても変わらなくなる.また,インデント付き改行コード\[IndentingNewLine]を入れておけば,周りの状況に応じてインデント幅を維持するようにもできる.

改行指定に使う特殊コード
Mathematicaが1つの式を数行に渡って改行する場合,式内の改行が行われたポイントで,ネストされたレベルに相当する量で中間の行をインデントする.
ここでの改行はレベル1でだけである.
In[44]:= Range[30]
Out[44]= 
ここでの改行はもっと深いレベルで行われる.
In[45]:= Nest[List, x+y, 30]
Out[45]= 
|