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?

  • 3
    ":=" is usually meant to be a quite different concept, namely imperative assignment. – Charles Stewart Oct 18 '10 at 12:58
  • 42
    @Charles: I've seen it used for both. Pure mathematicians, who have little use for imperative assignment, I think tend to use it more for definitional equality. – Antal Spector-Zabusky Nov 3 '10 at 19:34
  • 8
    Oh yes, they do, all the time. – Hendrik Vogt Nov 4 '10 at 7:26
  • 11
    @Charles: I don't think it's any sloppier than, say, an algebraist writing H < G for "H is a subgroup of G". Sure, we think of < as meaning numerically less than, but there's no ambiguity in the context. And there's a related meaning in both cases: both uses of < give rise to a poset, and both uses of := mark some "special" form of equality. And since most mathematicians have no use for the imperative :=, there's no confusion. Just my 2¢. (Personally, I'm not particularly fond of either usage of :=, preferring "we define x to be …" or "x = …" for the one and "var ← value" for the other.) – Antal Spector-Zabusky Nov 4 '10 at 10:28
  • 5
    @user, you were misinformed. The symbol goes much further back, to APL and the Pascal family of languages. It's meant to resemble APL's left-pointing arrow, which is of course not part of ASCII. That's why people associate it with "imperative assignment" in the discussion. – alexis Apr 18 '13 at 10:17

11 Answers 11


See the mathtools package, which offers the macro \coloneqq for this purpose.

\( b := 10 \) \emph{versus} \( b \coloneqq 10 \).


Preview of the above document

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.

  • 1
    I don’t get it. Isn’t the \coloneqq in the image just as asymetric as the := on the left? What does the package solve, then? – Emil Jeřábek May 20 '14 at 16:48
  • 20
    @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
  • 8
    Is there a unicode symbol for :=, with same benefits as \coloneqq? Yes: U+2254 – phs Mar 7 '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.)



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

  • 1
    thanks 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 3 '10 at 18:12
  • 4
    @Matthew: Happy now? – Hendrik Vogt Nov 3 '10 at 19:13
  • 2
    Not bad at all. – Matthew Leingang Nov 3 '10 at 19:18
  • 6
    Fantastic! I've been looking for this for ages. +++++1 – Glen Wheeler Sep 6 '11 at 7:45
  • 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 8:00

I prefer Donald Arseneau's hack that can be found on the TeX FAQ (sorry, this links to a page in German):

\begingroup \catcode`\:=\active

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.

  • 39
    This is already part of mathtools: \mathtoolsset{centercolon} – Will Robertson Oct 17 '10 at 14:34
  • @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 9:22

Obligatory ConTeXt solution: \colonequals; which uses a composed character in MkII and the proper unicode math character in MkIV


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, :=).


A way to get this with pxfonts without including the whole package:


and you get:

it's a:= b magic!


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



  • 10
    Whereas 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 8:04
  • 19
    One advantage of := is that ir is bidirectional. := and =: mean different things. \defeq and \triangleeq loose that distinction. – Aditya Oct 18 '10 at 13:41
  • 4
    +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 0: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 1:08
  • 3
    @Matthew: I'd use your \defeq to 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 3 '10 at 16:49

My solution is

  • This is not a good solution because you can have a line break between the : and the = (mathtools had this bug a while back, see groups.google.com/group/comp.text.tex/msg/…). – Aditya Nov 3 '10 at 17:54
  • 7
    @Aditya: something like \mathrel{\mathop:}= does not break between lines, but using \mathrel{\mathop:}\mkern-1.2mu= as in mathtools does introduce a breaking point at the \mkern (and can be solved by putting a \nobreak just before \mkern or by wrapping everything in a \mathrel). – Philippe Goutet Dec 11 '10 at 23:24

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.


unaligned relations


aligned relations

  • 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
  • This looks like an answer to a slightly different question... – Martin Schröder Oct 28 '15 at 14:48
  • 2
    @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

You may try \coloneq (as well as \eqcolon) from unicode-math package:

enter image description here

Note that unicode-math requires XeLaTeX/LuaLaTeX.


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.

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.