两个表格之间的弯曲箭头(使用 tikz?)

两个表格之间的弯曲箭头(使用 tikz?)

我尝试用箭头连接两个任意表。下面的代码示例应该演示如何操作:假设我们想将 A 中的“1”与 B 中的“5”连接起来,将 A 中的“2”与 B 中的“7”连接起来,依此类推。我希望有“弯曲”箭头(据我所知,软件包tikz提供了它们),而不是“直”箭头。

是否可以将“普通”表格元素与tikz节点或图纸相结合?如果可以,怎么做?如果不行,有没有一种纯粹的tikz方法来解决这个问题?谢谢任何建议或提示!

\documentclass[12pt,a4paper,twoside]{scrartcl}
\begin{document} 
\begin{center}

  \begin{tabular}{c c c c c c}
   $A$ & 1 & 2 & 3 & 4 & 
  \end{tabular}

  \vspace{15mm}

  \begin{tabular}{c c c c c c c c c c }
   $B$ & \fbox{5} & 6 & \fbox{7} & 8 & \fbox{9} & 10 & \fbox{11} & 12 &  
  \end{tabular}

\end{center}
\end{document}

答案1

你的意思是这样的吗:

在此处输入图片描述

笔记:

代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

\newcommand*{\DrawArrow}[3][]{%
    % #1 = draw options
    % #2 = left point
    % #3 = right point
    \begin{tikzpicture}[overlay,remember picture]
        \draw [very thick, -stealth, #1] ($(#2)+(0.25em,-0.3ex)$) to ($(#3)+(0.25em,2.5ex)$);
    \end{tikzpicture}%
}%

\begin{document} 
\begin{center}

  \begin{tabular}{c c c c c c}
   $A$ & \tikzmark{topA}1 & \tikzmark{topB}2 & \tikzmark{topC}3 & \tikzmark{topD}4 & 
  \end{tabular}

  \vspace{15mm}

  \begin{tabular}{c c c c c c c c c c }
   $B$ & \fbox{\tikzmark{bottomA}5} & 6 & \fbox{\tikzmark{bottomB}7} & 8 & \fbox{\tikzmark{bottomC}9} & 10 & \fbox{\tikzmark{bottomD}11} & 12 &  
  \end{tabular}
\DrawArrow[red,   out=-90, in=90]{topA}{bottomA}
\DrawArrow[olive, out=-90, in=90]{topB}{bottomB}
\DrawArrow[blue,  out=-90, in=90]{topC}{bottomC}
\DrawArrow[brown, out=-90, in=90]{topD}{bottomD}
\end{center}
\end{document}

答案2

使用 PSTricks。

在此处输入图片描述

\documentclass[preview,border=12pt,12pt]{standalone}
\usepackage{pst-node}
\psset
{
    mnode=r,
    rowsep=2cm,
    colsep=0.5cm,
}

\def\c{[mnode=circle] }


\begin{document}
\offinterlineskip
\begin{psmatrix}
    & & A & 1 & 2 & 3 & 4\\
    B & \c 5 & 6 & \c 7 & 8 & \c 9 & 10 & \c 11 & 12
    \foreach \i/\j in {4/2,5/4,6/6,7/8}
        {\nccurve[angleA=-90,angleB=90,nodesep=3pt]{->}{1,\i}{2,\j}}
\end{psmatrix}
\end{document}

警告:

  • mnode并非\psframebox开箱即用。我们可以通过\psframebox手动包装每个项目来规避它,但这将需要更多击键!
  • mnode=circle将用来\pscirclebox包裹物品。不幸的是,\pscirclebox没有选项可以调整其半径。这导致每个圆圈的大小将根据所包含物品的大小而变化。只有framesep可以调整边框。真遗憾!

答案3

这是一个使用该tikz-cd包的非常简短的解决方案:

\documentclass{standalone}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}[out=-90, in=90, column sep=small, row sep=15mm]
    & & A & 1 \arrow{dll} & 2 \arrow{dl} & 3 \arrow{d} & 4 \arrow{dr} \\
    B & \fbox{5} & 6 & \fbox{7} & 8 & \fbox{9} & 10 & \fbox{11} & 12
\end{tikzcd}
\end{document}

结果是这样的:

在此处输入图片描述

请注意,通过此方法创建的表条目将自动处于数学模式。任何不希望出现此行为的条目都应将其文本括在命令中\text{}

相关内容