I like to use $:=$ for "is defined to be equal to", but this is never typeset with the symmetry one would like, as the colon is always too low relatively to the equals sign. Is there any way of getting this to appear correctly?
- 21,014
- 5
- 65
- 121
- 2,863
12 Answers
See the mathtools package, which offers the macro \coloneq for this purpose.
\documentclass{standalone}
\usepackage{mathtools}
\begin{document}
\( b := 10 \) \emph{versus} \( b \coloneq 10 \).
\end{document}
yields
Click image or right here to see it at full size (1600×133).
Note that the colon is slightly too low on the left, but vertically centered on the right.
Edit: as of 2022, \coloneq replaces legacy \coloneqq (which is still supported, but now labeled a 'Legacy duplicate name' in the mathtools docs' colon symbols list)
- 276
- 259,911
- 34
- 706
- 1,036
-
21@EmilJeřábek Perhaps you can't see it very well in the image, but if you run the code and zoom in on the PDF you'll find the second version has the
:and=on the same axis whereas the first one doesn't. – Joseph Wright May 20 '14 at 16:55 -
9Is there a unicode symbol for :=, with same benefits as \coloneqq? Yes: U+2254 – phs Mar 07 '17 at 12:12
This answer is an attempt to make Matthew happy, who doesn't like that the dots in the colon are so far apart. (@Matthew: I do understand that you don't like it.)
\makeatletter
\newcommand*{\defeq}{\mathrel{\rlap{%
\raisebox{0.3ex}{$\m@th\cdot$}}%
\raisebox{-0.3ex}{$\m@th\cdot$}}%
=}
\makeatother

EDIT:
To make Matthew even happier, I provide yet another answer that uses a different approach (motivated by the definition of \vdots) where the dots are smaller:
\newcommand*{\defeq}{\mathrel{\vcenter{\baselineskip0.5ex \lineskiplimit0pt
\hbox{\scriptsize.}\hbox{\scriptsize.}}}%
=}

