【发布时间】:2012-02-15 23:29:46
【问题描述】:
mathematica.SE 目前处于私人测试阶段,几天后将向公众开放。 Stack Overflow 和相关站点使用 prettify.js,但是 Mathematica 不是受支持的语言。为我们的网站提供自定义突出显示脚本会非常棒,我请求 JavaScript 和 CSS 社区帮助开发这样的脚本和随附的 CSS。
我在下面列出了一些基本要求,以便它捕获 Mathematica 默认突出显示方案的大部分功能(忽略只有内部解析器知道的内容)。我还对颜色进行了通用命名——十六进制颜色代码可以从我提供的屏幕截图中选择(下文进一步说明)。我还添加了代码示例来配合屏幕截图,以便人们可以测试它。
基本要求
评论
这些输入为(* comment *)。因此,这些之间的任何内容都应以灰色突出显示。字符串
这些输入为"string"(不支持单引号),并应以粉红色突出显示。-
运算符/简写符号
除了标准的+, -, *, /, ^, ==等,Mathematica 还有其他几个运算符和简写符号。最常见的有:@, @@, @@@, /@, //@, //, ~, /., //., ->, :>, /:, /;, :=, :^=, =., &, |, ||, &&, _, __, ___, ;;, [[, ]], <<, >>, ~~, <>这些以及括号、方括号和大括号都应以黑色突出显示。
-
模式对象和插槽
模式对象以字母开头,并附有_或__或___,例如x_、x__和x___。这些也可以在下划线后面有其他字母,如x_abc等。所有这些都应该以绿色突出显示。槽位为
#和##,后面也可以跟#1、##4等整数,也应该是绿色的。这两个(模式对象和槽)通常由上面第 3 点中的运算符/括号/简写形式终止。
函数/变量
函数和变量在这里是一个相当松散的术语,但用于本文的目的。任何不属于上述 4 的东西都可以用黑色突出显示。 Mathematica 经常在代码中使用反引号`并且应该被视为函数/变量名称的一部分。例如,abcd`defg。变量名中的美元符号$将被视为字母(即,没有什么特别之处)。
对于以上所有内容,如果它们出现在字符串中,则应将其视为字符串,即"@~# 应以粉红色突出显示。
额外的好东西:
- 在上面第 3 点的模式对象中,如果下划线后面跟着一个
?和一些字母,那么_后面的部分应该是黑色的。例如,在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。一个真实的例子
这是来自this answer of mine 的一个示例,它也表明了我在“其他优点”部分中的第 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 美元(如果部分由不同的人)——我将依靠你对答案的投票/cmets/输出来决定什么是重要的(如果他们做了所有的工作,可能会给一个人不止一笔赏金)。 无论之前的赏金如何,实施“额外的好东西”都会自动获得 +500,因此即使您不做前半部分,您也可以在其他人的工作的基础上再接再厉。我也可能会定期设置较小的赏金来吸引可能没有看到这个问题的用户,所以如果你碰巧获得了这些赏金,它们将是“奖励现有答案的赏金”的补充,这将在最后决定.
最后,我并不着急。所以请花点时间回答这个问题。在 SE 实施之前,赏金始终是一个选项(或者如果已确定现有答案完全满足要求)。理想情况下,我希望在 2 个月后将这个实现的 2/3 投入到测试版中。
【问题讨论】:
-
关于锦上添花的项目 #2:我敢肯定,开发流行的 Mathematica 软件包的人确实遵守大写约定,但在我的圈子里,他们只是简单地使用对于研究而言,这种约定几乎是闻所未闻的——从字面上看,没有人知道它。所以我不确定依赖它是否安全。话虽如此,也许在语法突出显示中“强制执行”约定可能会转换一些人。
-
@DavidZaslavsky 我的经验正好相反——开发流行包的人实际上确实使用大写名称(大部分情况下)。当然,这是在他们进行了彻底的测试以确保没有碰撞和阴影之后。从我在Stack Overflow 上看到的情况来看,大多数人都坚持使用小写字母,并且很快就会向其他人指出这个约定。我想这取决于他们是否看过 Mathematica 书——这是 Wolfram 建议的第一件事 :)
-
啊,这很有道理。我的印象是,Mathematica 书并不像人们想象的那样“在野外”流行。
-
你能再添加一个“很高兴拥有”吗?任何区分索引 (
a[[i]]) 和函数 (f[x]) 的方法都非常好!如果可以处理嵌套的 cmets,这应该是可能的。 -
另一个不错的选择:自动缩进 ala Mma?
标签: javascript css wolfram-mathematica prettify