Re: What is the difference Between MakeBoxes and ToBoxes

*To*: mathgroup at smc.vnet.net*Subject*: [mg132165] Re: What is the difference Between MakeBoxes and ToBoxes*From*: eden.harder1 at gmail.com*Date*: Tue, 7 Jan 2014 22:52:46 -0500 (EST)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-outx@smc.vnet.net*Delivered-to*: mathgroup-newsendx@smc.vnet.net*References*: <713167.1264068057720.JavaMail.root@n11> <hjbvd3$2uq$1@smc.vnet.net>

> George, > > MakeBoxes is very useful if you want to have specially formatted output > display but use standard Mathematica input. Standard input is often more > convenient than a special input (using the Notation package or > MakeExpression) because you don't have to bring up a special box structure > or tab around when entering information. > > Here is a simple example taken from one of my Presentations package essays. > MatrixExp has no special formatting. > > MatrixExp[\[Theta] J] > % /. J -> ( { > {0, -1}, > {1, 0} > } ) // MatrixForm > > Perhaps we would want MatrixExp to format as an exponential when it doesn't > evaluate. We can do it with the following MakeBoxes definition: > > MakeBoxes[MatrixExp[x_], form : StandardForm | TraditionalForm] := > InterpretationBox[#1, #2] & @@ > {SuperscriptBox["\[ExponentialE]", MakeBoxes[x, form]], > MatrixExp[x]} > > Now evaluate the same statements above. (It is the first statement that is > formatted.) Notice the structure of the rhs of the MakeBoxes definition. > InterpretationBox has the Attributes HoldAll, but we can circumvent this by > making it a pure function that we apply to a List. The first item in the > list is the formatted structure and the second item is the internal > representations. The list could be replaced by a Module that did some > calculations to determine the display structure. Notice also that the rhs > uses MakeBoxes on x because we don't know if it might have its own > formatting definitions. > > InterpretationBox also has an option SyntaxForm that can be used to > determine the precedence grouping of the formatted expression, and hence > whether Mathematica adds parentheses in various cases. However, this is not > fully integrated into Mathematica, and in my experience causes FrontEnd > crashes. That is a flaw in Mathematica that I don't like, but usually you > can get by without SyntaxForm. > > Instead of writing the displayed form entirely with low level box > structures, you might be able to write all or part of it with high level > Mathematica expressions and then use ToBoxes to generate the box structures. > It depends on whether the format you want fits into regular Mathematica > formatting, or is just too special. Here we could write the MakeBoxes > definition above as: > > MakeBoxes[MatrixExp[x_], form : StandardForm | TraditionalForm] := > InterpretationBox[#1, #2] & @@ > {ToBoxes[Superscript["\[ExponentialE]", x], form], MatrixExp[x]} > > We also have the high level Interpretation statement and I've used this > successfully in some cases, but it is not as versatile as InterpretationBox. > There is also the Format statement. > > > David Park > djmpark at comcast.net > http://home.comcast.net/~djmpark/ > > > From: George [mailto:gtatishvili at gmail.com] > > May you please advise me what is the difference between "ToBoxes" and > "MakeBoxes"? I read in Mathematica manual and unerstood that the only > differerence is that "MakeBoxes" generates boxes without evaluation of > input...So is that all the difference? > > I saw also some examples where on lhs is "MakeBoxes" and on rhs is > "ToBoxes" when I just changed "MakeBoxes" into "ToBoxes" (and vice > versa) the Mathematica gave me some errors.... So could anybody > explain me with a simple practical example with explanation? > > Thank you very much > George Hi, why you write `form : StandardForm | TraditionalForm` in some sentence? What does it mean? Thanks!