mathematica.SEは現在プライベート ベータ版で、数日後に一般公開されます。Stack Overflow および関連サイトではprettify.jsを使用していますが、Mathematica はサポートされている言語ではありません。私たちのサイトにカスタムのハイライト スクリプトを用意できたらすばらしいと思います。そのようなスクリプトとそれに付随する CSS の開発について、JavaScript と CSS コミュニティの助けを求めます。
Mathematica のデフォルトの強調表示スキームのほとんどの機能をキャプチャするためのいくつかの基本的な要件を以下にリストしました(内部パーサーだけが知っているものは無視します)。また、色には一般的な名前を付けました。提供したスクリーンショットから 16 進数の色コードを選択できます (以下で詳しく説明します)。また、スクリーンショットに付随するコード サンプルを追加して、人々がテストできるようにしました。
基本要件
コメント
これらは として入力され(* comment *)
ます。したがって、これらの間にあるものはすべて灰色で強調表示する必要があります。文字列
これらは"string"
(一重引用符はサポートされていません) として入力され、ピンク色で強調表示されます。演算子/略記法
標準の などとは別に+, -, *, /, ^, ==
、Mathematica にはいくつかの演算子と略記法があります。最も一般的に遭遇するものは次のとおりです。@, @@, @@@, /@, //@, //, ~, /., //., ->, :>, /:, /;, :=, :^=, =., &, |, ||, &&, _, __, ___, ;;, [[, ]], <<, >>, ~~, <>
これらと括弧、括弧、および中括弧はすべて黒で強調表示する必要があります。
パターン オブジェクトとスロット
パターン オブジェクトは文字で始まり、 、、などのように_
または__
またはが付けられます。これらには、アンダースコアの後に などの追加の文字を含めることもできます。これらはすべて緑色で強調表示する必要があります。___
x_
x__
x___
x_abc
スロットは
#
andであり、その後に、 など##
の整数が続くこともあり、緑色である必要があります。#1
##4
これらの両方 (パターン オブジェクトとスロット) は通常、上記のポイント 3 の演算子/ブラケット/ショートフォームで終了します。
関数/変数
関数と変数は、ここではかなりあいまいな用語ですが、この投稿の目的に役立ちます。上記の 4 つに当てはまらないものは、黒で強調表示できます。Mathematica はコード内でバッククォート`
を使用することが多く、関数/変数名の一部と見なす必要があります。例:abcd`defg
. 変数名のどこにあるドル記号$
も、文字のように扱われます (つまり、特別なことではありません)。
上記のすべてについて、それらが文字列内にある場合は、そのように処理する必要があります。つまり"@~#
、ピンク色で強調表示する必要があります。
その他の便利な機能:
- 上記のポイント 3 のパターン オブジェクトで、アンダースコアの後に a
?
といくつかの文字が続く場合、に続く部分_
は黒である必要があります。たとえば、x__?abc
では、x__
パーツは緑で、?abc
は黒でなければなりません。 - 関数/変数が大文字で始まる場合、黒で強調表示されます。小文字で始まる場合は、青色で強調表示されます。内部的には、これにより組み込み関数とユーザー定義関数が区別されます。ただし、mathematica コミュニティ (ほとんどすべての場所) はこの命名規則にかなり固執しているため、この 2 つを区別することは何らかの目的に役立ちます。
スクリーンショットとコード サンプル:
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 の報奨金を授与します(別の人によって部分的に行われた場合)。何が重要かを決定するための回答に対する投票/コメント/出力 (おそらく、すべての作業を行う場合は、1 人に複数の報奨金)。「追加の素敵なもの」を実装すると、以前のバウンティに関係なく、自動的に +500 が付与されますですので、前半をやらなくても、他の人の作品を参考にすることもできます。また、この質問を見ていない可能性のあるユーザーを引き付けるために、定期的に小さな報奨金を配置する可能性があります。そのため、これらの報奨金を獲得した場合は、最後に決定される「既存の回答に報いる報奨金」に追加されます。 .
最後に、私は急いでいません。ですから、この質問に時間を割いてください。報奨金は、SE によって実装されるまで (または、既存の回答が要件を完全に満たしていると判断された場合)、常にオプションです。理想的には、今から 2 か月後のベータ版の 3 分の 2 でこれを実装したいと考えています。