- 37,935
-
4thanks for caring about my happiness. :-) In addition to the dots being the same distance apart as the lines, I were writing ":=" with chalk or pencil I think the diameter of the dots would be about the same as the line width. Can you do that? – Matthew Leingang Nov 03 '10 at 18:12
-
@Matthew: I saw this question coming ... yes, the dots are rather large, and I should be able to make them smaller. – Hendrik Vogt Nov 03 '10 at 18:18
-
5
-
3
-
8
-
1
-
2@tohecz: You're right, but do you really want to define something in an index? Or is there some other usage of the symbol? – Hendrik Vogt Feb 10 '13 at 08:00
-
What’s nice is that it’s easy to adapt for
::=(the symbol we use for BNF grammar definitions). What’s less nice is that the tweaking apparently depends on the font and size (in my case I had to reduce the\baselineskipand put the dots in\tinyinstead of\scriptsize, and their size doesn’t adapt when the font size changes; for that I replaced\tinywith\smaller[3]from packagerelsize). Any way to adjust to the height of the equal sign and/or to the width of its bars automatically? – Maëlan May 10 '22 at 17:34
I prefer Donald Arseneau's hack that can be found on the TeX FAQ (sorry, this links to a page in German):
\mathchardef\ordinarycolon\mathcode`\:
\mathcode`\:=\string"8000
\begingroup \catcode`\:=\active
\gdef:{\mathrel{\mathop\ordinarycolon}}
\endgroup
Just put this code into your preamble. Then you can use := as usual, and you'll get horizontal symmetry. Much easier to use than \coloneqq, in my opinion.
Per @Will Robertson's comment, there is also a feature of mathtools to change the vertical alignment of all colons in math mode.
\mathtoolsset{centercolon}
- 402
- 2
- 14
- 37,935
-
46
-
@Will Robertson: Thanks for the tip. I already thought that this should be in some package, but didn't find it. – Hendrik Vogt Oct 17 '10 at 14:40
-
1@WillRobertson That is definitely worth an answer on its own. – Henrik Schumacher Feb 25 '20 at 09:22
There is also a package by Heiko Oberdiek: colonequals
Some fonts have dedicated characters for these symbols. Unfortunately, there are name clashes concerning \coloneq, which may refer to :- or to ≔ (U+2254, :=).
I tried quite some of the solutions given here but none of those seemed satisfactory to me. Most of them only solve the problem of the vertical alignment of the colon but do not respect the length of all the other binary relations, that is ":=" is much longer than "=" and the like.
My suggestion hence is the following:
\newcommand{\eqcolon}{\mathrel{\resizebox{\widthof{$\mathord{=}$}}{\height}{ $\!\!=\!\!\resizebox{1.2\width}{0.8\height}{\raisebox{0.23ex}{$\mathop{:}$}}\!\!$ }}}
\newcommand{\coloneq}{\mathrel{\resizebox{\widthof{$\mathord{=}$}}{\height}{ $\!\!\resizebox{1.2\width}{0.8\height}{\raisebox{0.23ex}{$\mathop{:}$}}\!\!=\!\!$ }}}
This will result in ":=" beeing equally long as "=" so it will align properly in multiline math equations. Below is a comparisson of the approach \newcommand{\eqcolon}{\ensuremath{\mathrel{=\!\!\mathop{:}}}} with my suggestion. Note how the lines align properly in amsmath align environments.
Before:
After:
- 111
-
Welcome to TeX.SX! You can have a look at our starter guide to familiarize yourself further with our format. – Martin Schröder Oct 28 '15 at 14:47
-
-
4@MartinSchröder Why is that? I had the same problem to typeset $:=$ for "defined as". I use this sometimes to define auxillary variables that I only use locally. I just wanted to share my result as I was not satisfied with the typographic quality of other solutions here and in similar questions (e.g. Typesetting the “define equals” symbol). – jenom Oct 28 '15 at 15:24
I actually think that symbol looks ugly. It would be OK if the spacing between the dots were the same as that between the lines of the equals. But I use
\newcommand{\defeq}{\stackrel{\text{def}}{=}}
instead.
- 21,014
- 5
- 65
- 121
- 44,937
- 14
- 131
- 195
-
13Whereas I think that the overset "def" is ugly (and illegible from any distance)! There's no accounting for taste ... – Andrew Stacey Oct 18 '10 at 08:04
-
-
20One advantage of := is that ir is bidirectional. := and =: mean different things. \defeq and \triangleeq loose that distinction. – Aditya Oct 18 '10 at 13:41
-
5+1 for this. ":=" is programming jargon and, as Charles Stewart points out, misused programming jargon. Personally, I prefer \newcommand{\defeq}{\stackrel{\textup{\tiny def}}{=}}. Then Andrew Stacey can't see it at all, and everyone's happy. – Mephisto Oct 19 '10 at 00:08
-
3@Charles: thanks for matching my braces. @Aditya: I see your point of view, but I think bidirectional means the opposite of the way you're using it. – Matthew Leingang Oct 21 '10 at 01:08
-
3@Matthew: I'd use your
\defeqto indicate that an equality holds by definition (i.e., by a definition stated earlier). I've posted another answer that changes the spacing of the dots. – Hendrik Vogt Nov 03 '10 at 16:49 -
1In a similar vein, I've also seen (and quite like)
\stackrel{\Delta}{=}. – Simon Nov 04 '10 at 00:00
My solution is
\def\defeq{\mathrel{\mathop:}=}
- 44,937
- 14
- 131
- 195
- 651
-
This is not a good solution because you can have a line break between the : and the = (
mathtoolshad this bug a while back, see https://groups.google.com/group/comp.text.tex/msg/50796a27e6b04a0f?hl=en). – Aditya Nov 03 '10 at 17:54 -
9@Aditya: something like
\mathrel{\mathop:}=does not break between lines, but using\mathrel{\mathop:}\mkern-1.2mu=as inmathtoolsdoes introduce a breaking point at the\mkern(and can be solved by putting a\nobreakjust before\mkernor by wrapping everything in a\mathrel). – Philippe Goutet Dec 11 '10 at 23:24
You may try \coloneq (as well as \eqcolon) from unicode-math package:
Note that unicode-math requires XeLaTeX/LuaLaTeX.
- 2,710
I use \vcentcolon= from the mathtools package. I like it better than \coloneqq because with the former, there is more spacing between the colon and the equals sign.
Edit: I didn't know this at the time of writing this answer, but commath is not a well designed package, and it can lead to obscure problems. I would stay away from it and use a solution from another answer.
The commath package automatically fixes the alignment of := and =: in math mode.
...
\usepackage{commath}
...
\begin{gather*}
a := b \\
b =: a
\end{gather*}
...
- 131







a\colon=b. The nice thing about this notation is that it readily generalizes to logical definitions of the forma\colon\leftrightarrow bwhere you cannot readily assert equality. It also looks great as it avoids the visual problem of the : and = not aligning. – FUZxxl Oct 02 '17 at 15:47