如何在表格中绘制这样的箭头?
答案1
下次,请提供一个小示例文档,供大家作为答案的基础。例如,在这种情况下,由于您的问题是关于箭头的,您应该提供表格的代码,以便人们可以专注于回答问题,而不必先构建合适的表格。
一种方法是使用tikzmark
标记表内的坐标,然后可以使用它来覆盖tikzpicture
包含箭头的坐标。
例如,以下代码说明了您需要的两种箭头:同一列中从一行到另一行的弯曲箭头以及连续列中单元格之间的直箭头:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{tabular}{cc}
14\tikzmark{a} & 78 \\
71\tikzmark{b} & \tikzmark{c}93 \\
\end{tabular}
\begin{tikzpicture}[overlay, remember picture, shorten >=.5pt, shorten <=.5pt, transform canvas={yshift=.25\baselineskip}]
\draw [->] ({pic cs:a}) [bend left] to ({pic cs:b});
\draw [->] ([yshift=.75pt]{pic cs:a}) -- ({pic cs:c});
\end{tikzpicture}
\end{document}
答案2
如果您想使用矩阵而不是表格,您可以从以下代码中获得启发:
% Code by Anonymous User from https://www.latex4technics.com/?note=1w9f
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
table/.style={
matrix of nodes,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={rectangle,text width=3em,align=center},
text depth=1.25ex,
text height=2.5ex,
nodes in empty cells
},
row 1/.style={nodes={fill=green!10,text depth=0.4ex,text height=2ex}},
row 6/.style={nodes={text depth=0.4ex,text height=2ex}},
column 1/.style={nodes={fill=green!10}},
}
\begin{document}
\begin{tikzpicture}
% the matrix entries
\matrix (mat) [table]
{
& $D_1$ & $D_2$ & $D_3$ & $D_4$ & foo \\
$O_1$ & 50 & 0 & & & 50 \\
$O_2$ & & 60 & & & 60 \\
$O_3$ & & 10 & 30 & 10 & 50 \\
$O_4$ & & & & 50 & 50 \\
bar & 50 & 70 & 30 & 60 & 210 \\
};
% the matrix rules
\foreach \x in {1,...,5}
{
\draw
([xshift=-.5\pgflinewidth]mat-\x-1.south west) --
([xshift=-.5\pgflinewidth]mat-\x-6.south east);
}
\foreach \x in {1,...,5}
{
\draw
([yshift=.5\pgflinewidth]mat-1-\x.north east) --
([yshift=.5\pgflinewidth]mat-6-\x.south east);
}
% the arrows
\begin{scope}[shorten >=7pt,shorten <= 7pt]
\draw[->] (mat-2-2.center) -- (mat-2-3.center);
\draw[->] (mat-2-3.center) -- (mat-3-3.center);
\draw[->] (mat-3-3.center) -- (mat-4-3.center);
\draw[->] (mat-4-3.center) -- (mat-4-4.center);
\draw[->] (mat-4-4.center) -- (mat-4-5.center);
\draw[->] (mat-4-5.center) -- (mat-5-5.center);
\draw[->] (mat-5-5.center) -- (mat-6-6.center);
\end{scope}
\end{tikzpicture}
\end{document}
您可以在此处试验代码:https://www.latex4technics.com/?note=1w9f
答案3
您可以使用 来实现这一点{NiceArray}
。nicematrix
此环境类似于经典环境{array}
(array
),但在单元格下构建 PGF/Tikz 节点。然后,可以将这些节点与 Tikz 一起使用。
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
\renewcommand{\arraystretch}{1.5}
$\begin{NiceArray}{*{9}{c}}
0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\
& 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\
& 19 & & 21 & 22 & 23 & 24 & 25 & 26 \\
& 28 & & 30\rlap{${}=s$} & & 32 & 33 & 34 & 35 \\
& 37 & & 39 & & 41 & & 43 & 44 \\
& 46 & & 48 & & 50 & & 52 & \\
& 55 & & 57 & & 59 & & 61 & \\
& & & 66 & & 68 & & 70 & \\
& & & & & 77 & & 79\rlap{${}=t=30+3a+2b$} \\
& & & & & & & 88 & \\
\CodeAfter
\begin{tikzpicture}
\draw (1-1) circle (2mm)
(2-3) circle (2mm)
(3-5) circle (2mm)
(4-7) circle (2mm)
(5-9) circle (2mm)
(7-2) circle (2mm)
(8-4) circle (2mm)
(9-6) circle (2mm)
(10-8) circle (2mm) ;
\begin{scope} [->]
\draw (4-4.east) to [bend left=45] (5-4.east) ;
\draw (5-4.east) to [bend left=45] (6-4.east) ;
\draw (6-4.east) to [bend left=45] (7-4.east) ;
\draw (7-4) -- (8-6) ;
\draw (8-6) -- (9-8) ;
\end{scope}
\end{tikzpicture}
\end{NiceArray}$
\end{document}
您需要多次编译(因为nicematrix
使用 PGF/Tikz 节点)。