7
$\begingroup$

This is what I get using Mathematica 9.0.1.

enter image description here

enter image description here

Instead I want this:

enter image description here

I know how to use MakeBoxes, Format and I thought this code would work:

MakeBoxes[(1/2)(expr_), StandardForm]:=
FractionBox[ MakeBoxes[expr, StandardForm], MakeBoxes[2, StandardForm]]

But the code above and all variations that I tried have no effect. This has to be automated to get the look I want. My actual application is much more complicated.

$\endgroup$
6
$\begingroup$

There are multiple internal forms of x / 2. I ran into the same problem here (with 1/4):
Using Hold correctly with Simplify and ComplexityFunction

This appears to work in all cases:

MakeBoxes[expr_ / 2 | Rational[1, 2] expr_, fmt_] := 
  FractionBox[MakeBoxes[expr, fmt], "2"]

(3 + Sin[t])/2

Mathematica graphics

You can better see what is going on with FullForm:

HoldForm @ FullForm[expr_/2]
HoldForm @ FullForm[Rational[1, 2]*expr_]
Times[Pattern[expr,Blank[]],Power[2,-1]]

Times[Rational[1,2],Pattern[expr,Blank[]]]

You need to cover both the Power[2,-1] and Rational[1, 2] cases with your pattern.

$\endgroup$
2
$\begingroup$

If you'd accept a replacement rule, this could be done as follows:

oneHalf /: MakeBoxes[oneHalf[expr_], StandardForm] := 
 FractionBox[MakeBoxes[expr, StandardForm], MakeBoxes[2, StandardForm]]

(3 + Sin[x])/2 /. (expr_)/2 :> oneHalf[expr]

$$\frac{3+\text{Sin}[x]}{2}$$

$\endgroup$
2
$\begingroup$

Perhaps, something like:

 frctnBx /: MakeBoxes[frctnBx[expr_], StandardForm] :=
 With[{num = Numerator[expr], denom = Denominator[expr]},
  Switch[denom, 1, MakeBoxes[num, StandardForm],
  _, FractionBox[MakeBoxes[num, StandardForm], 
  MakeBoxes[denom, StandardForm]]]]

Examples:

 explist = {(f[x] + h[y])/g[y], (f[x] + h[y])/2, (3 + Sin[t])/(5), 
 (1/y) Sin[x], f[22/7, (1/4) Sin[x]]/5}

 Grid[Prepend[ Transpose@{#, frctnBx /@ #} &@explist, {"expr", "frctnBx@expr"}],
  Dividers -> All, BaseStyle -> {FontSize -> 24}]

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.