邪恶的GFW,你就饶了我吧:(

2008-10-19

让Mathematica中的大括号、中括号自动调整

今天miniWhale发现用Mathematica中的Basic Typersetting输入类似方程组前的大括号时,它不会自动延伸到适当大小,以包住所有的行。如下图所示:


而矩阵的()则可以自动延伸到适当大小以包住整个矩阵,如下图所示:


在Word 2007中试验了一下,它的公式编辑器是可以的,如下图所示:


miniWhale翻阅了一下《Tour of Mathematica》,发现用StyleBox[……, SpanMaxSize -> Infinity] // DisplayForm可以解决这个问题。

1、有关Low-Level Notebook Structure的概念
Notebook[ {cell1, cell2, ……}]
Cell[内容, 格式]
RowBox[ {box1, box2, …} ],构建1行
GridBox[ { {box11, box12, …}, {box21, box22, …}, … } ],构建1表
SuperscriptBox、SubscriptBox、SubsuperscriptBox[主体, 下, 上],上下标
OverscriptBox、UnderscriptBox、UnderoverscriptBox[主体, 下, 上],正上下标
FractionBox[分子, 分母],分数
SqrtBox[主体]、RadicalBox[主体, 方],根号

StyleBox[boxes, options],设置选项
StyleBox[boxes, "格式"],设置选项

FrameBox
AdjustmentBox

FormBox
InterpretationBox
TagBox
ErrorBox

由于函数名字已经很好的暗示了其功能,这里不再赘述。

2、StyleBox与自动垂直延伸相关的选项
选项
默认值
备注
SpanMinSizeAutomatic垂直可延字符的最小高度
SpanMaxSizeAutomatic垂直可延字符的最大高度
SpanSymmetricTrue是否对称延伸
SpanLineThicknessAutomatic 是否自动粗细

但是,小括号()永远自动垂直延伸。

4、解决方案
有了上面的知识,可以解释为啥矩阵可以自动被包围,而大括号、中括号却不行。当然,要解决这个问题也很简单,就是用StyleBox[……, SpanMaxSize -> Infinity] // DisplayForm。
下面是一个实例:
StyleBox[RowBox[{ "{",
GridBox[{ {AAA}, {BBB}, {CCC}, {DDD}, {EEE} }]}] ,
SpanMaxSize -> Infinity] // DisplayForm

3、其它
遗憾的是,Word中调好的公式copy到Mathematica中,仍然不能正确显示;同样,Mathematica中调好的公式copy到Word中,也不能正确显示。
前一个问题容易解决,就是在Mathematica中,按Shift+Ctrl+E,相当于ToBoxex,在代码里修改即可。

miniWhale原创

No comments: