Change the color of a single dot in `ddot` symbol

The following uses two slightly shifted coloured \dot macros. The placement is not perfect and might be really bad for some letters.

\documentclass[]{article}

% for colours
\usepackage{xcolor}
% for mighty interface to define new macros, it also loads the l3 kernel
\usepackage{xparse}
% for \mathrlap
\usepackage{mathtools}

% change to the coding language of LaTeX3 (in which spaces are ignored, that why
% I can do stuff like { #2 } etc., also _ is a character now and can be part of
% macro names)
\ExplSyntaxOn
% define a user facing macro, it takes one optional argument, which by default
% is empty and a mandatory one (neither of them can contain a \par). The
% optional argument will be split at a "," once.
\NewDocumentCommand \cddot { >{\SplitArgument{1}{,}}O{} m }
  {
    % pass on the now split argument #1 and the mandatory argument #2. #1 will
    % be something like { #1.1 } { #1.2 }
    \__manooooh_cddot:nnn #1 { #2 }
  }
% define a new internal macro (\cs_new_protected:Npn is like \protected\def)
\cs_new_protected:Npn \__manooooh_cddot:nnn #1 #2 #3
  {
    % start a new group
    \group_begin:
    % check whether the first argument is blank (meaning it only contains spaces
    % or nothing), if it isn't blank change the \color. It will be blank if you
    % don't use an optional argument or if you start your optional argument with
    % a ","
    \tl_if_blank:nF { #1 } { \color { #1 } }
    % \mathrlap will print its argument without really taking any space, phantom
    % will only take the space of #3, \mkern-1.5mu will move the dot slightly to
    % the left
    \mathrlap { \mkern-1.25mu \dot { \phantom { #3 } } }
    % end the group containing the first \color
    \group_end:
    % start a new group
    \group_begin:
    % IfValueT will check whether the second part of the split argument was
    % available (so will result in True if there was a comma in [#1]). If there
    % was a second argument assume it is the second \color
    \IfValueT { #2 } { \color { #2 } }
    % again \mathrlap and a phantom #3, this time shifting the dot slightly to
    % the right by 2mu
    \mathrlap { \mkern+2.25mu \dot { \phantom { #3 } } }
    % end the second \color's group
    \group_end:
    % print #3 without further ado (since we used \mathrlap previously we're
    % still on the same spot and due to the \phantom #3 will only be printed
    % visible once
    #3
  }
% end the LaTeX3 programming syntax
\ExplSyntaxOff

\begin{document}
% without optional argument
$\cddot{x}$

% with the first half of the optional argument
$\cddot[blue]{x}$

% with the second half of the optional argument
$\cddot[,green]{x}$

% with both halves of the optional argument
$\cddot[blue,green]{x}$

% for comparison
$\ddot{x}$
\end{document}

enter image description here


Adapting from the definition of \dddot in amsmath. The bottom line in the picture shows the symbol superimposed on each other; the difference is really negligible.

\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}

\makeatletter
\DeclareRobustCommand{\colorddot}[3]{%
  % #1=color of first dot, #2=color of second dot, #3=accentee
  {\mathop{\kern\z@#3}\limits^{%
    \vbox to-1.55\ex@{%
      \kern-\tw@\ex@
      \hbox{\normalfont\kern0.05em\textcolor{#1}{.}\kern-0.085em\textcolor{#2}{.}}
      \vss
    }%
  }}%
}
\makeatother

\begin{document}

$\ddot{x}$

$\colorddot{green}{blue}{x}$

$\ddot{x}$\llap{$\colorddot{green}{blue}{x}$}
$\colorddot{green}{blue}{x}$\llap{$\ddot{x}$}

\end{document}

Beware that the different colors will make the dots to appear misaligned.

enter image description here


One may just use the accents package, which was made for this.

\documentclass{article}
\usepackage{amsmath}
\usepackage{accents}
\usepackage{pgffor}
\usepackage{xcolor}
\newcommand{\ColorDots}[2]{\accentset{\foreach \X in {#1}
{\textcolor{\X}{\boldsymbol{.}}}}{#2}}
\begin{document}
$\accentset{\boldsymbol{..}}{x}$ $\ColorDots{red,blue}{y}$ $\ColorDots{red}{z}$
$\ColorDots{red,orange,blue}{X}$
\end{document}

enter image description here