One would have to create a special javascript object that prints as
MathJax, but when selected, gives the SymPy string form. I don't know
what the status of Javascript output type things in the notebook is
(actually, I don't even know Javascript, so I don't even know if this
is possible), so I can't say if this is possible or not. But it's
worth starting a discussion on the IPython list about. I think it
would be really cool.
Of course, selecting just part of an expression would be much harder.
To do that, you would need to have much more knowledge of how the
expression is represented by MathJax.
Regarding the Symbol name, the reason that it's just Symbol("\dot{E}")
is that the Symbol name is just printed literally in the latex output.
So the latex of something like x**2 is just {x}^{2}, and so the latex
of Symbol("\dot{E}")**2 is just {\dot{E}}^{2}. If you need to mix
string and latex printing, the symbol_names option to the latex()
function is useful (though it's currently not very easy to pass this
to IPython for MathJax).
The easiest way to get the version of a SymPy expression that you can
edit is to just print it (this will give the str for of the
expression). Assuming your variable names are the same as your symbol
names, this will give you something that you can just copy and paste*.
If they aren't, srepr() might be of use.
* The goal of str() is to give copy-pastable expressions, and to also
be readable. A key exception to the copy-paste rule is int/int (like
1/2), which will print just as that, and when you enter it, it will be
evaluated by Python as 0.5. To get around this, manually edit the
expression to use something like S(1)/2, paste the expression as a
string to sympify(), or if you are just doing stuff interactively, use
the -i option to isympy.
Aaron Meurer