框符的字符串表示

Wolfram 语言提供了一种简洁的方式来用字符串表示框符. 在将框符的设定作为普通文本进行导入和导出时,这种方式尤其方便.

创建一个 SuperscriptBox.
In[1]:=
Click for copyable input
Out[1]=
ToExpressionSuperscriptBox 解释成一个幂指数.
In[2]:=
Click for copyable input
Out[2]//FullForm=

重要的一点是区分表示原始框符的格式和表示框符意义的格式.

这对应于一个原始 SuperscriptBox.
In[3]:=
Click for copyable input
Out[3]=
这对应于 SuperscriptBox 代表的幂指数.
In[4]:=
Click for copyable input
Out[4]=
此处生成的表达式是一个幂.
In[5]:=
Click for copyable input
Out[5]//FullForm=
(input)原始框符
!(input)框符的意义

区分原始框符和其代表的表达式.

如果将一个 StandardForm 单元的内容复制到另一个如文本编辑器的程序中,Wolfram 系统将在必要时生成一个 !() 形式. 这样做是为了当讲这个格式的内容重新复制回 Wolfram 系统中时,该 StandardForm 单元的原始内容会自动再次生成. 如果没有 !,则仅得到对应于这些内容的原始框符.

在选项的默认设置下,贴入 Wolfram 系统笔记本中的 !() 格式自动显示成二维格式.

"(input)"一个原始字符串
"!(input)"含有框符的字符串

字符串中嵌入二维框件结构.

Wolfram 语言通常将出现在字符串内的 () 格式与其它的一系列字符一样对待. 通过插入 ! 可以令 Wolfram 语言将这个格式视作它所代表的框符. 通过这种方式可以在普通字符串内嵌入框符结构.

Wolfram 语言把这当成一个普通字符串.
In[6]:=
Click for copyable input
Out[6]=
! 告诉 Wolfram 语言这个字符串含有框符.
In[7]:=
Click for copyable input
Out[7]=
可将框符与普通文本混合.
In[8]:=
Click for copyable input
Out[8]=
(box1,box2,)RowBox[box1,box2,]
box1^box2SuperscriptBox[box1,box2]
box1_box2SubscriptBox[box1,box2]
box1_box2%box3SubsuperscriptBox[box1,box2,box3]
box1&box2OverscriptBox[box1,box2]
box1+box2UnderscriptBox[box1,box2]
box1+box2%box3UnderoverscriptBox[box1,box2,box3]
box1/box2FractionBox[box1,box2]
@boxSqrtBox[box]
\@box1\%box2RadicalBox[box1,box2]
form` boxFormBox[box,form]
\*input构建来自 input 的框符

框符的字符串表示.

Wolfram 语言要求用户给框符的任何输入格式被包括在 () 内. 在最外围的 () 内还可使用附加的 () 来进行分组.

这里使用普通括号表示分组.
In[9]:=
Click for copyable input
Out[9]//DisplayForm=
没有括号时,分成的组是不同的.
In[10]:=
Click for copyable input
Out[10]//DisplayForm=
() 对分组进行设定,但不像显式的括号一样被显示.
In[11]:=
Click for copyable input
Out[11]//DisplayForm=
里边的 () 构建了一个 RowBox.
In[12]:=
Click for copyable input
Out[12]=

当用户在 Wolfram 语言中敲入 aa+bb 作为输入时,首先发生的是,aa+bb 被当作一个个单独的项. 当由包括在 () 内的输入构建框件时,也同样如此. 而在框件内部,每一项是以一个字符串的形式给出,而非其原始格式.

RowBox 中的 aa+bb 被分成单独的字符串.
In[13]:=
Click for copyable input
Out[13]//FullForm=
默认设置时,+ 周围的空格是忽略不计的.
In[14]:=
Click for copyable input
Out[14]//FullForm=
这里形成了两个嵌套的 RowBox 对象.
In[15]:=
Click for copyable input
Out[15]//FullForm=
即使给出的字符串不与一个完整的 Wolfram 语言表达式对应,所形成的还是相同的框件结构.
In[16]:=
Click for copyable input
Out[16]//FullForm=

() 序列内部,可以通过使用反斜杠标记如 ^@ 等来设置某些类型的框符. 但对其它的框符,用户需要给出普通的 Wolfram 系统输入,以 * 作为开始.

构建一个 GridBox.
In[17]:=
Click for copyable input
Out[17]//DisplayForm=
构建一个 StyleBox.
In[18]:=
Click for copyable input
Out[18]//DisplayForm=

* 的行为实际上像一个换码:它允许用户即使在一个 () 序列内也能进入普通 Wolfram 语言语法. 用户在一个 * 后给出的输入自身也能够含有 () 序列.

可以对嵌套的*() 互换. 在 () 的外部需要显式引用.
In[19]:=
Click for copyable input
Out[19]//DisplayForm=
!(input)解释当前形式中的输入
!(form`input)使用指定形式解释输入

控制输入被解释的方式.

在一个 StandardForm 单元中,这将在 StandardForm 中被解释,产生一个乘积.
In[20]:=
Click for copyable input
Out[20]=
反斜杠反引号序列令 Wolfram 语言将其在 TraditionalForm 中被解释.
In[21]:=
Click for copyable input
Out[21]=

当用户将一个笔记本中的单元内容复制到文本编辑器等程序中时,通常不包括显式的反斜杠反引号序列. 但如果用户希望将所得到的重新复制到一个不同类型的单元中时,则需包括反斜杠反引号序列以确保所有的解释均正确.