Mathematica中的语法着色

时间:2011-05-25 20:30:48

标签: wolfram-mathematica syntax-highlighting

如何在

中使用用户定义的功能符号,例如 f
  • f[x_] = 2 x

中的乐透等变量符号
  • lotto = Table[2, {10}];

自动着色?


在M8的语法着色中,没有为此提供选项。

仅限本地变量或未分配值的全局符号。

3 个答案:

答案 0 :(得分:14)

这不是您要求的,但它可能对您有用。

您可以使用此方法按上下文突出显示符号:

SetOptions[$FrontEndSession, 
  AutoStyleOptions -> {"SymbolContextStyles" -> {"highlight`" -> Green}}
]

AppendTo[$ContextPath, "highlight`"];

现在,当您在上下文highlight`中创建符号时,它将自动显示为绿色:

highlight`lotto ;

enter image description here

并且highlight`被附加到$ContextPath,之后可以明白地使用该符号:

lotto

enter image description here


突出显示所有符号(变量)

如果您希望自动突出显示您创建的所有符号,请设置:

$Context = "highlight`"

之后,您创建的所有符号将属于上下文highlight`,并会收到颜色。

新的意味着以前没有在会话中使用过,或已经Remove d。

在我看来,实现这一目标的更好方法是避免可能的“阴影”问题,可能是为Global`上下文本身设置突出显示。我没有考虑过这种情况的后果,但可以单独完成:

SetOptions[$FrontEndSession, 
  AutoStyleOptions -> {"SymbolContextStyles" -> {"Global`" -> Green}}
]

使用提示

  • 上下文highlight`完全是任意的,您可以使用不同的颜色突出显示多个上下文。

  • 您可以为Units`等包的上下文着色,以区分哪些符号属于该包。

答案 1 :(得分:5)

这些变量 在为它们赋值后自动着色。在默认的Mathematica设置下,lotto会在分配值后立即将颜色从蓝色更改为黑色。严格来说,未分配的变量会根据您在首选项/外观/语法着色/其他/没有赋值的的全局符号下找到的设置进行着色。

如果您正在寻找的是一种为全局符号指定不同颜色的方法,而这些符号的唯一定义是自己的值,那么我相信您运气不好。据我所知,语法着色机制不区分自身值(“变量赋值”),下行值(“函数定义”)和上升值(“表达式部分定义”)。

答案 2 :(得分:2)

正如我在上面的评论中所说,我认为这很难完全自动化。您必须wrap SetSetDelayed自动将变量移动到正确的上下文中,具体取决于他们是创建OwnValue还是DownValue。

要手动执行此操作,只需要对Mr.Wizard's previous work ...

进行简单编辑即可
SetOptions[$FrontEndSession, 
 AutoStyleOptions -> {"SymbolContextStyles" -> 
                       {"functions`" -> Green, "variables`" -> Pink}}]
$ContextPath = Join[$ContextPath, {"functions`", "variables`"}]//DeleteDuplicates;

variables`x;
functions`f;

enter image description here

这是你想要的吗?