我有一张表格,我想用箭头覆盖它以显示一列中的哪个单元格与另一列中的哪些单元格相连。就像这样:
这可能吗?我可以使用外部绘图应用程序,但这样表格看起来会与其他表格不一致。
\begin{table}
\centering
\caption{BLAh-blah}
\begin{tabular}{|c|c|} \hline
AAA & 111 \\ \hline & 222\\ \hline
BBB & 333\\ \hline
& 444\\ \hline
CCC & 555\\ \hline \end{tabular}
\label{tab:tab1}
\end{table}
有人建议我在 TikZ 上做。那么,我该怎么做呢?我以前从未使用过 Tikz?
答案1
类似这样。基本上使用\tikzmark
和\link
技能在宏中定义。另外,感谢@AboAmmar 提出的“缩短 >=xx pt”建议。
\newcommand\tikzmark[2]{%
\tikz[remember picture,overlay]
\node[inner sep=0pt,outer sep=2pt] (#1){#2};%
}
\newcommand\link[2]{%
\begin{tikzpicture}[remember picture, overlay, >=stealth, shorten >= 1pt]
\draw[->] (#1.east) to (#2.west);
\end{tikzpicture}%
}
代码
\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{array}
\usepackage{tikz}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\newcommand\tikzmark[2]{%
\tikz[remember picture,overlay]
\node[inner sep=0pt,outer sep=2pt] (#1){#2};%
}
\newcommand\link[2]{%
\begin{tikzpicture}[remember picture, overlay, >=stealth, shorten >= 1pt]
\draw[->] (#1.east) to (#2.west);
\end{tikzpicture}%
}
\begin{document}
\noindent
\begin{tabular}{|M{2cm}|M{2cm}|@{}M{0pt}@{}}
\hline
\tikzmark{a}{AAA} & \tikzmark{1}{111} &\\ [2ex]\hline
& \tikzmark{2}{222} &\\ [2ex]\hline
\tikzmark{b}{BBB} & \tikzmark{3}{333} &\\ [2ex]\hline
& \tikzmark{4}{444} &\\ [2ex]\hline
\tikzmark{c}{CCC} & \tikzmark{5}{555} &\\ [2ex]\hline
& &\\ [2ex]\hline
\end{tabular}
\link{a}{1}
\link{a}{2}
\link{b}{2}
\link{b}{4}
\link{c}{1}
\link{c}{5}
\end{document}
答案2
使用{NiceTabular}
和nicematrix
TikZ 绘制箭头。
\documentclass{article}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{table}
\centering
\caption{blah-blah}
\begin{NiceTabular}{cc}[columns-width=2cm,hvlines]
AAA & 111 \\
& 222 \\
BBB & 333 \\
& 444 \\
CCC & 555 \\
\CodeAfter
\begin{tikzpicture} [shorten < = 0.5mm, shorten > = 0.5mm, blue, ->]
\draw (1-1) -- (1-2) ;
\draw (1-1) -- (2-2) ;
\draw (3-1) -- (2-2) ;
\draw (3-1) -- (4-2) ;
\draw (5-1) -- (1-2) ;
\draw (5-1) -- (5-2) ;
\end{tikzpicture}
\end{NiceTabular}
\label{tab:tab1}
\end{table}
\end{document}