# Forcing Mathematica to recognize a symbol without defining it

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?

-
how about chrom = Unevaluated[chrom] now it is not blue anymore next time it is typed. and no value is associated with it either. – Nasser Jan 7 '14 at 0:02
Isn't that the same as just entering n = n ? – heropup Jan 7 '14 at 0:11
@Nasser ... seems to work, but I'm not sure I understand why. Isn't chrom = Unevaluated[chrom] the same as chrom = chrom? – becko Jan 7 '14 at 0:12
@heropup same as what you said... didn't see your comment – becko Jan 7 '14 at 0:13
yes, n=n will also work. So now you have 2 ways to do it. I am sure where are more. Pick the one you like :) – Nasser Jan 7 '14 at 0:14

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:

{highlightsymbol1, highlightsymbol2, highlightsymbol3};
`

At this point the plain Symbol names will be highlighted as specified:

-
– becko Jan 7 '14 at 13:40