在表格中添加弯曲箭头和括号

在表格中添加弯曲箭头和括号

我是 LaTeX 新手。我想添加一个从一行指向另一行的弯曲箭头。我还想{在表格的另一边添加一个 来标记几行。

\begin{center}
 \begin{tabular}{ | l | l |}
  \hline
   letter & number \\ \hline
   A &  1 \\ \hline
   A &  2 \\ \hline
   A &  1 \\ \hline
   B &  1 \\ \hline
   B &  2 \\ \hline
 \end{tabular}
\end{center}

所以我的想法是在表格外面添加一个弯曲的箭头,在右侧将第一行和第三行标记为“重复”,并在左侧添加两个{将前 3 行标记为“A”,将后 2 行标记为“B”。

关于我该如何做,有什么建议吗?

答案1

正如 percusse 在他的评论中所说,最方便的方法是利用tikzmark宏(仅一个参考:在正文旁边添加大括号)。

该解决方案允许通过以下方式绘制括号和箭头:

  1. \drawbrace命令;
  2. \drawcurvedarrow命令,

以及通过放置一些注释\annote,它利用了宏的变体 tikzmark,其中可以通过移位来定制标记的位置。

代码:

\documentclass[border=20pt,png]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,calc}

\newcommand{\tikzmark}[2][-3pt]{\tikz[remember picture, overlay, baseline=-0.5ex]\node[#1](#2){};}

\tikzset{brace/.style={decorate, decoration={brace}},
 brace mirrored/.style={decorate, decoration={brace,mirror}},
}

\newcounter{brace}
\setcounter{brace}{0}
\newcommand{\drawbrace}[3][brace]{%
 \refstepcounter{brace}
 \tikz[remember picture, overlay]\draw[#1] (#2.center)--(#3.center)node[pos=0.5, name=brace-\thebrace]{};
}

\newcounter{arrow}
\setcounter{arrow}{0}
\newcommand{\drawcurvedarrow}[3][]{%
 \refstepcounter{arrow}
 \tikz[remember picture, overlay]\draw (#2.center)edge[#1]node[coordinate,pos=0.5, name=arrow-\thearrow]{}(#3.center);
}

% #1 options, #2 position, #3 text 
\newcommand{\annote}[3][]{%
 \tikz[remember picture, overlay]\node[#1] at (#2) {#3};
}

\begin{document}

 \begin{tabular}{ | l | l |}
  \hline
   letter & number \\ \hline
   \tikzmark[xshift=-8pt,yshift=1ex]{x}A &  1\tikzmark[xshift=3.5em]{a} \\ \hline
   A &  2 \\ \hline
   \tikzmark[xshift=-8pt,yshift=-1ex]{y}A &  1\tikzmark[xshift=3.5em]{b} \\ \hline
   \tikzmark[xshift=-8pt,yshift=1ex]{w}B &  1 \\ \hline
   \tikzmark[xshift=-8pt,yshift=-1ex]{z}B &  2 \\ \hline
 \end{tabular}
\drawcurvedarrow[bend left=60,-stealth]{a}{b}
\drawbrace[brace mirrored, thick]{x}{y}
\drawbrace[brace mirrored, thick]{w}{z}
\annote[right]{arrow-1}{Duplicate}
\annote[left]{brace-1}{A}
\annote[left]{brace-2}{B}
\end{document}

结果:

在此处输入图片描述

请记住至少编译两次才能获得结果,并且注释要参考括号或箭头的部署顺序来识别它们的位置(即第二个括号:brace-2,第四个箭头arrow-4:)。

答案2

与(和 TikZ){NiceTabular}一起使用。nicematrix

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

\begin{center}
 \begin{NiceTabular}{ll}[hvlines]
   letter & number \\ 
   A &  1 \\ 
   A &  2 \\ 
   A &  1 \\ 
   B &  1 \\ 
   B &  2 \\ 
 \CodeAfter
   \tikz \draw [->] (2.5-|last) to [bend left, out= 60, in=120] node [right] { Duplicate } (4.5-|last) ; 
   \SubMatrix{\{}{2-1}{4-1}{.}[xshift=0.5em]
 \end{NiceTabular}
\end{center}

\end{document}

您需要多次编译(因为 PGF/Tikz 节点)。

上述代码的输出

相关内容