7

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.

Ted Ersek
  • 7,124
  • 19
  • 41

3 Answers3

6

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.

Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
2

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}$$

Jens
  • 97,245
  • 7
  • 213
  • 499
2

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

kglr
  • 394,356
  • 18
  • 477
  • 896