In the Mathematica front-end, symbols that have been defined are colored black and symbols with no definition associated are colored blue. This is useful to prevent spelling mistakes. Also, defined symbols appear in the autocomplete (as of Mathematica v9.0).
I have a symbol chrom
with no definitions associated, but I want Mathematica to recognize it. That is, I want that when I type chrom
in the front end, it appears colored black, and I want it to appear in the autocomplete.
I can't associate a definition with chrom
(as in chrom = ...
or chrom[..] = ..
, because then if chrom
appears in the evaluation of an expression, it will be replaced by the associated defined value. This is not the behavior I want.
In other words, is there a Mathematica function that does the opposite of Remove
? Remove
removes a symbol from the symbol table. How can I add a symbol to the symbol table without associating a definition with it?
Answer
Update
In a comment MB1965 proposed an undocumented but apparently canonical function to do this in recent versions. It is DeclareKnownSymbols
. It takes a String or list of Strings, e.g.:
DeclareKnownSymbols[{"var", "res"}]
After this var
and res
are colored as known Symbols.
As far as I know the syntax highlighting for defined Symbols depends on one of the Symbol's *Values lists being non-empty. As suggested in the comments one way, and perhaps the best, is to simply assign the Symbol to itself:
symbol = symbol
OwnValues[symbol]
{HoldPattern[symbol] :> symbol}
Other rules existing in one of the *Values lists also work, even invalid ones:
Remove[symbol]
OwnValues[symbol] = {1 -> 1};
This rule will be replaced as soon as symbol
is assigned:
symbol = None;
OwnValues[symbol]
{HoldPattern[symbol] :> None}
Another approach is to define a context coloring for your Symbols, and specifically create all of them in that context. First define the coloring Option and add the context to the $ContextPath
:
SetOptions[$FrontEndSession,
AutoStyleOptions -> {"SymbolContextStyles" -> {"highlight`" -> Green}}]
AppendTo[$ContextPath, "highlight`"];
Then simply list your fully-qualified Symbols to create them:
{highlight`symbol1, highlight`symbol2, highlight`symbol3};
At this point the plain Symbol names will be highlighted as specified:
Comments
Post a Comment