我是 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
宏(仅一个参考:在正文旁边添加大括号)。
该解决方案允许通过以下方式绘制括号和箭头:
\drawbrace
命令;\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 节点)。