如何在
中使用用户定义的功能符号,例如 ff[x_] = 2 x
或
中的乐透等变量符号lotto = Table[2, {10}];
自动着色?
在M8的语法着色中,没有为此提供选项。
仅限本地变量或未分配值的全局符号。
答案 0 :(得分:14)
这不是您要求的,但它可能对您有用。
您可以使用此方法按上下文突出显示符号:
SetOptions[$FrontEndSession,
AutoStyleOptions -> {"SymbolContextStyles" -> {"highlight`" -> Green}}
]
AppendTo[$ContextPath, "highlight`"];
现在,当您在上下文highlight`
中创建符号时,它将自动显示为绿色:
highlight`lotto ;
并且highlight`
被附加到$ContextPath
,之后可以明白地使用该符号:
lotto
如果您希望自动突出显示您创建的所有符号,请设置:
$Context = "highlight`"
之后,您创建的所有新符号将属于上下文highlight`
,并会收到颜色。
新的意味着以前没有在会话中使用过,或已经Remove
d。
在我看来,实现这一目标的更好方法是避免可能的“阴影”问题,可能是为Global`
上下文本身设置突出显示。我没有考虑过这种情况的后果,但可以单独完成:
SetOptions[$FrontEndSession,
AutoStyleOptions -> {"SymbolContextStyles" -> {"Global`" -> Green}}
]
上下文highlight`
完全是任意的,您可以使用不同的颜色突出显示多个上下文。
您可以为Units`
等包的上下文着色,以区分哪些符号属于该包。
答案 1 :(得分:5)
这些变量 在为它们赋值后自动着色。在默认的Mathematica设置下,lotto
会在分配值后立即将颜色从蓝色更改为黑色。严格来说,未分配的变量会根据您在首选项/外观/语法着色/其他/没有赋值的的全局符号下找到的设置进行着色。
如果您正在寻找的是一种为全局符号指定不同颜色的方法,而这些符号的唯一定义是自己的值,那么我相信您运气不好。据我所知,语法着色机制不区分自身值(“变量赋值”),下行值(“函数定义”)和上升值(“表达式部分定义”)。
答案 2 :(得分:2)
正如我在上面的评论中所说,我认为这很难完全自动化。您必须wrap Set
和SetDelayed
自动将变量移动到正确的上下文中,具体取决于他们是创建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;
这是你想要的吗?