Синтаксическая раскраска в Mathematica
Как пользовательский символ функции, такой как f в
или переменные символы, такие как лото в
быть цветным автоматически?
В раскраске синтаксиса на M8 для этого не предлагается вариант.
Только локальные переменные или глобальные символы, которые не имеют назначенных значений.
Ответы
Ответ 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]()
Это то, что вы хотите?