Formatting Expressions
- To: mathgroup at smc.vnet.net
- Subject: [mg13937] Formatting Expressions
- From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
- Date: Tue, 8 Sep 1998 02:52:34 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Evaluate Clear[n]; then 1.0(5^n) will produce an output that looks a bit like (1.5)^n. 1.0(5.2^n) will produce an output might be mistaken for 1.5(.2^n). 2(5.2^n) will produce an output that be mistake for 25(.2^n). Well that's what I think. I don't like to depend on the little space to convey the meaning of expressions except for multiplication of variables. I don't mind using (x y) to indicate the product of (x) and (y) because I won't use the variables (x), (y), and (xy) in the same expression. Anyone who does is looking for trouble. Also I prefer to have the difference of two terms displayed as a difference. For example I prefer to have (b-a) displayed as (b-a) not (-a+b). TraditionalForm does this, but you need special rules to make StandardForm do this. In the line below I give formatting rules that I find much better. Of course the saying about beauty in the eye of the beholder applies here. Several months ago I posted similar rules, but I find these much better. Cheers, Ted Ersek (***********************************) (*** Use better format rules for expressions with Head Times. ****) Module[{wasprotected=Unprotect[Plus,Times,MakeBoxes]},( MakeBoxes[c_Integer*b_Real^expon_,form_]:= RowBox[{MakeBoxes[c,form],"(",MakeBoxes[b^expon,form],")"}]/; (c=!=-1)&&(expon=!=1/2)&&(expon=!=-1/2); MakeBoxes[c_Integer*b_Integer^expon_,form_]:= RowBox[{MakeBoxes[c,form],"(",MakeBoxes[b^expon,form],")"}]/; Not[TrueQ[Negative at expon]]&&(c=!=-1)&&(expon=!=1/2); MakeBoxes[1.` *b_^expon_,form_]/; MachineNumberQ[Re[b]]||MachineNumberQ[Re[expon]]|| MachineNumberQ[Im[b]]||MachineNumberQ[Im[expon]]:= MakeBoxes[b^expon,form]; MakeBoxes[-1.` *b_^expon_,form_]/; MachineNumberQ[Re[b]]||MachineNumberQ[Re[expon]]|| MachineNumberQ[Im[b]]||MachineNumberQ[Im[expon]]:= RowBox[{"-",MakeBoxes[b^expon,form]}]; MakeBoxes[c_Real*b_Integer^expon_,form_]:= RowBox[{MakeBoxes[c,form],"(",MakeBoxes[b^expon,form],")"}]/; Not[TrueQ[Negative at expon]]&&(expon=!=1/2); MakeBoxes[c_Complex*b_Integer^expon_,form_]:= RowBox[{"(",MakeBoxes[c,form],")",MakeBoxes[b^expon,form]}]/; (expon=!=1/2); MakeBoxes[c_Real*b_Real^expon_,form_]:= RowBox[{MakeBoxes[c,form],"(",MakeBoxes[b^expon,form],")"}]/; (expon=!=1/2); MakeBoxes[c_Complex*b_Real^expon_,form_]:= RowBox[{"(",MakeBoxes[c,form],")",MakeBoxes[b^expon,form]}]/; (expon=!=1/2); (** Ensure a difference is displayed as a difference **) MakeBoxes[(n_Integer|n_Rational|n_Real)a_.+ b_,form_]/; (Head[b]=!=Plus)&&(n<0)&&(Head[b]=!=Complex)&&(Head[a]=!=Complex):= RowBox[{MakeBoxes[b, form],"-", MakeBoxes @@ {-n*a, form}}]; MakeBoxes[(z_Complex)a_.+ b_,form_]/; (Head[b]=!=Plus)&&(Im[z]<0)&&(Re[z]===0)&&(Head[b]=!=Complex):= RowBox[{MakeBoxes[b, form],"-", MakeBoxes @@ {-z*a, form}}]; (** Consolidate the above formatting rules under MakeBoxes. **) (** Also return protection to Plus and Times as appropriate. **) FormatValues[MakeBoxes]=Join[ FormatValues[Times], FormatValues[MakeBoxes], FormatValues[Plus] ]; FormatValues[Plus]={}; FormatValues[Times]={}; Protect@@wasprotected; ) ] (** Some personal preferences **) SetAttributes[MakeBoxes,{ReadProtected, Protected}];