# How to draw a commutative diagram?

Is it possible to draw a (simple) commutative diagram using MathJax?

Amscd doesn't seem to work here on math.SE.

M(N)WE:

$$\begin{CD} K(X) @>{ch}>> H(X;\mathbb Q);\\ @VVV @VVV \\ K(Y) @>{ch}>> H(Y;\mathbb Q); \end{CD}$$

Edit: [A.K. May 7, 2013]

As pointed elsewhere by Davide, this can be remedied now that MathJax 2.2 [beta] is deployed, by adding \require{AMScd}:

$$\require{AMScd} \begin{CD} K(X) @>{ch}>> H(X;\mathbb Q);\\ @VVV @VVV \\ K(Y) @>{ch}>> H(Y;\mathbb Q); \end{CD}$$

• As a temporary workaround, I think that you should be able to adapt Arturo's solution here to your needs. (maybe replacing \rightarrow by \longrightarrow looks a bit better, but I haven't tried). – t.b. Jun 9 '11 at 14:15
• Sorry about all the edits and the bumps... I'm just excited to have new features! :-) – Asaf Karagila May 6 '13 at 22:35
• @Asaf You're the least person I would have thought to get excited over commutative diagrams... – Michael Greinecker May 6 '13 at 23:44
• @Michael: Point well made! Regardless, I'm always happy when the expressibility requires less hacks, and get more built-in support. – Asaf Karagila May 6 '13 at 23:45
• All this is very puzzling, to me. If people want to draw commutative diagrams, why don't they use software that's intended for drawing?? Writing code to define a picture seems strange. Even more strange than writing code to define a textual document. – bubba May 7 '13 at 3:45
• @bubba commutative diagrams contain still a lot of text and you want the typography of your diagrams to match the typography of your main text. – Michael Greinecker May 7 '13 at 5:16
• @bubba: because mathematicians don't work with MS Word most of the time, and they using external software is bothersome and annoying. The output in LaTeX is much cleaner, better, contains less mistakes, and it notifies you of any possible mistake. Since diagrams are not graphs and pie charts, but rather arrows and labels, there is no sense in adding an external software when LaTeX does an excellent work on its own (with the occasional help of prepared packages, of course). So mathematicians are used to working with just LaTeX, and they want to have that with MathJax as well. – Asaf Karagila May 7 '13 at 7:53
• @Asaf -- who said anything about MS Word?? – bubba Jun 18 '13 at 16:11
• I think it would be the same for all diagrams, not just commutative ones. – PyRulez Jan 22 '15 at 23:59
• @bubba As Michael Greinecker says: it can be really hard to match fonts in drawing programs sometimes. I once tried to use SolidWorks to prepare - in my mind - magnificent diagrams for mathematics expositions: SolidWorks is a CAD suite and produces the most stunning renderings of 3D geometry. But the fonts it uses are crap and overall the result looked simply dreadful - so a great deal of work wasted. – WetSavannaAnimal Apr 17 '15 at 11:58
• @WetSavannaAnimalakaRodVance --SolidWorks uses whatever fonts you tell it to use. It can use any Windows font, so something like Latin Modern Math would be suitable if you're trying to match fonts in a traditional LaTeX document. – bubba Aug 1 '15 at 11:23
• @AsafKaragila -- the whole point is that LaTeX does not do an excellent job on its own. Look at all the posts on TeX.Stackexchange from people struggling to draw things using Tikz. – bubba Aug 1 '15 at 11:28
• @bubba Interesting. I don't pretend to have mastered SolidWorks, but it just didn't seem to be a very smooth fit at the time. I was struck by its amazing output, but it's not really meant for this kind of thing - indeed you need to think about geometry very differently in SolidWorks from what you would normally do in mathematics and this is wholly appropriate: mechanical design needs geometry to be defined by physical contact and one can't simply behest an object to have arbitrary co-ordinates of orientation as one does in thought experiments or in mathematical reasoning. – WetSavannaAnimal Aug 1 '15 at 11:39
• @WetSavannaAnimalakaRodVance -- well, actually, most CAD systems do allow you to place objects with arbitrary locations and orientations, though typically they don't encourage this. I'm certainly not claiming that CAD systems are always the most suitable drawing tool, though. I think different types of drawings/diagrams require different apps. Sure, you can do everything in TeX or Tikz if you try hard enough, but personally I think it's goofy to struggle to do everything using one tool. That's why we have screw-drivers in addition to hammers. – bubba Aug 1 '15 at 13:41
• this answer doesn't specify where exactly to put the \require{AMScd}. I think It should be after the $but before \begin{CD} – usr0192 Nov 26 '16 at 16:52 ## 5 Answers MathJax 2.2 beta was released recently, and it includes support for AMScd. I hope that we'll see this support on m.SE soon enough (recall that 2.1 beta was also tested on this site). We have Mathjax 2.2 beta deployed, although without AMScd support for now. Hopefully that too would be added soon enough. While AMScd doesn't support diagonal arrows, it will make rectangular diagrams easier to draw. Edit: As Davide Cervone points out, one can manually load AMScd by adding \require{AMScd} and using \begin{CD}...\end{CD}. One may want to consult the AMScd manual. I have used presheaf in the past, it's really easy (if you know xypic) and comfortable to use. • Are there any web pages that do similar things for tikzcd?? – Praphulla Koushik Jul 11 '18 at 2:25 I would modify Jack's answer slightly: \newcommand{\ra}[1]{\kern-1.5ex\xrightarrow{\ \ #1\ \ }\phantom{}\kern-1.5ex} \newcommand{\ras}[1]{\kern-1.5ex\xrightarrow{\ \ \smash{#1}\ \ }\phantom{}\kern-1.5ex} \newcommand{\da}[1]{\bigg\downarrow\raise.5ex\rlap{\scriptstyle#1}} \begin{array}{c} 0 & \ra{f_1} & A & \ra{f_2} & B & \ra{f_3} & C & \ra{f_4} & D & \ra{f_5} & 0 \\ \da{g_1} & & \da{g_2} & & \da{g_3} & & \da{g_4} & & \da{g_5} & & \da{g_6} \\ 0 & \ras{h_1} & 0 & \ras{h_2} & E & \ras{h_3} & F & \ras{h_4} & 0 & \ras{h_5} & 0 \\ \end{array}  $$\newcommand{\ra}[1]{\kern-1.5ex\xrightarrow{\ \ #1\ \ }\phantom{}\kern-1.5ex} \newcommand{\ras}[1]{\kern-1.5ex\xrightarrow{\ \ \smash{#1}\ \ }\phantom{}\kern-1.5ex} \newcommand{\da}[1]{\bigg\downarrow\raise.5ex\rlap{\scriptstyle#1}} \begin{array}{c} 0 & \ra{f_1} & A & \ra{f_2} & B & \ra{f_3} & C & \ra{f_4} & D & \ra{f_5} & 0 \\ \da{g_1} & & \da{g_2} & & \da{g_3} & & \da{g_4} & & \da{g_5} & & \da{g_6} \\ 0 & \ras{h_1} & 0 & \ras{h_2} & E & \ras{h_3} & F & \ras{h_4} & 0 & \ras{h_5} & 0 \\ \end{array}$$ This would also work in true$\rm\LaTeX$except for one thing: the \rlap{\scriptstyle#1} would need to be \rlap{$\scriptstyle#1\$}.

