Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

MakeBoxes vs Format

  • To: mathgroup at smc.vnet.net
  • Subject: [mg60073] MakeBoxes vs Format
  • From: ted.ersek at tqci.net
  • Date: Thu, 1 Sep 2005 02:13:09 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

We can use the following to change the way things
like (x/y) are displayed in output.

In[1]:=
  (** MakeBoxes definition **)
  MakeBoxes[Times[num_,den_^-1], form_]:=
    RowBox[{MakeBoxes[num, form],
      FractionBox[1,MakeBoxes[den,form]]
    }]


The following shows the boxes that are then displayed after
evaluating (x/y).

In[2]:=
  ToBoxes[x/y]

Out[2]=
  RowBox[{x,FractionBox[1,y]}]

-------------------
The MakeBoxes definition above is stored in  FormatValues[MakeBoxes]. The
next line removes the above definition.

In[3]:=
  FormatValues[MakeBoxes]=.


--------------------
The next line does almost the same thing as the MakeBoxes definition
above, but here I use a Format definition instead. This gives us TWO
format definitions stored in  FormatValues[Times]. Isn't that strange.


In[4]:=
  Unprotect[Times];
  (** Format definition **)
  Format[Times[num_,den_^-1]]:=
    DisplayForm[RowBox[{num,FractionBox[1,den]}]]

In[6]:=
  ToBoxes[x/y]

Out[6]=
  TagBox[RowBox[{x,FractionBox[1,y]}],DisplayForm]


-------------------

Mathematica checks for Format definitions before it uses MakeBoxes
definitions.


Format has no Hold attributes, but MakeBoxes has the HoldAllComplete
attribute. So we often have to use MakeBoxes as a pure function on the
right side of a MakeBoxes definition.
Example:  MakeBoxes[#,StandardForm]& @@{-n}


Most or all boxes (SubscriptBox, GridBox, FractionBox, ...) require
Strings or other boxes. So unless you know the argument of a box is a
String you have to call MakeBoxes on that argument.


---------------
QUSETIONS:

Is it possible to make a Format definition that makes the same output
boxes as the MakeBoxes definition above?  Not as far as I can tell.

What's up with the two rules we get in FormatValues[Times] after
evaluating the above Format definition?

When and why should we use (Format definitions) vs (MakeBoxes definition).

Are there any other pros and cons between use of MakeBoxes and Format?

-----------
   Ted Ersek  :)





  • Prev by Date: Re: Best construct for control structure
  • Next by Date: Re: Re: my wish list for Mathematica next major version
  • Previous by thread: Re: Re: Best construct for control structure
  • Next by thread: Re: MakeBoxes vs Format