使用 TikZ 连接两个表格单元格的带标签曲线

使用 TikZ 连接两个表格单元格的带标签曲线

我想做一个弯曲如下图所示,用标签连接两个单元格。为了使标签突出,标签的边界框和边框必须覆盖其下方的任何对象。

在此处输入图片描述

\documentclass[border=12pt,12pt,varwidth]{standalone}
\usepackage{longtable}
\usepackage{array}
\usepackage{xcolor}
\def\tc#1#2{{\color{#1}#2}}
\begin{document}
\begin{longtable}{|*{5}{>{$}c<{$}|}}\hline
n & A & A-10 & B & B-10\\\hline
1 & 5 & 5 & 7 & 9 \\\hline
2 & 10 & \tc{red}{10} & 14 & \tc{green}{18}\\\hline
3 & 15 & 15 & 21 & 27\\\hline
4 & \tc{red}{20} & 20 & \tc{green}{28} & 36\\\hline
5 & 25 & 25 & 35 & 45\\\hline
\end{longtable}
\end{document}

答案1

您还可以使用nicematrix使用 Ti 的包Z 绘制表格,从而可以很容易地引用某些单元格:

\documentclass[border=12pt,varwidth]{standalone}
\usepackage{nicematrix, tikz}

\begin{document}
\[\begin{NiceArray}{ccccc}[hvlines]
n & A & A-10 & B & B-10 \\
1 & 5 & 5 & 7 & 9 \\
2 & 10 & \color{red} 10 & 14 & \color{green!75!black} 18 \\
3 & 15 & 15 & 21 & 27 \\
4 & \color{red} 20 & 20 & \color{green!75!black} 28 & 36 \\
5 & 25 & 25 & 35 & 45 \\
\CodeAfter
    \tikz{
        \draw[->, red] 
            (5-2.north east) 
                to[bend left] 
                node[circle, fill=white, inner sep=1pt, pos=0.5, font=\scriptsize] {10}
            (3-3.south west);
        \draw[->, green!75!black] 
            (5-4.north east) 
                to[bend left] 
                node[circle, fill=white, inner sep=1pt, pos=0.5, font=\scriptsize] {10}
            (3-5.south west);
    }
\end{NiceArray}\]
\end{document}

在此处输入图片描述

答案2

您可以使用tikzmark图书馆来做到这一点。

我修改了你的宏\tc。现在它创建一个节点并接受三个参数(格式、节点名称、内容)。然后我添加一个,tikzpicture[remember picture,overlay]并在节点之间绘制弯曲的箭头。

我的代码:

\documentclass{article}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\usepackage{longtable}
\usepackage{array}
%\usepackage{xcolor}
%\def\tc#1#2{{\color{#1}#2}}
\newcommand\tc[3][]{\tikzmarknode[#1]{#2}{#3}}

\begin{document}
\lipsum[1]
\begin{longtable}{|*{5}{>{$}c<{$}|}}\hline
n & A & A-10 & B & B-10\\\hline
1 & 5 & 5 & 7 & 9 \\\hline
2 & 10 & \tc[red]{a}{10} & 14 & \tc[green]{b}{18}\\\hline
3 & 15 & 15 & 21 & 27\\\hline
4 & \tc[red]{c}{20} & 20 & \tc[green]{d}{28} & 36\\\hline
5 & 25 & 25 & 35 & 45\\\hline
\end{longtable}
\begin{tikzpicture}[remember picture,overlay]
\draw[-latex,red]   (c) to[out=10,in=180]node[fill=white,inner sep=1pt]{\tiny10} (a);
\draw[-latex,green] (d) to[out=10,in=180]node[fill=white,inner sep=1pt]{\tiny10} (b);
\end{tikzpicture}

\lipsum[2]
\end{document}

在此处输入图片描述

相关内容