表/数组图中的对角箭头

表/数组图中的对角箭头

我正在尝试复制下图。

在此处输入图片描述

我的第一个想法是使用tikzcd并在空节点之间绘制箭头,但结果却不是一样。任何指导都值得赞赏,当然不需要任何人完全用 TeX 处理此图!只要一个相同风格的简单示例就足够了。

谢谢!

答案1

也许这是创建该图表的一种方法。

array我们创建的不是矩阵(如 TikZ-CD)或环境场地 通过指定每行出现的次数,并将它们放在坐标坐标系(除非在奇数行中我们将所有内容向右移动约 0.5)。

为了获得正确的间距,我们可以调整xy键。

这样,矩阵中的每个位置都有一个坐标−y代表行(从 0 开始)和X代表列(从 0 开始),尽管对于列我们以 0.5 为步长进行计数。

特殊的第二行(或者准确地说是-1行)会得到一个额外的循环,而其他所有内容都会放在主循环中,其中

{5/0, 4/1, 7/0, 1/-1}

意味着放置了五个 0、四个 1、七个 0 和一个 −1。

钥匙n = …可能有助于n沿某个方向移动线的起点或终点,使其远离矩阵中位置的中心。当然,您可以直接输入结果坐标,但考虑矩阵中的位置可能会有助于找到正确的点。


使用默认字体大小和宽减号,很难在数字之间画线而不与文本相交,同时整个图表具有合理的宽度。

不过,无论采用哪种方法,你都会遇到这个问题。

代码

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
  y=6mm, x=12mm,
  /pgf/foreach/occ list/.style={
    remember=\nextOCC as \prevOCC (initially 0),
    evaluate=\OCC as \lastOCC using int(\prevOCC+\OCC-1),
    evaluate=\lastOcc as \nextOCC using int(\lastOCC+1),
    var=\OCC, var=\NUM},
  n/.is choice, n/.cd,
  u/.style={shift=(up:.5)},      d/.style={shift=(down:.5)},
  l/.style={shift=(left:.25)},   r/.style={shift=(right:.25)},
  ul/.style={shift={(-.25,.5)}}, dl/.style={shift={(-.25,-.5)}},
  dr/.style={shift={(.25,-.5)}}, ur/.style={shift={(.25,.5)}},
]
\foreach[
  count=\rowY from 0,
  evaluate=\rowY as \offset using int(isodd(\rowY))
] \ROW in {
  {5/ 0, 4/1, 7/0, 1/-1},
  {4/ 0, 1/1, 3/2, 1/ 1, 6/ 0, 1/-1, 1/-2},
  {4/ 0, 2/1, 2/2, 2/ 1, 5/ 0, 2/-1},
  {3/ 0, 3/1, 1/2, 3/ 1, 4/ 0, 3/-1},
  {3/ 0, 8/1, 3/0, 3/-1},
  {2/ 0, 4/1, 1/0, 4/ 1, 2/ 0, 4/-1},
  {1/-1, 1/0, 4/1, 2/ 0, 4/ 1, 1/ 0, 4/-1},
  {1/-1, 4/1, 3/0, 4/ 1, 4/-1, 1/ 0},
  {1/-1, 1/0, 3/1, 4/ 0, 3/ 1, 1/ 0, 3/-1, 1/0},
  {2/ 0, 2/1, 5/0, 2/ 1, 2/ 0, 2/-1, 2/ 0},
  {3/ 0, 1/1, 6/0, 1/ 1, 3/ 0, 1/-1, 2/ 0}%
}
  \foreach[occ list] in \ROW
    \foreach \X in {\prevOCC, ..., \lastOCC}
      \node at (\X+.5*\offset, -\rowY) {$\NUM$};

\foreach[occ list] in {5/0, 4/1, 6/0, 1/-1}
  \foreach \X in {\prevOCC, ..., \lastOCC}
    \node at (\X, -1) {$\NUM$};

\draw ([n=l]   0,   -10) -- ([n=u]  5,   -0)
      ([n=ul]  0,   - 5) -- ([n=dr] 2.5, -10)
      ([n=l]   2,   - 6) -- +(down:2.5)
      ([n=l]  11.5, - 6) -- +(down:3)
      ([n=dl]  3.5, -10) --  (6.5,  -4) -- ([n=dr] 9.5, -10)
      ([n=d]  10.5, -10) -- +(5.5,  11)
      ([n=dl] 14.5, -10) -- +(2.5,   5)
      ([n=d]  13.5, -10) -- +(-5.5, 11)
;
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容