9

This is something of a nitpick, but I'm having some trouble getting to grips with tikz-cd. I'm not sure of the TikZ terminology, but I think I'm trying to find a way to manipulate cell widths. Here's a minimal example to illustrate my problem:

\documentclass{minimal}
\usepackage{tikz, tikz-cd}

\begin{document}
\begin{tikzcd}
    A \rar \dar & B \rar \dar & C \dar \\
    D \rar      & E \rar      & F \oplus G
\end{tikzcd}
\end{document}

Output of my MWE

I'd like to make the arrow from B to C the same length as that from E to F+G. My first thought was that I should pad the box (cell?) containing C so it's the same width as the one containing F + G. I can sort of do it by replacing C with \quad C \quad, but surely there must be a better way! Does anyone know how to do this?

David Carlisle
  • 757,742
DavidR
  • 91

3 Answers3

7

Sure, you can set C inside a box that is exactly the width of F \oplus G:

enter image description here

\documentclass{article}
\usepackage{calc,tikz-cd}

\begin{document}
\begin{tikzcd}
    A \rar \dar & B \rar \dar & \makebox[\widthof{$F \oplus G$}]{$C$} \dar \\
    D \rar      & E \rar      & F \oplus G
\end{tikzcd}
\end{document}

calc's command \widthof is used to measure the width of F \oplus G, setting C in a centred box of that exact width.

Moriambar
  • 11,466
Werner
  • 603,163
7

You have to fool tikz-cd into thinking that the lower right corner object has zero width; then you can artificially shorten the arrow to it.

\documentclass{article}
\usepackage{tikz-cd,mathtools}

\begin{document}
\begin{tikzcd}
  A \arrow{r} \arrow{d} & B \arrow{r} \arrow{d} & C \arrow{d} \\
  D \arrow{r}           & E \arrow[end anchor={[xshift=-1.25em]}]{r}
  & \mathclap{F \oplus G}
\end{tikzcd}
\end{document}

The command \mathclap is provided by mathtools.

enter image description here

Sincerely, I prefer the default version.

David Carlisle
  • 757,742
egreg
  • 1,121,712
  • Oh, that's a nice way of doing it - not quite what I had in mind but it seems to be what I was looking for. Thanks! – DavidR Nov 04 '13 at 19:48
5

Not a new problem:

Code

\documentclass{article}
\usepackage{tikz-cd}
\begin{document}\centering
\begin{tikzcd}
    A \rar \dar & B \rar \dar & C \dar \\
    D \rar      & E \rar      & F \oplus G
\end{tikzcd}\medskip\par
\begin{tikzcd}
    A \rar \dar & B \rar \dar & |[text width=width("$F\oplus G$"), align=center]|C \dar \\
    D \rar      & E \rar      & F \oplus G
\end{tikzcd}\bigskip

\begin{tikzcd} A \rar \dar & B \rar \dar & C \dar \ D \rar & E \rar & |[overlay]| F \oplus G \end{tikzcd}\medskip\par \begin{tikzcd}[nodes=overlay, row sep=large, column sep=large] A \rar \dar & B \rar \dar & C \dar \ D \rar & E \rar & F \oplus G \end{tikzcd}\bigskip

\begin{tikzcd}[/tikz/column sep= {\pgfkeysvalueof{/tikz/commutative diagrams/column sep/large},between origins}] A \rar \dar & B \rar \dar & C \dar \ D \rar & E \rar & F \oplus G \end{tikzcd}\bigskip \end{document}

Output

enter image description here

Qrrbrbirlbel
  • 119,821