[Tex/LaTex] Drawing a cube with TikZ-cd

tikz-cd

I would like to draw a cube with TikZ-cd. The entries have different sizes, which causes the same problems as in my former question, because I want the arrows to be parallel.

 \[\begin{tikzcd}[row sep=25,column sep=0,nodes={inner sep=2pt},
      cells={nodes={align=center,text width=\widthof{$X_2 \times_{S_2} Y_2$}}}]
    & X_1 \times_{S_1} Y_1  \ar{rr} \ar{dd} \ar{dl} & &   Y_1  \ar{dd} \ar{dl} \\
    X_1 \ar[crossing over]{rr} \ar{dd} & & S_1 \\
      & X_2 \times_{S_2} Y_2  \ar{rr} \ar{dl} & &  Y_2  \ar{dl} \\
    X_2 \ar{rr} && S_2 \ar[from=uu,crossing over]
 \end{tikzcd}\]

enter image description here

How to achieve that the arrows really end and start at the nodes? Of course they do start and end at the nodes formally, but I mean for example that the upper arrow really ends in the near of Y_1.

Best Answer

If you separate your columns not with a certain width between borders, but with a width between origins (centre of nodes), it should look better.

% arara: lualatex

\documentclass{article}
\usepackage{tikz-cd}
\usepackage{lua-visual-debug} % just for proove of symmetry. Without that, you may compile with pdfLaTeX

\begin{document}
\[\begin{tikzcd}[row sep={40,between origins}, column sep={40,between origins}]
      & X_1 \times_{S_1} Y_1 \ar{rr}\ar{dd}\ar{dl} & & Y_1\vphantom{\times_{S_1}} \ar{dd}\ar{dl} \\
    X_1 \ar[crossing over]{rr} \ar{dd} & & S_1 \\
      & X_2 \times_{S_2} Y_2  \ar{rr} \ar{dl} & &  Y_2\vphantom{\times_{S_1}} \ar{dl} \\
    X_2 \ar{rr} && S_2 \ar[from=uu,crossing over]
\end{tikzcd}\]
\end{document}

enter image description here


If you want to have it really realistic, I would recommend to add some perspective tweaking:

% arara: pdflatex

\documentclass{article}
\usepackage{tikz-cd}
\newlength{\perspective}

\begin{document}
\setlength{\perspective}{2pt}
\[\begin{tikzcd}[row sep={40,between origins}, column sep={40,between origins}]
      &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rr}\ar{dd}\ar{dl} &[\perspective] &[-\perspective] Y_1\vphantom{\times_{S_1}} \ar{dd}\ar{dl} \\[-\perspective]
    X_1 \ar[crossing over]{rr} \ar{dd} & & S_1 \\[\perspective]
      & X_2 \times_{S_2} Y_2  \ar{rr} \ar{dl} & &  Y_2\vphantom{\times_{S_1}} \ar{dl} \\[-\perspective]
    X_2 \ar{rr} && S_2 \ar[from=uu,crossing over]
\end{tikzcd}\]
\setlength{\perspective}{5pt}
\[\begin{tikzcd}[row sep={40,between origins}, column sep={40,between origins}]
      &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rr}\ar{dd}\ar{dl} &[\perspective] &[-\perspective] Y_1\vphantom{\times_{S_1}} \ar{dd}\ar{dl} \\[-\perspective]
    X_1 \ar[crossing over]{rr} \ar{dd} & & S_1 \\[\perspective]
      & X_2 \times_{S_2} Y_2  \ar{rr} \ar{dl} & &  Y_2\vphantom{\times_{S_1}} \ar{dl} \\[-\perspective]
    X_2 \ar{rr} && S_2 \ar[from=uu,crossing over]
\end{tikzcd}\]
\setlength{\perspective}{8pt}
\[\begin{tikzcd}[row sep={40,between origins}, column sep={40,between origins}]
      &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rr}\ar{dd}\ar{dl} &[\perspective] &[-\perspective] Y_1\vphantom{\times_{S_1}} \ar{dd}\ar{dl} \\[-\perspective]
    X_1 \ar[crossing over]{rr} \ar{dd} & & S_1 \\[\perspective]
      & X_2 \times_{S_2} Y_2  \ar{rr} \ar{dl} & &  Y_2\vphantom{\times_{S_1}} \ar{dl} \\[-\perspective]
    X_2 \ar{rr} && S_2 \ar[from=uu,crossing over]
\end{tikzcd}\]
\setlength{\perspective}{11pt}
\[\begin{tikzcd}[row sep={40,between origins}, column sep={40,between origins}]
      &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rr}\ar{dd}\ar{dl} &[\perspective] &[-\perspective] Y_1\vphantom{\times_{S_1}} \ar{dd}\ar{dl} \\[-\perspective]
    X_1 \ar[crossing over]{rr} \ar{dd} & & S_1 \\[\perspective]
      & X_2 \times_{S_2} Y_2  \ar{rr} \ar{dl} & &  Y_2\vphantom{\times_{S_1}} \ar{dl} \\[-\perspective]
    X_2 \ar{rr} && S_2 \ar[from=uu,crossing over]
