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}
Something like:
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It only takes a minute to sign up.
Sign up to join this communityThe 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}
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!
\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?
_
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.
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.
expl3
and LaTeX2e stuff, unfortunately...
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}