解决Mathematica符号错误的方法?

6

Mathematica提供了符号包来定义自定义符号,它似乎工作得很好,直到我将带有自定义符号的笔记本保存为包并尝试使用Needs["..."]导入新符号。正如Mathematica邮件列表中所记录的那样,这会在调用Notation[]时导致奇怪的语法错误。建议的解决方案是手动打开符号笔记本并将其评估到内核中,但对于我计划分发的文件来说,这是一种麻烦的方式。如果有人有更好的解决方法,我会非常感激!


请问您能举一个 .m 文件的例子并说明您所看到的错误吗? - Michael Pilat
1
当然。该程序包可在我的个人网站上获得(http://www.cgranade.com/academics/mathematica-packages)。尝试通过`Needs[]`导入此程序包会导致以下问题:Syntax::sntx: 无效的语法或之前 "Notation[NotationTemplateTag[SubscriptBox[[Sigma], TemplateBox[{n_}, NotationPatternTag]]] <<71>> TemplateBox[{n_}, NotationPatternTag], ]}]]]; <<25>> ^ - Chris Granade
1个回答

3
我认为您的问题在于Mathematica处理Notation[]的方式,quote:

在定义自己的符号时,使用符号模板至关重要。限制的原因是,复制到笔记本中的模板包含以正确方式嵌入的关键标签框。

也许根本不可能有一个包文件调用Notation[],但建议使用ParsedBoxWrapper,我现在没有时间试验。

针对你的问题有一个笨拙的解决方案,就是将所有的Notation[]赋值放在Notebook的一个单元格中,并将其设置为初始化单元格(右键单元格边缘-->初始化单元格)。这实际上也会创建一个只包含该单元格内容的.m文件(但这个文件将不会与Needs[]<<一起使用)。之后,您可以折叠该单元格,使其无法编辑、无法评估,完美!几乎就像您想要的。

需要注意的是,从分发的角度来看,这种方法相当不错,因为每次加载主文件时都会重新生成.m文件,因此您不需要发送多个文件。唯一的缺点是Notebook稍微有些丑陋(即一个隐藏的单元格),以及在您首次评估Notebook中的任何内容时会弹出一个窗口询问是否要评估Notebook的初始化单元格。


这是一个不错的解决方法,只是我必须确保记得保持隐藏单元格的最新状态。谢谢! - Chris Granade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接