14

How can we change any of the two dots of the ddots math symbol?

I can change both of them:

\documentclass{article}

\usepackage{xcolor}

\begin{document}

$\color{red}\ddot{\color{black}x}$

\end{document}

Two colored dots

Something like:

Example 1

Example 2

3 Answers 3

16

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

6
  • I have never read about NewDocumentCommand. I compared the normal output with yours and they are indeed the same! Maybe adding more stuff will break the line spacing, but we need an example for that. Thanks for the answer!
    – manooooh
    Mar 21, 2019 at 9:46
  • 2
    @manooooh \NewDocumentCommand is part of xparse which is a LaTeX3 package to define macros with powerful syntax. Also I use \tl_if_blank:nF which is part of LaTeX3's l3tl which is part of the L3 kernel. Do you want me to add comments to the code to explain it a bit?
    – Skillmon
    Mar 21, 2019 at 9:50
  • 2
    It would be fantastic.
    – manooooh
    Mar 21, 2019 at 9:52
  • 2
    @manooooh I've added loads of comments to the code, if you still have questions, feel free to ask.
    – Skillmon
    Mar 21, 2019 at 10:08
  • 1
    @manooooh the spaces are only a useful side effect (no unintentional spaces which is often an issue, especially for people not that experienced in writing their own macros), the main point being the _ and : in macro names, which is the internal convention of L3. Without \ExplSyntaxOn I couldn't use macros like \tl_if_blank:nF directly. The macro names in L3 are built from several parts, tl is the module it's taken from, _if_blank is the name/description, :nF means it takes two arguments, one a normal one, the second executed in the False branch.
    – Skillmon
    Mar 21, 2019 at 10:18
13

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

5
  • 2
    Why is the kern slightly different between the cases? It is more than just an appearance. Mar 21, 2019 at 10:26
  • 2
    @StevenB.Segletes Refined. :-)
    – egreg
    Mar 21, 2019 at 10:33
  • 3
    Did you just post a non-expl3 answer while I did?
    – Skillmon
    Mar 21, 2019 at 11:39
  • 1
    @Skillmon Let's share the task of promoting expl3. ;-)
    – egreg
    Mar 21, 2019 at 11:44
  • 1
    @egreg well, mine is a wild mix of expl3 and LaTeX2e stuff, unfortunately...
    – Skillmon
    Mar 21, 2019 at 11:46
13

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

1
  • 3
    Using a package which was made for it seems wrong :)
    – Skillmon
    Mar 22, 2019 at 20:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .