Re: Derivatives Output as TraditionalForm
- To: mathgroup at smc.vnet.net
- Subject: [mg124505] Re: Derivatives Output as TraditionalForm
- From: JUN <noeckel at gmail.com>
- Date: Sun, 22 Jan 2012 07:20:51 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jfb2rl$hls$1@smc.vnet.net> <jfe3s2$a34$1@smc.vnet.net>
On Jan 21, 2:26 am, "Oleksandr Rasputinov"
<oleksandr_rasputi... at hmamail.com> wrote:
> On Fri, 20 Jan 2012 06:50:29 -0000, mathgroup <fizzym... at knology.net>
> wrote:
>
>
>
>
>
>
>
>
>
> > The following code was offered in a Wolfram Blog to make Derivatives
> > print
> > out as they would be written with pencil and paper rather then
> > f^(0,1)[x,y] for example....which is standard Mathematica output....here
> > is the code(written by Simon, I think was his name).....the original
> > Blog had a Wolfram program pdConv ...however, you had to apply it to
> > each expression whereas this code , once run, does it throughout the
> > Notebook....
>
> > Derivative/:MakeBoxes[Derivative[inds__][g_][vars__],TraditionalForm]:=ToBo xes[Apply[Defer[D[g[vars],##]]&,Transpose[{{vars},{inds}}]/.{{var_,0}:>Sequ ence[],{var_,1}:>{var}}],TraditionalForm]
>
> > I have 2 Questions....
>
> > (1) Why isnt this code standard within Mathematica rather then having
> > to be Coded by the user?....I used to do all this with Format which
> > was a Royal Nightmare by comparison.........I have never seen what
> > purpose this output f^(0,1)[x,y] served.......or does it???
>
> The notation Mathematica uses is less commonly seen but there is nothing
> especially non-standard about it. If you don't like it, you can change it,
> as the code example demonstrates. As for why Mathematica doesn't use the
> more typical notation in TraditionalForm output, I don't know for sure,
> but I would hazard a guess that it is so that TraditionalForm can be
> re-interpreted into StandardForm without having to be littered with
> InterpretationBoxes to clarify the ambiguous notation. Implementing such
> features is not free, of course, so maybe WRI took the view that their
> time was better spent doing other things.
>
>
>
> > (2) Second....if I want to modify this code to get output as
> > df/dx rather then df[x,y]/dx, , for example , how do I change it?
>
> Derivative/:MakeBoxes[Derivative[inds__][g_][vars__],TraditionalForm]:=
ToBo xes[Apply[Defer[D[g,##]]&,Transpose[{{vars},{inds}}]/.{{var_,0}:>Sequence[] ,{var_,1}:>{var}}],TraditionalForm]
If you look at the comments on that blog,
http://blog.wolfram.com/2011/12/15/mathematica-qa-series-converting-to-conventional-mathematical-typesetting/
you'll see that there were some problems with that approach. E.g., try
the above definition with this derivative:
D[f[g[x]] + h[x, y], {x, 2}] // TraditionalForm
I wouldn't consider the result acceptable. That's why I suggested a
different approach on that page:
Derivative /:
MakeBoxes[Derivative[\[Alpha]__][f1_][vars__Symbol],
TraditionalForm] := Module[{bb, dd, sp},
MakeBoxes[dd, _] ^=
If[Length[{\[Alpha]}] == 1, "\[DifferentialD]", "\[PartialD]"];
MakeBoxes[sp, _] ^= "\[ThinSpace]";
bb /: MakeBoxes[bb[x__], _] := RowBox[Map[ToBoxes[#] &, {x}]];
FractionBox[ToBoxes[bb[dd^Plus[\[Alpha]], f1]],
ToBoxes[Apply[bb,
Riffle[Map[bb[dd, #] &,
Select[({vars}^{\[Alpha]}), (# =!= 1 &)]], sp]]]]
]
Jens