带箭头的叠加表

带箭头的叠加表

我有一张表格,我想用箭头覆盖它以显示一列中的哪个单元格与另一列中的哪些单元格相连。就像这样:

在此处输入图片描述

这可能吗?我可以使用外部绘图应用程序,但这样表格看起来会与其他表格不一致。

\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}nicematrixTikZ 绘制箭头。

\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}

上述代码的输出

相关内容