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