Representing Textual Forms by Boxes

All textual and graphical forms in the Wolfram System 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 .
In[1]:=
Click for copyable input
Out[1]=
DisplayForm shows how these boxes would be displayed.
In[2]:=
Click for copyable input
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]:=
Click for copyable input
Out[3]//DisplayForm=
This displays one string as a subscript of another.
In[4]:=
Click for copyable input
Out[4]//DisplayForm=
This puts two subscript boxes in a row.
In[5]:=
Click for copyable input
Out[5]//DisplayForm=
"text"literal text
RowBox[{a,b,}]a row of boxes or strings
GridBox[{{a1,b1,},{a2,b2,},}]
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^(th) root

Some basic box types.

This nests a fraction inside a radical.
In[6]:=
Click for copyable input
Out[6]//DisplayForm=
This puts a superscript on a subscripted object.
In[7]:=
Click for copyable input
Out[7]//DisplayForm=
This puts both a subscript and a superscript on the same object.
In[8]:=
Click for copyable input
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
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]:=
Click for copyable input
Out[9]//DisplayForm=
This puts lines between rows and columns of an array.
In[10]:=
Click for copyable input
Out[10]//DisplayForm=
And this also puts a frame around the outside.
In[11]:=
Click for copyable input
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 Style. The difference is that Style is a high-level function that applies to an expression to determine how it will be displayed, while StyleBox is the corresponding low-level function in the underlying box structure.

This shows the string in italics.
In[12]:=
Click for copyable input
Out[12]//DisplayForm=
This shows in the style used for section headings in your current notebook.
In[13]:=
Click for copyable input
Out[13]//DisplayForm=
This uses section heading style, but with characters shown in gray.
In[14]:=
Click for copyable input
Out[14]//DisplayForm=

If you use a notebook front end for the Wolfram System, 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]:=
Click for copyable input
Out[15]//DisplayForm=
It is normally interpreted as a power.
In[16]:=
Click for copyable input
Out[16]//InputForm=
This again prints as with a superscript.
In[17]:=
Click for copyable input
Out[17]//DisplayForm=
But now it is interpreted as , following the specification given in the InterpretationBox.
In[18]:=
Click for copyable input
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, the Wolfram Language provides various options that allow you to control the selection and editing of InterpretationBox objects.

option
default value
EditableAutomaticwhether to allow the contents to be edited
SelectableTruewhether to allow the contents to be selected
DeletableTruewhether to allow the box to be deleted
DeletionWarningFalsewhether to issue a warning if the box is deleted
BoxAutoDeleteFalsewhether to strip the box if its contents are modified
StripWrapperBoxesFalsewhether 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 the Wolfram System 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 , for example, will normally not be distinguished from an ordinary black .

A red is usually treated as identical to an ordinary one.
In[19]:=
Click for copyable input
Out[19]=