Here is the commutative diagram from Arturo's fix, touched up to use extensible arrows, and with some spacing tightened up a bit.

$$\newcommand{\ra}[1]{\!\!\!\!\!\!\!\!\!\!\!\!\xrightarrow{\quad#1\quad}\!\!\!\!\!\!\!\!} \newcommand{\da}[1]{\left\downarrow{\scriptstyle#1}\vphantom{\displaystyle\int_0^1}\right.} % \begin{array}{llllllllllll} 0 & \ra{f_1} & A & \ra{f_2} & B & \ra{f_3} & C & \ra{f_4} & D & \ra{f_5} & 0 \\ \da{g_1} & & \da{g_2} & & \da{g_3} & & \da{g_4} & & \da{g_5} & & \da{g_6} \\ 0 & \ra{h_1} & 0 & \ra{h_2} & E & \ra{h_3} & F & \ra{h_4} & 0 & \ra{h_5} & 0 \\ \end{array}$$

The code is valid in both mathjax and latex. In latex, one should include the amsmath package to get extensible arrows, and I would also recommend less negative spacing (or use a better commutative diagram environment).

$$\newcommand{\ra}[1]{\!\!\!\!\!\!\!\!\!\!\!\!\xrightarrow{\quad#1\quad}\!\!\!\!\!\!\!\!} \newcommand{\da}[1]{\left\downarrow{\scriptstyle#1}\vphantom{\displaystyle\int_0^1}\right.} % \begin{array}{llllllllllll} 0 & \ra{f_1} & A & \ra{f_2} & B & \ra{f_3} & C & \ra{f_4} & D & \ra{f_5} & 0 \\ \da{g_1} & & \da{g_2} & & \da{g_3} & & \da{g_4} & & \da{g_5} & & \da{g_6} \\ 0 & \ra{h_1} & 0 & \ra{h_2} & E & \ra{h_3} & F & \ra{h_4} & 0 & \ra{h_5} & 0 \\ \end{array}$$

• Interesting, thank you. And I didn't know, MathJaX supports \newcommand. – Grigory M Jun 9 '11 at 16:43
• +1, this is a very clever solution to the issue of labeling! – Zev Chonoles Jun 9 '11 at 16:56
• This diagram code doesn't show up in Internet Explorer. Is there a fix for that? – tomcuchta Jul 8 '11 at 22:29

It is possible to do (somewhat primitive) commutative diagrams using \array:

$$\begin{array}{ccccccccc} 0 & \xrightarrow{i} & A & \xrightarrow{f} & B & \xrightarrow{q} & C & \xrightarrow{d} & 0\\ \downarrow & \searrow & \downarrow & \nearrow & \downarrow & \searrow & \downarrow & \nearrow & \downarrow\\ 0 & \xrightarrow{j} & D & \xrightarrow{g} & E & \xrightarrow{r} & F & \xrightarrow{e} & 0\end{array}$$

Code:

\begin{array}{ccccccccc}
0 & \xrightarrow{i} & A & \xrightarrow{f} & B & \xrightarrow{q} & C & \xrightarrow{d} & 0\\

\downarrow & \searrow & \downarrow & \nearrow & \downarrow & \searrow & \downarrow & \nearrow & \downarrow\\

0 & \xrightarrow{j} & D & \xrightarrow{g} & E & \xrightarrow{r} & F & \xrightarrow{e} & 0
end{array}

I'm not sure it's possible to label diagonal arrows using this approach though.

• As far as I know amscd doesn't support diagonal arrows either, so this should be good enough for the moment. – t.b. Jun 9 '11 at 14:19