mathematica.SE目前处于私人测试阶段,几天后将向公众开放。Stack Overflow 和相关站点使用prettify.js,但 Mathematica 不是受支持的语言。为我们的网站提供一个自定义突出显示脚本会非常棒,我请求 JavaScript 和 CSS 社区帮助开发这样的脚本和随附的 CSS。
我在下面列出了一些基本要求,以便它捕获 Mathematica 默认突出显示方案的大部分功能(忽略只有内部解析器知道的内容)。我还对颜色进行了通用命名——十六进制颜色代码可以从我提供的屏幕截图中选择(下文进一步说明)。我还添加了代码示例来配合屏幕截图,以便人们可以测试它。
基本要求
注释
这些输入为(* comment *)
。因此,这些之间的任何内容都应以灰色突出显示。字符串
这些输入为"string"
(不支持单引号),并应以粉红色突出显示。运算符/简写符号
除了标准+, -, *, /, ^, ==
的 等,Mathematica 还有其他几个运算符和简写符号。最常遇到的有:@, @@, @@@, /@, //@, //, ~, /., //., ->, :>, /:, /;, :=, :^=, =., &, |, ||, &&, _, __, ___, ;;, [[, ]], <<, >>, ~~, <>
这些以及括号、方括号和大括号都应以黑色突出显示。
Patterns 对象和槽
Pattern 对象以字母开头,并带有_
或__
或___
附加,例如x_
,x__
和x___
。这些也可以在下划线后面有其他字母,如x_abc
等。所有这些都应该以绿色突出显示。插槽是
#
和##
,也可以后跟整数,如#1
、##4
等,也应该是绿色的。这两个(模式对象和插槽)通常由上面第 3 点的运算符/括号/简写形式终止。
函数/变量
函数和变量在这里是一个相当松散的术语,但用于本文的目的。任何不属于上述 4 的东西都可以用黑色突出显示。Mathematica 经常`
在代码中使用反引号,应将其视为函数/变量名称的一部分。例如,abcd`defg
。变量名称中任何位置的美元符号$
都应像字母一样对待(即,没什么特别的)。
对于上述所有内容,如果它们出现在字符串中,则应将其视为此类,即"@~#
应以粉红色突出显示。
额外的好东西:
- 在上面第 3 点的模式对象中,如果下划线后面跟着 a
?
和一些字母,那么后面的部分_
应该是黑色的。例如,在 中x__?abc
,该x__
部分必须为绿色,而该部分?abc
为黑色。 - 如果函数/变量以大写字母开头,则以黑色突出显示。如果它以小写字母开头,则以蓝色突出显示。在内部,这区分了内置函数和用户定义函数。但是,mathematica 社区(几乎无处不在)很好地遵守了这种命名约定,因此区分两者将起到一定的作用。
屏幕截图和代码示例:
1.简单的例子
这是一个小示例集,最后有一个屏幕截图显示它在 Mathematica 中的外观:
(*simple pattern objects & operators*)
f[x_, y__] := x Times @@ y
(*pattern objects with chars at the end and strings*)
f[x_String] := x <> "hello@world"
(*pattern objects with ?xxx at the end*)
f[x_?MatrixQ] := x + Transpose@x
<< Combinatorica` (*example with backticks and inline comment*)
(*Slightly more complicated example with a mix of stuff*)
Developer`PartitionMap[Total, Range@1000, 3][[3 ;; -3]]~Partition~2 //
Times @@@ # &
2. 一个真实世界的例子
这是我的这个答案的一个例子,它也表明了我在“附加的好东西”部分中的第 2 点,即小写的东西以蓝色突出显示。
此外,您可能会注意到一些以橙色突出显示的变量——我故意没有将其作为要求包括在内,因为我认为如果没有了解 Mathematica 的解析器,这将变得更加困难。
prob = MapIndexed[#1/#2 &,
Accumulate[
EuclideanDistance[{0, 0}, #] < 1 & /@ arrows // Boole]]~N~4;
Manipulate[
Graphics[{White, Rectangle[{-5, -5}, {5, 5}], Red, Disk[{0, 0}, 1],
Black, Point[arrows[[;; i]]],
Text[Style[First@prob[[i]], Bold, 18, "Helvetica"], {-4.5, 4.5}]},
ImageSize -> 200], {i, Range[2, 20000, 1]},
ControlType -> Manipulator, SaveDefinitions -> True]
这可行吗?太多了?太难?不可能的?
坦率地说,我不知道其中任何一个的答案。我刚刚列出了一些mathematica.SE 上每个人都希望拥有的基本功能,以及一些额外的东西,它们会是最重要的。但是,请让我知道这些是否难以实施。我们可以计算出更小的特征子集。
为表彰这一帮助,Mathematica 社区对你们所有人表示永远的感激之情,此外,我将向为此做出重大贡献的每个人奖励 500 元奖金(如果由不同的人部分完成)——我将依靠你们对答案进行投票/评论/输出以决定什么是重要的(如果他们做了所有的工作,可能会给一个人多于一份赏金)。无论以前的赏金如何,实施“额外的好东西”都会自动获得 +500,所以即使你不做前半部分,你也可以在别人的工作基础上再接再厉。我也可能会定期设置较小的赏金来吸引可能没有看到这个问题的用户,所以如果你碰巧获得了这些赏金,它们将是“奖励现有答案的赏金”的补充,这将在最后决定.
最后,我并不着急。所以请花点时间回答这个问题。在 SE 实施之前,赏金始终是一个选项(或者如果已确定现有答案完全满足要求)。理想情况下,我希望在 2 个月后的 beta 版中实现 2/3rs。