【发布时间】:2011-06-30 11:33:59
【问题描述】:
输出表达式通过MakeBoxes传递is known,将图形表达式转换为前端用来表示图形的框语言(当$Output具有默认选项FormatType->StandardForm时)。例如,如果我们评估:
HoldComplete[Graphics[Disk[]]]
我们得到一个由HoldComplete包裹的磁盘:
这是因为HoldComplete 不会阻止MakeBoxes 将其内容转换为排版表达式:
In[4]:= MakeBoxes@HoldComplete[Graphics[Disk[]]]
Out[4]= RowBox[{"HoldComplete", "[", GraphicsBox[DiskBox[{0, 0}]], "]"}]
所以我的问题是:是否可以对MakeBoxes 进行一些额外的定义,这样使用头部MakeBoxesStop 包装任何表达式将阻止MakeBoxes 将此表达式转换为排版形式?在这种情况下,表达式在输出中应该与任何其他表达式一样,其中没有与符号关联的规则;在上述情况下:
附:请不要建议使用InputForm,因为I am not satisfied with its default behavior。
【问题讨论】:
-
正如我在过去的对话中多次提到的,HoldComplete 不会阻止 MakeBoxes... 这句话令人困惑。
HoldComplete在评估阶段很重要,出于渲染(转换为框)的目的,它只是一个普通的包装器。我完全不明白你为什么在这里提到它。渲染/FE 重要的是表达式的结果框形式,这与内核中发生的评估完全不同。 -
@Leonnid @Alexey - 关于“在 FE 中渲染与内核中发生的事情”的评论让我想起了 this 对 John Fultz 的 MathGroup 帖子的回复。强制旧版图形渲染有帮助吗? (可能是一个愚蠢的建议,但我想我会分享)
-
@telefunkenvf14 我问错人了。但是 IMO 将盒子形式的表达式发送到 FE,即使它是图形也比发送图像更干净,所以除非真的有必要,否则我不会强制使用遗留图形渲染。
标签: wolfram-mathematica mathematica-frontend