答案1
也许这是创建该图表的一种方法。
array
我们创建的不是矩阵(如 TikZ-CD)或环境场地 通过指定每行出现的次数,并将它们放在坐标坐标系(除非在奇数行中我们将所有内容向右移动约 0.5)。
为了获得正确的间距,我们可以调整x
和y
键。
这样,矩阵中的每个位置都有一个坐标−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}