问题描述
|
用户定义的函数符号(例如f)如何在
f [x_] = 2 x
或诸如乐透中的可变符号
lotto = Table [2,{10}];
自动上色?
在M8上的语法着色中,没有为此提供选项。
仅未分配值的局部变量或全局符号。
解决方法
这并非您所要求的,但是对您可能有用。
您可以使用以下方法按上下文突出显示符号:
SetOptions[$FrontEndSession,AutoStyleOptions -> {\"SymbolContextStyles\" -> {\"highlight`\" -> Green}}
]
AppendTo[$ContextPath,\"highlight`\"];
现在,当您在上下文“ 1”中创建符号时,它将自动变为绿色:
highlight`lotto ;
并且由于在$ContextPath
后面附加了highlight`
,因此可以简单地使用该符号:
lotto
突出显示所有符号(变量)
如果要自动突出显示所有创建的符号,请设置:
$Context = \"highlight`\"
之后,您创建的所有新符号将属于上下文highlight`
,并会接收颜色。
新的意思是那些以前没有在会话中使用过的,或者已经Remove
。
在我看来,一种更好的方法来避免出现“阴影”问题,可能是针对“ 9”上下文本身设置突出显示。我没有考虑过这样做的后果,但仅此一项即可完成:
SetOptions[$FrontEndSession,AutoStyleOptions -> {\"SymbolContextStyles\" -> {\"Global`\" -> Green}}
]
使用技巧
上下文“ 1”是完全任意的,您可以使用不同的颜色突出显示多个上下文。
您可以为诸如color12之类的程序包上色,以区分哪些符号属于该程序包。
,为这些变量分配值后,它们会自动着色。在默认的Mathematica设置下,lotto
分配值后立即将颜色从蓝色变为黑色。严格来说,未分配的变量会根据您在“首选项” /“外观” /“语法着色” /“其他” /“全局”符号下未设置值的设置进行着色。
如果您正在寻找一种为唯一的定义是自己的值的全局符号分配不同颜色的方法,那么我认为您很不走运。据我所知,语法着色机制无法区分自身值(\“变量赋值\”),向下值(\“函数定义\”)和向上值(\“表达式部分定义\”) 。
,正如我在上面的评论中所说,我认为很难完全自动化。您必须将ѭ14和ѭ15包装起来,以根据变量是创建OwnValue还是DownValue将变量自动移到正确的上下文中。
要手动执行此操作,只需对Mr.Wizard的先前工作进行简单的编辑...
SetOptions[$FrontEndSession,AutoStyleOptions -> {\"SymbolContextStyles\" ->
{\"functions`\" -> Green,\"variables`\" -> Pink}}]
$ContextPath = Join[$ContextPath,{\"functions`\",\"variables`\"}]//DeleteDuplicates;
variables`x;
functions`f;
这是你想要的吗?