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!