The (Info3.m) and (Info4.m) Packages
By Ted Ersek
      ersektr@navair.navy.mil

The (Info3.m) and (Info4.m) packages provide a number of enhancements to make it easier to find features in the Mathematica system and are designed to work with Mathematica Versions 3 and 4 respectively.  Two different packages are available to account for the fact that Mathematica Versions 4 has front end options, internal symbols, and named characters not found in Version 3.  All features in the packages are demonstrated below, but first either (Info3.m) or (Info4.m) should be copied to one of the folders returned by evaluating ($Path) in the next cell. I normally put packages in the \(TraditionalForm\`\(\(\\)\(AddOns\)\)\ExtraPackages\)  folder.

$Path

Once the package is copied to a suitable folder it can be loaded with one of the next cells which also turn off spelling messages.

<< Info3.m

<< Info4.m

You might also want to evaluate the next input to turn off spell messages.

Off[General::spell, General::spell1]

(?Aaaaa*)  Enhanced

Suppose you want to see what types of formatting are available.  This can be done by evaluating the next cell and the symbols returned include InputForm, FullForm, TraditionalForm, TableForm and many others.  If the (Info3.m) or (Info4.m) package wasn't loaded first the list also includes symbols such as BlankForm, BoxForm, PrintForm, RuleForm which have no use to a user.  The (Info3.m) and (Info4.m) packages ensure the (?Aaaa*) feature ignores symbols in the "System`" context that are obsolete or (have no usage message and no Help Browser documentation).

?*Form

The (Info3.m) and (Info4.m) packages also ensure that symbols only used as options or option settings are ignored when evaluating (?Aaaa*).  The reason I make it work this way is that you are better off using my enhanced version of Options to find an option matching a string pattern.  A demonstration that (?Aaaa*) ignores options is given in the next cell where only six symbols matching the string pattern "Cell*" are returned.  If you evaluate this cell before loading the package a lot of front end options are displayed.

?Cell*

The usage message of symbols suppressed in the above output can still be displayed.  This is demonstrated in the next cell where the usage message of CellFrame is returned.

?CellFrame

The operators in Section  3.10.4  of The Mathematica Book have built in usage messages, but with most of these operators evaluating (?symb) doesn't display the usage message unless you already used the symbol in an evaluation.  The (Info3.m) and (Info4.m)  packages ensure (?symb) and (?Aaaa*) recognize these symbols before they are used.

Once the package is loaded the next cell displays the usage message for DownArrow even if you haven't used DownArrow.

?DownArrow

The next cell shows all symbols matching the string pattern "*Arrow*".

?*Arrow*

The next cell shows all symbols matching the string pattern "*Right*".

?*Right*

The next cell shows every symbol with the string "Circle".  You will recall Circle is a graphics primitive and the other types of circles are infix operators.

?*Circle*

In case your not familiar with the role of such infix operators, I will explain.  CircleTimes is an infix operator, so (CircleTimes[A, B]) is equivalent to (A⊗B).  A more familiar infix operator is 'And'.  Most users are aware that (And[A, B]) is equivalent to (A && B).  Well it works the same way with the other infix operators, except many of them have no built in meaning.

Not all the "operators" in section 3.10.4 are infix operators.  For example the \[LeftFloor], \[RightFloor] pair are included in section 3.10.4, but they only act as operators when used as a pair to interpret ⌊x⌋  as Floor[x].

A lot of symbols such as Cubics and After don't have a built in usage message.  The (Info3.m) and (Info4.m) packages give usage messages to Cubics, After and over 200 other built in symbols.  Below we see the usage message for Cubics and After.

?Cubics

?After

Want to see all the new usage messages?

You can evaluate the next cell to see the usage messages the (Info3.m) or (Infor4.m) package defines for built in symbols.  Each of these symbols had no usage message until one was defined by the package.

Information[#, LongForm -> False]& /@
      Private`NoUsageMessage;

Options  Enhanced

Cell, Notebook and $FrontEnd each have over 150 options, and some of the options have several suboptions.  From the time Version 3 was released up until May 2000, I thought there was know way to find something in the Option Inspector unless you know exactly how to spell the option. On 31 May 2000,  I accidentally discovered an important feature in the Option Inspector. If you are looking for an option with the word 'Margin' you can go in the Option Inspector and type 
   Margin 
in the 'Lookup' prompt and press Ent, Ent, Ent, ...  
The Option Inspector will take you through every option with the word Margin.  At least it works that way in Version 3 and Version 4 (under MS-Windows).  I hope this works with other platforms as well.
-----------
Depending what you are looking for you may need to first select 
'Show option values for notebook' or
'Show option values for global'.

I needed a way to find Front End options before I discovered this trick, so I included in the (Info3.m) and (Info4.m) packages an enhancement for Options. With this enhancement Options can find options that match a string pattern. The usage message for Options was changed to reflect this and is shown below.

?Options

The new version of Options is demonstrated below where all front end options matching the string pattern "*CellFrame*" are returned.

Options[$FrontEnd, CellFrame]

You can copy and paste one of the above front end options into the look-up feature in the Option Inspector, and then jump directly to the right part of the Option Inspector.

In the next cell Options returns all options matching the string pattern "*Axes*" for a SurfaceGraphics object.

gr = 
        Plot3D[Sin[x + y], {x, 0, π}, {y, 0, π}, 
          AxesStyle -> GrayLevel[0.2], 
          AxesLabel -> {"x", "y", "z"}];

Options[gr, Axes]

In the next cell the enhanced version of Options returns the right options even though View has a global value.

\(View = 10; 
Options[Plot3D, View]\)

Options[Plot3D, {View, Axes}]

Options has the options listed in the next output cell. Each of these options are demonstrated in the subsections below.

Options[Options]

The PreString, PostString  options

Earlier Options[$FrontEnd, CellFrame] returned a list of options containing any string matching the pattern "*CellFrame*". Instead you might want to get the option CellFrame and its setting from the last example.  I gave Options the options PreString and PostString that can make it work this way.  The usage message for these two options are shown below.

?PreString

?PostString

In the next cell we only get the CellFrame option and its setting.  You can make Options work like the built in version by changing the default setting of these options using  SetOptions[Options, PreString->"", PostString->"", SearchDeep->False, AtomsOnly->False].

Options[$FrontEnd, CellFrame, PreString -> "", 
      PostString -> ""]

The SearchDeep option

The (Info3.m) and (Info4.m) packages give Options an option called SearchDeep, and its usage message is shown below.

?SearchDeep

By default The SearchDeep option for Options is True, and that allows the next cell to return all Plot options with the setting Automatic.

Options[Plot, Automatic]

The next cell returns all front end options matching the string pattern "*Screen*".  Notice 'RenderingOptions' doesn't match the specified string pattern, but it has a suboption 'ScreenRasterPostScriptOperator' that does match.

Options[$FrontEnd, Screen]

The next cell does the same thing as the last cell except it doesn't check option settings and suboptions for the string pattern "*Screen*".

Options[$FrontEnd, Screen, SearchDeep -> False]

The next cell returns the front end options that match either of the string patterns "*Screen*" or "*Display*".

Options[$FrontEnd,  {Screen, Display},   SearchDeep -> False]

An inconsistency that couldn't be avoided

There is an inconsistency in the way Options[$FrontEnd, __ ] works with respect to the option SearchDeep.  Even if you use the setting SearchDeep -> True  Options[$FrontEnd,  __]doesn't check the setting of the options.  It takes a while to get the setting of every front end option and Options[$FrontEnd,  __] would evaluate much slower if it checked every setting.  Because of this limitation the next cell finds no front end options matching the string pattern "*Inherited*".

Options[$FrontEnd, Inherited,  SearchDeep -> True]

However, you can find all $FrontEnd options with setting 'Inherited' using the cell below.  

Note:
For reasons I don't understand  Options[$FrontEnd] only returns a subset of the front end options using the built in version of Options.  Once the (Info3.m) or (Info4.m) package is loaded  Options[$FrontEnd] returns all front end options.

s1 = Options[$FrontEnd];
Select[s1, MemberQ[#, Inherited, {-1}] &]

The AtomsOnly option

I also gave Options an Atoms only option and it's usage message is shown below.

?AtomsOnly

The next cell demonstrates when the AtomsOnly option can be useful.  This example returns a long list of options and their settings that match the string pattern "*Margin*".

Options[Cell, Margin]

The output produced from the previous cell is so long it's difficult to work with. Instead you can use the option setting AtomsOnly->True and only get a list of things matching the string pattern "*Margin*".  From the output below you can lookup any one of the options in the Help Browser.

Options[Cell, Margin, AtomsOnly -> True]

A Function Called NamedCharacters

NamedCharacters is a new function defined in the (Info3.m) and (Info4.m) packages and it's usage message is shown below.

?NamedCharacters

In the next cell NamedCharacters is used to find all the special characters that have 'Circle' in their name. The format of the expression returned, recommended by David Bailey, is a list of character names concatenated with a space and the actual character.  You can copy and paste the characters in such an output anywhere in a notebook.

Note:
I learned from David Park that there is an alternative to typing the whole name 'NamedCharacters'.  Instead you can type ' Named Ctrl K ' that's 'Named' followed by simultaneous depression of the keys 'Ctrl' and 'k'.  This a short cut for a menu selection under the Input menu.

Now suppose you want to know if  'EmptySmallCircle'  has an alias.  You can find out by selecting the character name (EmptySmallCircle), or the actual character (◦), in output below, and depressing the F1 key.  Next select the hyperlink for A  .12  .1, and the Help Browser jumps to the listing for EmptySmallCircle.  There you learn that EmptySmallCircle has the alias esci .

NamedCharacters[Circle]

Notice Circle isn't in the above list because it's a graphics primitive (not a named character), and the list includes FilledCircle, EmptyCircle and other named characters that aren't treated as operators.

Below we see that NamedCharacters has three options, and the usage message of each option is shown.

Options[NamedCharacters]

The PreString, PostString  options

?PreString

?PostString

The next cell gives a list of all characters that start with "Right".  The setting PreString->"" ensures the output only includes characters starting with "Right".

NamedCharacters[Right,  PreString -> ""]

The next cell gives a list of characters with "Tee" at the end of their name.  The setting PostString->"" ensures the output only includes characters ending with "Tee".  Also notice the global value of Tee doesn't effect the results.

\(Tee = 5; 
NamedCharacters[Tee, PostString -> ""]\)

The next cell returns a list of characters with "Tee" or "Vector" at the end of their name.

NamedCharacters[Tee, Vector, PostString -> ""]

The CaseSensitive option

?CaseSensitive

By default NamedCharacters has the setting CaseSensitive->False, so the next cell finds all characters with "Slash" or "slash" in their name.  If there were any symbols with "sLaSh" in their name it would have returned them as well.

NamedCharacters[slash]

The next example is the same as the last one except for the setting CaseSensitive->True.  Notice the list returned doesn't include Backslash, RawBackslash.

NamedCharacters[Slash, CaseSensitive -> True]

Undocumented characters in Version 4 !

Version 4 has several undocumented NamedCharacters.  Evaluate the next cell using Version 4 and you can see the characters.

NamedCharacters[AliasDelimiter, AltKey, DeleteKey, DoubleDot, 
      EmptyVerySmallSquare, EnterKey, Euro, Florin, Hyphen, 
      InvisibleApplication, KeyBar, Mod1Key, Mod2Key, NumberSign, 
      OpenCurlyDoubleQuote, OpenCurlyQuote, ScriptDotlessI, ScriptDotlessJ, 
      ShiftKey, ShortDownArrow, ShortUpArrow, SpaceKey, TripleDot, 
      YDoubleDot, 
PreString -> "", 
      PostString -> ""]

All The FrontEnd Options

$FrontEnd Options

All Notebook options and Cell options are also options of $FrontEnd. 
In addition the list of options below are options of $FrontEnd in Version 4.

Besides the options above $FrontEnd has lots of aggregate options and most have several suboptions. 
All aggregate options in Version 4 are listed below, and you can see what suboptions fall under an aggregate option by looking up the aggregate option in the Help Browser.

Including Cell options, Notebook options, all options of $FrontEnd and suboptions of aggregate options the front end has 501 options!

Notebook Options

In Version 4 all Options of Cell except for CellLabel and CellTags are also Notebook options. In addition to the Cell options the options listed below are Notebook options.

Cell Options

All Cell options available in Version 4 are shown below.

Details Details …

How to Make (Info3.m) or (Info4.m) Load Quickly

On my PC the (Info3.m) and (Info4.m) packages take approximately 1.5 seconds to load, and build lists of symbols.  If you are the impatient type you can use DumpSave to make a binary file of the package that will load in approximately 0.05 seconds.

\(\(Apply[
DumpSave["Info.mx", {"Info`Private`", "SpecialCharacters`", Options, 
              Information, 
NamedCharacters, CaseSensitive, 
              PreString, PostString, SearchDeep, 
              AtomsOnly, ##, $LicenseID, $LicenseServer, $SoundDisplay}] &, \ 
        Info`Private`NoUsageMessage
];\)\)

