## 2.9.10 Representing Textual Forms by Boxes

All textual forms in Mathematica are ultimately represented in terms of nested collections of boxes. Typically the elements of these boxes correspond to objects that are to be placed at definite relative positions in two dimensions.

Here are the boxes corresponding to the expression a + b.
 In[1]:=  ToBoxes[a + b]
 Out[1]=
DisplayForm shows how these boxes would be displayed.
 In[2]:=  DisplayForm[%]
 Out[2]//DisplayForm=

 DisplayForm[boxes] show boxes as they would be displayed

Showing the displayed form of boxes.
This displays three strings in a row.
 In[3]:=  RowBox[{"a", "+", "b"}] // DisplayForm
 Out[3]//DisplayForm=
This displays one string as a subscript of another.
 In[4]:=  SubscriptBox["a", "i"] // DisplayForm
 Out[4]//DisplayForm=
This puts two subscript boxes in a row.
 In[5]:=  RowBox[{SubscriptBox["a", "1"], SubscriptBox["b", "2"]}] // DisplayForm
 Out[5]//DisplayForm=

 "text" literal text RowBox[{a, b, ... }] a row of boxes or strings a b ... GridBox[{{, , ... }, {, , ... }, ... }] a grid of boxes SubscriptBox[a, b] subscript SuperscriptBox[a, b] superscript SubsuperscriptBox[a, b, c] subscript and superscript UnderscriptBox[a, b] underscript OverscriptBox[a, b] overscript UnderoverscriptBox[a, b, c] underscript and overscript FractionBox[a, b] fraction SqrtBox[a] square root RadicalBox[a, b] b root

Some basic box types.
This nests a fraction inside a radical.
 In[6]:=  RadicalBox[FractionBox[x, y], n] // DisplayForm
 Out[6]//DisplayForm=
This puts a superscript on a subscripted object.
 In[7]:=  SuperscriptBox[SubscriptBox[a, b], c] // DisplayForm
 Out[7]//DisplayForm=
This puts both a subscript and a superscript on the same object.
 In[8]:=  SubsuperscriptBox[a, b, c] // DisplayForm
 Out[8]//DisplayForm=

 FrameBox[box] render box with a frame drawn around it GridBox[list, RowLines->True] put lines between rows in a GridBox GridBox[list, ColumnLines->True] put lines between columns in a GridBox GridBox[list, RowLines->{True, False}] put a line below the first row, but not subsequent ones

Inserting frames and grid lines.
This shows a fraction with a frame drawn around it.
 In[9]:=  FrameBox[FractionBox["x", "y"]] // DisplayForm
 Out[9]//DisplayForm=
This puts lines between rows and columns of an array.
 In[10]:=  GridBox[Table[i+j, {i, 3}, {j, 3}], RowLines->True, ColumnLines->True] // DisplayForm
 Out[10]//DisplayForm=
And this also puts a frame around the outside.
 In[11]:=  FrameBox[%] // DisplayForm
 Out[11]//DisplayForm=

 StyleBox[boxes, options] render boxes with the specified option settings StyleBox[boxes, "style"] render boxes in the specified style

Modifying the appearance of boxes.

StyleBox takes the same options as StyleForm. The difference is that StyleForm acts as a "wrapper" for any expression, while StyleBox represents underlying box structure.

This shows the string "name" in italics.
 In[12]:=  StyleBox["name", FontSlant->"Italic"] // DisplayForm
 Out[12]//DisplayForm=
This shows "name" in the style used for section headings in your current notebook.
 In[13]:=  StyleBox["name", "Section"] // DisplayForm
 Out[13]//DisplayForm=
This uses section heading style, but with characters shown in gray.
 In[14]:=  StyleBox["name", "Section", FontColor->GrayLevel[0.5]] // DisplayForm
 Out[14]//DisplayForm=

If you use a notebook front end for Mathematica, then you will be able to change the style and appearance of what you see on the screen directly by using menu items. Internally, however, these changes will still be recorded by the insertion of appropriate StyleBox objects.

 FormBox[boxes, form] interpret boxes using rules associated with the specified form InterpretationBox[boxes, expr] interpret boxes as representing the expression expr TagBox[boxes, tag] use tag to guide the interpretation of boxes ErrorBox[boxes] indicate an error and do not attempt further interpretation of boxes

Controlling the interpretation of boxes.
This prints as with a superscript.
 In[15]:=  SuperscriptBox["x", "2"] // DisplayForm
 Out[15]//DisplayForm=
It is normally interpreted as a power.
 In[16]:=  ToExpression[%] // InputForm
 Out[16]//InputForm=
This again prints as with a superscript.
 In[17]:=  InterpretationBox[SuperscriptBox["x", "2"], vec[x, 2]] // DisplayForm
 Out[17]//DisplayForm=
But now it is interpreted as vec[x, 2], following the specification given in the InterpretationBox.
 In[18]:=  ToExpression[%] // InputForm
 Out[18]//InputForm=

If you edit the boxes given in an InterpretationBox, then there is no guarantee that the interpretation specified by the interpretation box will still be correct. As a result, Mathematica provides various options that allow you to control the selection and editing of InterpretationBox objects.

 option default value Editable Automatic whether to allow the contents to be edited Selectable True whether to allow the contents to be selected Deletable True whether to allow the box to be deleted DeletionWarning False whether to issue a warning if the box is deleted BoxAutoDelete False whether to strip the box if its contents are modified StripWrapperBoxes False whether to remove StyleBox etc. from within boxes in TagBox[boxes, ... ]

Options for InterpretationBox and related boxes.

TagBox objects are used to store information that will not be displayed but which can nevertheless be used by the rules that interpret boxes. Typically the tag in TagBox[boxes, tag] is a symbol which gives the head of the expression corresponding to boxes. If you edit only the arguments of this expression then there is a good chance that the interpretation specified by the TagBox will still be appropriate. As a result, Editable->True is effectively the default setting for a TagBox.

The rules that Mathematica uses for interpreting boxes are in general set up to ignore details of formatting, such as those defined by StyleBox objects. Thus, unless StripWrapperBoxes->False, a red x, for example, will normally not be distinguished from an ordinary black x.

A red x is usually treated as identical to an ordinary one.
 In[19]:=  ToExpression[ StyleBox[x, FontColor->RGBColor[1,0,0]]] x
 Out[19]=

 ButtonBox[boxes] display like boxes but perform an action whenever boxes are clicked on

Setting up active elements.

In a Mathematica notebook it is possible to set up elements which perform an action whenever you click on them. These elements are represented internally by ButtonBox objects. When you create an expression containing a ButtonBox, you will be able to edit the contents of the ButtonBox directly so long as the Active option is False for the cell containing the expression. As soon as you set Active->True, the ButtonBox will perform its action whenever you click on it.

Section 2.11.6 discusses how to set up actions for ButtonBox objects.

THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.