\end{tikzcd}\]
\end{document}

enter image description here


Actually, you should even rotate it a bit into isometric view. I guess, there are other solutions for TikZ around. But just to be complete:

% arara: pdflatex

\documentclass[twocolumn]{article}
\usepackage{tikz-cd}
\newlength{\perspective}

\begin{document}
    \setlength{\perspective}{12pt}
    \def\isofactor{0.5}
    \[\begin{tikzcd}[row sep={38,between origins}, column sep={38,between origins}]
    &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rrd}\ar{dddd}\ar{ddl} &[\perspective] &[-\perspective] \\[-38+\isofactor\perspective]
    & & & Y_1\vphantom{\times_{S_1}} \ar{dddd}\ar{ddl} & \\[-\perspective-\isofactor\perspective]
    X_1 \ar[crossing over]{rrd} \ar{dddd} & & & \\[-38+\isofactor\perspective]
    & &  S_1 \\[\perspective-\isofactor\perspective]
    & X_2 \times_{S_2} Y_2  \ar{rrd} \ar{ddl} & &  \\[-38+\isofactor\perspective]
    & & & Y_2\vphantom{\times_{S_1}} \ar{ddl} \\[-\perspective-\isofactor\perspective]
    X_2 \ar{rrd} & & \\[-38+\isofactor\perspective]
    & & S_2 \ar[from=uuuu,crossing over] &
    \end{tikzcd}\]
    \setlength{\perspective}{10pt}
    \def\isofactor{1}
    \[\begin{tikzcd}[row sep={38,between origins}, column sep={38,between origins}]
    &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rrd}\ar{dddd}\ar{ddl} &[\perspective] &[-\perspective] \\[-38+\isofactor\perspective]
    & & & Y_1\vphantom{\times_{S_1}} \ar{dddd}\ar{ddl} & \\[-\perspective-\isofactor\perspective]
    X_1 \ar[crossing over]{rrd} \ar{dddd} & & & \\[-38+\isofactor\perspective]
    & &  S_1 \\[\perspective-\isofactor\perspective]
    & X_2 \times_{S_2} Y_2  \ar{rrd} \ar{ddl} & &  \\[-38+\isofactor\perspective]
    & & & Y_2\vphantom{\times_{S_1}} \ar{ddl} \\[-\perspective-\isofactor\perspective]
    X_2 \ar{rrd} & & \\[-38+\isofactor\perspective]
    & & S_2 \ar[from=uuuu,crossing over] &
    \end{tikzcd}\]
    \vfill\break        
    \setlength{\perspective}{8pt}
    \def\isofactor{1.5}
    \[\begin{tikzcd}[row sep={38,between origins}, column sep={38,between origins}]
    &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rrd}\ar{dddd}\ar{ddl} &[\perspective] &[-\perspective] \\[-38+\isofactor\perspective]
    & & & Y_1\vphantom{\times_{S_1}} \ar{dddd}\ar{ddl} & \\[-\perspective-\isofactor\perspective]
    X_1 \ar[crossing over]{rrd} \ar{dddd} & & & \\[-38+\isofactor\perspective]
    & &  S_1 \\[\perspective-\isofactor\perspective]
    & X_2 \times_{S_2} Y_2  \ar{rrd} \ar{ddl} & &  \\[-38+\isofactor\perspective]
    & & & Y_2\vphantom{\times_{S_1}} \ar{ddl} \\[-\perspective-\isofactor\perspective]
    X_2 \ar{rrd} & & \\[-38+\isofactor\perspective]
    & & S_2 \ar[from=uuuu,crossing over] &
    \end{tikzcd}\]
    \setlength{\perspective}{6pt}
    \def\isofactor{2}
    \[\begin{tikzcd}[row sep={38,between origins}, column sep={38,between origins}]
    &[-\perspective] X_1 \times_{S_1} Y_1 \ar{rrd}\ar{dddd}\ar{ddl} &[\perspective] &[-\perspective] \\[-38+\isofactor\perspective]
    & & & Y_1\vphantom{\times_{S_1}} \ar{dddd}\ar{ddl} & \\[-\perspective-\isofactor\perspective]
    X_1 \ar[crossing over]{rrd} \ar{dddd} & & & \\[-38+\isofactor\perspective]
    & &  S_1 \\[\perspective-\isofactor\perspective]
    & X_2 \times_{S_2} Y_2  \ar{rrd} \ar{ddl} & &  \\[-38+\isofactor\perspective]
    & & & Y_2\vphantom{\times_{S_1}} \ar{ddl} \\[-\perspective-\isofactor\perspective]
    X_2 \ar{rrd} & & \\[-40+\isofactor\perspective]
    & & S_2 \ar[from=uuuu,crossing over] &
    \end{tikzcd}\]
\end{document}

enter image description here

Related Question