How can I use color in a mathematical expression without losing horizontal spacing?

\documentclass{article}
\usepackage{xcolor}
\definecolor{red}{HTML}{dd0000}
\begin{document}
\[3+(-5)-2+3\]
\[3+(-5){\color{red}-2}+3\]
\end{document}
How can I use color in a mathematical expression without losing horizontal spacing?

\documentclass{article}
\usepackage{xcolor}
\definecolor{red}{HTML}{dd0000}
\begin{document}
\[3+(-5)-2+3\]
\[3+(-5){\color{red}-2}+3\]
\end{document}
You have to work a bit harder, telling TeX the kind of object you want:
\documentclass{article}
\usepackage{xcolor}
\definecolor{red}{HTML}{dd0000}
\begin{document}
\[3+(-5)-2+3\]
\[3+(-5)\mathbin{\textcolor{red}{-}}\textcolor{red}{2}+3\]
\end{document}
For a one shot application this is probably the easiest way. If the emphasis color is always the same, you could define a new command:
\newcommand{\mathem}[2][\mathord]{%
#1{\textcolor{red}{#2}}}
and input the above as
3 + (-5) \mathem[\mathbin]{-} \mathem{2} + 3

You lose the horizontal spacing because of the brace group {}. Besides egreg's solution there are two ways that don't require telling TeX the kind of object you want:
Use \begingroup ... \endgroup instead of {...},
Use \color{black} to switch back to black.
Both yields the same result:

\documentclass{article}
\usepackage{amsmath} % for gather
\usepackage{xcolor}
\definecolor{red}{HTML}{dd0000}
\begin{document}
\begin{gather*}
3+(-5)-2+3 \\
3+(-5) \color{red} -2 \color{black} +3 \\
3+(-5)\begingroup\color{red}-2\endgroup+3
\end{gather*}
\end{document}
\mathbinor if you know the argument is a single character you can look up its existing type from its\mathcodeand insert the appropriate\mathxxcommand automatically, see for example http://tex.stackexchange.com/questions/101699/how-to-escape-in-latexs-for-loop – David Carlisle Mar 13 '13 at 11:21