The output of foo=Exp[x]
is formatted automatically as $e^x$. For long expressions it's not as easy to read as Exp[...]. How to format the output so that $e^{something}$ shows up in function-call form as Exp[something]? I know about HoldForm[]
but I want to transform the output only without touching previous code.
1 Answer
As Nasser already pointed out that exponential expressions are converted into powers. You can find the corresponding documentation in the Possible Issues section of Exp
When you know this, than you can circumvent the issue by holding your expression and replacing all exponential powers to Exp[..]
again. Therefore, a simple solution is
FormatExp[expr_] := HoldForm[expr] /. HoldPattern[Power[E, arg_]] :> Exp[arg]
and then you go
FormatExp[Series[(1 + z/n)^n, {n, Infinity, 2}]]
The good thing is that the displayed expressions are still functional because there is only a HoldForm
wrapped around which prevents evaluation. Therefore, if you wanted to use such a displayed result, you can use ReleaseHold
Normal[ReleaseHold[%]]
There is another alternative. I wasn't sure whether to show it but let's give it a try. As you might know we have Format
which can be used to set formatting rules to symbols. The problem here is, that we need to assign a special formatting rule to Power
which is a protected built-in symbol. Therefore, use it with caution as I can not predict whether this breaks something.
Unprotect[Power];
Format[HoldPattern[Power[E, arg_]]] := DisplayForm[RowBox[{"Exp", "[", arg, "]"}]];
Protect[Power];
Now, every Exp
is displayed per default as Exp[..]
and everything should work as expected.
-
$\begingroup$ The first solution is excellent: at the last step where one needs to display some result, just use
......//FormatExp
. $\endgroup$ Commented Dec 31, 2014 at 5:21 -
1$\begingroup$ @david You could replace
HoldForm
withDefer
which would allow reuse without evenReleaseHold
. Also an alternative to the second method that does not require unprotectingPower
:MakeBoxes[E^arg_, form_] := RowBox[{"Exp", "[", ToBoxes[arg, form], "]"}]
$\endgroup$ Commented Dec 31, 2014 at 7:29 -
$\begingroup$ @Mr.Wizard Unbelievable, I had already added the
MakeBoxes
method (infact by up-valueing it) but I simply forgot to save the edit-edit :-( I guess it simply was too late and I was already asleep. $\endgroup$ Commented Dec 31, 2014 at 9:52 -
$\begingroup$ @Mr.Wizard How about adding a
LeafCount
conditional toMakeBoxes
as in:MakeBoxes[E^arg_, form_] := RowBox[{"Exp", "[", ToBoxes[arg, form], "]"}] /; LeafCount[arg] >= 10
. ThenE^Sqrt[x]
formats differently thanE^Sqrt[x^2+y^2]
. Would you say this is objectionable? $\endgroup$ Commented Dec 31, 2014 at 20:57 -
$\begingroup$ @QuantumDot I do not see why that would be objectionable. $\endgroup$ Commented Dec 31, 2014 at 23:51
InputForm[expr]
usesE^...
, may be you can try InputForm? For example, screen shot: !Mathematica graphics $\endgroup$Power[E,argument]
. So the differences are in screen presentation. To be able to do what you want, my guess is one must go to lower level and useMakeBoxes
and such to force the screen display toExp[..]
, which is out of my level of skill. May be someone will be able to do this. $\endgroup$