Skip to main content

Front End options


Inspired by a recent question and others like it, and not finding an existing duplicate, I ask:





  • What is the hierarchy of Front End options?




  • How do they work?




  • How can their values be set and recalled?





Answer




Option hierarchy


Quoting John Fultz:



Options work on an inheritance model. ... It all starts someplace. That would be the hard-coded option values in the front end C code. The root of the inheritance of options. Then one typically thinks of $FrontEnd as being the next level down, but there's another level in between. That is $DefaultFrontEnd. So, at the global level, it's -> $DefaultFrontEnd -> $FrontEnd -> $FrontEndSession. But only values set to $FrontEnd get written to your preferences file.



In addition to these global settings many Front End options (or their equivalents) can be set at the Notebook level, with e.g. EvaluationNotebook[], and these, when set, take local priority.


Settings made to the Notebook are saved in the Notebook (.nb). Settings made to $FrontEnd are saved in:


FileNameJoin[{$UserBaseDirectory, "FrontEnd", "init.m"}]

Settings to either $FrontEndSession or $DefaultFrontEnd do not persist between sessions. Settings made to $FrontEndSession override those to $FrontEnd for the duration of the session, while $DefaultFrontEnd are only used if the same option is specified nowhere else.



Setting and recalling option values


$FrontEnd and Notebook options can be set and cleared using the Option Inspector with the menu selections Global Preferences and Selected Notebook respectively. To clear an option click the x next to its option name:


enter image description here


Options can be set and recalled at all levels with SetOptions and Options.
For example one could make the following settings:


SetOptions[$DefaultFrontEnd,     FontColor -> Red    ]

SetOptions[$FrontEnd, FontColor -> Orange ]

SetOptions[$FrontEndSession, FontColor -> Magenta]


SetOptions[EvaluationNotebook[], FontColor -> Blue ]

Many options are aslo accessible and configurable through CurrentValue. An unqualified CurrentValue will show the value lowest in the hierarchy (with the highest priority):


CurrentValue[FontColor] // InputForm


RGBColor[0, 0, 1]  (* blue *)

A qualified CurrentValue will show the other settings as well:



CurrentValue[#, FontColor] & /@
{$DefaultFrontEnd, $FrontEnd, $FrontEndSession} // InputForm


{RGBColor[1, 0, 0],    (* red     *)
RGBColor[1, 0.5, 0], (* orange *)
RGBColor[1, 0, 1]} (* magenta *)

The qualified form may be used to set option values:


CurrentValue[EvaluationNotebook[], FontColor] = Green;


If the Notebook option is cleared through the Option Inspector, or a new Notebook is opened, the next setting up the hierarchy is used:


CurrentValue[FontColor] // InputForm


RGBColor[1, 0, 1]

After Mathematica is restarted the $FrontEnd setting persists:


CurrentValue[FontColor] // InputForm



RGBColor[1, 0.5, 0]



As David Creech noted in a comment it is possible to use Inherited as an option value to un-set that option and revert to the next higher level of the hierarchy. Example:


SetOptions[EvaluationNotebook[], FontColor -> Blue]

Options[EvaluationNotebook[]]



{FontColor -> RGBColor[0, 0, 1], FrontEndVersion -> . . .}



SetOptions[EvaluationNotebook[], FontColor -> Inherited]

Options[EvaluationNotebook[]]


{FrontEndVersion -> "10.1 for Microsoft Windows . . .}



Note that the Option has been entirely removed from the Notebook options list.



Comments

Popular posts from this blog

plotting - Filling between two spheres in SphericalPlot3D

Manipulate[ SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 1}] I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ... Answer There is no built-in filling in SphericalPlot3D . One option is to use ParametricPlot3D to draw the surfaces between the two shells: Manipulate[ Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], ParametricPlot3D[{ r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]}, r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}}, {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]], {n, 0, 1}]

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]

plotting - Adding a thick curve to a regionplot

Suppose we have the following simple RegionPlot: f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}] Now I'm trying to change the curve defined by $y=g[x]$ into a thick black curve, while leaving all other boundaries in the plot unchanged. I've tried adding the region $y=g[x]$ and playing with the plotstyle, which didn't work, and I've tried BoundaryStyle, which changed all the boundaries in the plot. Now I'm kinda out of ideas... Any help would be appreciated! Answer With f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 You can use Epilog to add the thick line: RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}, PlotPoints -> 50, Epilog -> (Plot[g[x], {x, 0, 2}, PlotStyle -> {Black, Thick}][[1]]), PlotStyle -> {Directive[Yellow, Opacity[0.4]], Directive[Pink, Opacity[0.4]],