The disadvantages of using packages in the binary file format are that they are different for each types of computer, and they can't be read or edited with a text editor.  Actually the fact that the binary file is not easy to read is an advantage if you want to hide the details of proprietary algorithms in your package!  Once the previous cell is evaluated you should have a file called (Info.mx) in your current working directory.  Evaluating the next cell will return your current working directory.

Directory[]

If your current working directory isn't one of the directories returned by evaluating ($Path) you can move the file (Info.mx) to one of the folders that is in the list ($Path) returns.  You should then be able to use the next line to quickly load the package.

<< Info`

Built in Symbols With No Documentation

You can evaluate the next cell to get a list of undocumented symbols that the (Info.m) package ensures are not recognized by the (?Aaaa*) feature

Private`InternalSymbols

Customize Your Copy of The (Info3.m) or (Info4.m) Package.

Unless you modify (Info3.m) or (Info4.m) the packages ensure that (?Aaaaa*) ignores symbols in the "System`" context with no built-in documentation.  The packages don't actually check to see which symbols are documented.  I made a list of internal symbols by manually looking for documentation for all the obscure symbols in the "System`" context.  I tried to be thorough in this search, but I may have made a few mistakes.  It turns out there are a number of features that are mentioned nowhere except in Chapter 56 of The Beginners Guide To Mathematica Version 3.  I wrote the package to ensure symbols that are only documented in that book are considered "Internal Symbols".  However, you may want to have these symbols recognized by (?Aaaaa*), and you can make it work this way by editing the package with your favorite text editor.

