我需要在 tikz-cd 中制作一个 3x3x3 图表,我想知道对其进行编码的最佳方式是什么,以使 ti 尽可能清晰。
我对 tikz-cd 中使用交叉的 2x2x2 图有一点经验,但是当涉及到 3x3x3 时,交叉命令会失败:
\documentclass[11pt,a4paper]{article}
\usepackage[left=2cm,right=2cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{tikz-cd}
\newlength{\perspective}
\begin{document}
\begin{tikzcd}[row sep=1.5em, column sep =.1]
(k-1,j-1,i-1) \arrow{ddd} \arrow{dr}& & & (k,j-1,i-1) \arrow{lll} \arrow{ddd}\arrow{dr}& & & \\
{} & (k-1,j-1,i)\arrow[ddd, crossing over]\arrow{dr}& & & (k,j-1,i) \arrow[lll, crossing over]\arrow{ddd}\arrow{dr} & & \\
{} & & (k-1,j-1,i+1)\arrow{ddd} & & & (k,j-1,i+1) \arrow{ddd}\arrow[lll, crossing over]&{}\\
(k-1,j,i-1)\arrow[ddd, crossing over]\arrow{dr} & & & (k,j,i-1) \arrow{lll}\arrow{ddd}\arrow{dr} & & & \\
{} & (k-1,j,i)\arrow{ddd}\arrow{dr}& & & (k,j,i) \arrow[lll, crossing over]\arrow{ddd}\arrow{dr}& & \\
{} & & (k-1,j,i+1)\arrow{ddd} & & & (k,j,i+1) \arrow{lll}\arrow{ddd} &{}\\
(k-1,j+1,i-1)\arrow{dr} & & & (k,j+1,i-1) \arrow{lll}\arrow{dr} & & & \\
{} & (k-1,j+1,i)\arrow{dr}& & & (k,j+1,i)\arrow{dr} \arrow{lll} & & \\
{} & & (k-1,j+1,i+1) & & & (k,j+1,i+1) \arrow{lll} &{}
\end{tikzcd}
\end{document}
如您所见,从 (k,j,i) 到 (k-1,j,i) 的箭头应该位于从 (k-1,j-1,i+1) 开始的垂直箭头下方,但我不知道如何控制它。是否有一些现成的 3x3x3 图或一些资源,让我可以学习如何使用正确的重叠和下重叠来编写这种大图?
我找到了一种在 tikz-cd 中绘制图表的“等距”方式,这可能会大大提高可读性(https://tex.stackexchange.com/a/234151/47869) 但我不确定这个 \isofactor 和 \perspective 命令如何工作。是否有任何资源可以帮助您了解如何在 tikz-cd 中设计等距 3x3x3 图?
答案1
必要时,从“后”到“前”构建图表。使此图表更易于编写和编辑的一种方法是使用语法(行号和列号)crossing over
在末尾绘制所有箭头。\arrow[from=r1-c1,to=r2-c2]
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}[row sep=1.5em, column sep =.1]
(k-1,j-1,i-1) & & & (k,j-1,i-1) & & \\
& (k-1,j-1,i) & & & (k,j-1,i) & & \\
& & (k-1,j-1,i+1) & & & (k,j-1,i+1) & \\
(k-1,j,i-1) & & & (k,j,i-1) & & \\
& (k-1,j,i) & & & (k,j,i) & \\
& & (k-1,j,i+1) & & & (k,j,i+1) \\
(k-1,j+1,i-1) & & & (k,j+1,i-1) & & \\
& (k-1,j+1,i) & & & (k,j+1,i) & \\
& & (k-1,j+1,i+1) & & & (k,j+1,i+1)
\arrow[from=1-1,to=4-1]\arrow[from=4-1,to=7-1]
\arrow[from=1-4,to=4-4]\arrow[from=4-4,to=7-4]
\arrow[from=1-4,to=1-1]\arrow[from=7-4,to=7-1]
\arrow[from=4-4,to=4-1]
\arrow[from=2-2,to=5-2, crossing over]\arrow[from=5-2,to=8-2, crossing over]
\arrow[from=2-5,to=5-5]\arrow[from=5-5,to=8-5]
\arrow[from=2-5,to=2-2, crossing over]\arrow[from=8-5,to=8-2]
\arrow[from=5-5,to=5-2, crossing over]
\arrow[from=3-3,to=6-3, crossing over]\arrow[from=6-3,to=9-3, crossing over]
\arrow[from=3-6,to=6-6]\arrow[from=6-6,to=9-6]
\arrow[from=3-6,to=3-3, crossing over]\arrow[from=9-6,to=9-3]
\arrow[from=6-6,to=6-3, crossing over]
\arrow[from=1-1,to=2-2]\arrow[from=2-2,to=3-3]
\arrow[from=4-1,to=5-2]\arrow[from=5-2,to=6-3]
\arrow[from=7-1,to=8-2]\arrow[from=8-2,to=9-3]
\arrow[from=1-4,to=2-5]\arrow[from=2-5,to=3-6]
\arrow[from=4-4,to=5-5]\arrow[from=5-5,to=6-6]
\arrow[from=7-4,to=8-5]\arrow[from=8-5,to=9-6]
\end{tikzcd}
\end{document}
答案2
这应该是一条评论,但它太长了。Sandy G 给出的答案很棒,很充分,包含了主要思想,交叉箭头应该写在后面的箭头后面 (+1)。无论如何,也许 OP 有比坐标更好的方法来记住图中的对象。在这种情况下,为alias
对象添加一个键可能是一个好方法。这远非答案,但想法如下:
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
|[alias=x]|A & B\arrow{ld}\\
C & |[alias=y]|D
\arrow[from=1-1, to=2-2]%using coordinates
\arrow[blue, from=x, to=y, crossing over]%using a good name to the objects in the diagram
\end{tikzcd}
\end{document}