Подтвердить что ты не робот

Синтаксическая раскраска в Mathematica

Как пользовательский символ функции, такой как f в

  • f[x_] = 2 x

или переменные символы, такие как лото в

  • lotto = Table[2, {10}];

быть цветным автоматически?


В раскраске синтаксиса на M8 для этого не предлагается вариант.

Только локальные переменные или глобальные символы, которые не имеют назначенных значений.

4b9b3361

Ответ 1

Это не совсем то, что вы просили, но это может быть полезно для вас.

Вы можете выделить символы по контексту, используя этот метод:

SetOptions[$FrontEndSession, 
  AutoStyleOptions -> {"SymbolContextStyles" -> {"highlight`" -> Green}}
]

AppendTo[$ContextPath, "highlight`"];

Теперь, когда вы создаете символ в контексте highlight`, он будет автоматически окрашен в зеленый цвет:

highlight`lotto ;

enter image description here

и поскольку highlight` был добавлен к $ContextPath, после этого символ можно использовать явно:

lotto

enter image description here


Выделение всех символов (переменных)

Если вы хотите, чтобы все созданные вами символы автоматически выделялись, установите:

$Context = "highlight`"

После этого все новые создаваемые вами символы будут принадлежать контексту highlight` и получат цвет.

Новые средства, которые ранее не использовались в сеансе, или были Remove d.

Мне кажется, что лучший способ выполнить это, что позволяет избежать возможной проблемы "затенения", может заключаться в том, чтобы выделить подсветку для самого контекста Global`. Я не рассматривал последствия этого, но это можно сделать только с этим:

SetOptions[$FrontEndSession, 
  AutoStyleOptions -> {"SymbolContextStyles" -> {"Global`" -> Green}}
]

Советы по использованию

  • Контекст highlight` является полностью произвольным, и вы можете выделить несколько контекстов с разными цветами.

  • Вы можете покрасить контексты пакетов, такие как Units`, чтобы различать, какие символы принадлежат этому пакету.

Ответ 2

Такие переменные автоматически окрашиваются после присвоения им значения. В соответствии с настройками Mathematica по умолчанию, lotto меняет цвет с синего на черный, как только вы назначаете значение. Строго говоря, это неназначенные переменные, которые окрашиваются в соответствии с настройкой, которую вы найдете в разделе "Предпочтения/Внешний вид/Синтаксис раскраски/Другие/Глобальные символы, которые не имеют назначенного значения".

Если то, что вы ищете, это способ присвоить отдельный цвет глобальным символам, единственные определения которых являются собственными значениями, тогда я считаю, что вам не повезло. Насколько я знаю, синтаксическая раскраска не различает собственные значения ( "присваивания переменных" ), "вниз" ( "определения функций" ) и "вверх-значения" ( "определения частей выражения" ).

Ответ 3

Как я уже сказал в своем комментарии выше, я думаю, что это будет трудно полностью автоматизировать. Вы должны обернуть Set и SetDelayed, чтобы автоматически перемещать переменные в правильный контекст в зависимости от того, создают ли они OwnValue или DownValue.

Для этого вручную просто требуется простое редактирование предыдущей работы Mr.Wizard...

SetOptions[$FrontEndSession, 
 AutoStyleOptions -> {"SymbolContextStyles" -> 
                       {"functions`" -> Green, "variables`" -> Pink}}]
$ContextPath = Join[$ContextPath, {"functions`", "variables`"}]//DeleteDuplicates;

variables`x;
functions`f;

enter image description here

Это то, что вы хотите?