On the other hand you might want to add to the list (InformationIgnoredSymbols) various features that you know you will never use.  The cells below list features that are too advanced for many users, and you may want to add them to InformationIgnoredSymbols to ensure they are ignored by (?Aaaa*).

?*Packet*

?*Dialog*

?*Link*

?*FrontEnd*

?*Stack*

?Elliptic*

?Mathieu*

?Hypergeometric*

?Weierstrass*

Features Only Mentioned in The Beginner's Guide To Mathematica Version 3.0

Theodore Gray is the principal architect of Mathematica's notebook front end, and co-author of The Beginner's Guide to Mathematica Version 3 (see http://www.mathware.com/BeginnersGuide or http://store.wolfram.com/view/ISBN0521622026/?38444D27-137B).  Chapter 56 of this book briefly describes the features listed below, but Wolfram Research provides no documentation for these features either in print or electronic form.  I bet you can't wait to see what Glynn and Gray are saving for the Advanced Guide to Mathematica.

SelectionCellCreateCell
NotebookResetGeneratedCells
DontNotebookResetGeneratedCells
DisplayFlushImagePacket
DisplayPrintOutputPacket
ResetMenusPacket
ConvertToPostScriptPacket
VerboseConvertToPostScriptPacket
ConvertToBitmapPacket
VerboseConvertToBitmapPacket
SetNotebookStatusLine
AddEvaluatorNames
AddMenuCommands
AddDefaultFontProperties
SpeakTextPacket
DisplayPacket
DisplayEndPacket
EvaluatorStart
EvaluatorQuit
EvaluatorInterrupt
EvaluatorAbort
EnterSubsession
ExitSubsession

Options With No Documentation

The features listed below have absolutely no documentation, but I was able to discover that they are options for certain functions.  Now that you know they are options for certain functions you might be able to figure out what they do.  I haven't bothered experimenting with them, so I have no idea what you will find.

Undocumented options for Cell, Notebook and StyleBox  are:
  - DragAndDropEvaluator
  - DragAndDropFunction
  - LayoutInformation
  - Experimental`PopupBoxOptions
  - Experimental`SliderBoxOptions
  - CounterData (a suboption of CounterBoxOptions)
  - CounterEvaluator (another suboption of CounterBoxOptions)
  
AllowScriptLevelChange
is an option for GridBox
 
CoordinateDisplayFunction
is an option for Cell and Notebook
   
WindowAutoSelect
is an option for Notebook

TotalHeight
is an option for OpenAppend, OpenTemporary, OpenWrite and ToString
  
OutputToOutputForm
is an option for  NotebookConvert
  
LinkOptions
is an option for  Install LinkConnect LinkCreate and LinkLaunch
  
Interactive
is an option for  NotebookClose, NotebookConvert, NotebookPrint and NotebookSave.
  
AutoScroll
is an option for NotebookApply, NotebookFind, NotebookWrite and SelectionMove.
  
InputToInputForm
is an option for NotebookConvert.
 
AllowScriptLevelChange
is an option of GridBox and 
also a subsection under GridBoxOptions, which is an option for Cell, GridBox and StyleBox.

AutoIndentSpacings, DrawHighlighted, IndentingNewlineSpacings, MousePointerNote, Placeholder
are options for StyleBox.
 
DiacriticalPositioning
is an option for OverscriptBox, UnderscriptBox, UnderoverscriptBox, and 
is also found in Options[StyleBox].