从表格行到表格绘制边

从表格行到表格绘制边

我正在尝试制作一个表格,其中每行都有一行指向另一个表格。我使用自定义\tikzmark函数,从这个帖子,在每一行创建一个节点,但是,节点似乎没有按预期工作。非常欢迎帮助。

我想从以 结尾的行:pi1到右上方的表格画线。还应该从以 结尾的行:pi21到右下方的表格画一条线。

桌子上有箭头指向奇怪的地方

生成上述图像的代码。

\documentclass{minimal}

\usepackage{tikz}
\usetikzlibrary{positioning,fit,calc}
\begin{document}

\tikzset{
    state/.style={
           rectangle,
           draw=black,
           minimum height=2em,
           inner sep=2pt,
           text centered,
           },
}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture, anchor=base] \node (#1) {};}
\begin{tikzpicture}[]

 \node[state] (IT) 
 {%
  \begin{tabular}{llll}
   :s1 & :p1 & :o1 & :pi1 \tikzmark{a} \\
   :s2 & :p2 & :o2 & :pi1 \tikzmark{b} \\
   :s3 & :p3 & :o3 & :pi2 \tikzmark{c} \\
  \end{tabular}
 };

 \node[state,       
 node distance=3cm, 
 right of=IT,       
 yshift=+1cm] (PI1)
 {%                   
 \begin{tabular}{lll}
   :pi1 & :p1 & :o1  \\
   :s2 & :p2 & :o2 \\
   :s3 & :p3 & :o3 \\
  \end{tabular}
 };

 \node[state,
 below of=PI1,
 node distance=2cm] (PI2) 
 {%
 \begin{tabular}{lll}
   :pi2 & :p1 & :o1  \\
   :s3 & :p3 & :o3 \\
  \end{tabular}
 };

 \draw (a) -- (PI1);
 \draw (b) -- (PI1);
 \draw (c) -- (PI2);

\end{tikzpicture}
\end{document}

答案1

该问题可能是由于tikzpictures 嵌套造成的,这通常不是一个好主意。使用 TikZ\matrix节点代替表格是否可行?

请注意样式的修改state。还请注意,我在定位矩阵时将 改为of==of前者已弃用,后者由positioning您加载的库定义。请参阅PGF/TikZ 中“right of=”和“right=of”之间的区别

在此处输入图片描述

\documentclass{article}    
\usepackage{tikz}
\usetikzlibrary{positioning,matrix}
\begin{document}
\tikzset{
    state/.style={
           draw=black,
           nodes={
             text width=width(":pi2"),
             align=left
           },
           inner sep=2pt,
            matrix of nodes,
           },
}

\begin{tikzpicture}[]

 \matrix[state] (IT) 
 {%
   :s1 & :p1 & :o1 & :pi1  \\
   :s2 & :p2 & :o2 & :pi1  \\
   :s3 & :p3 & :o3 & :pi2  \\
 };

 \matrix[state,       
 right=2cm of IT,       
 yshift=1cm] (PI1)
 {%                   
   :pi1 & :p1 & :o1  \\
   :s2 & :p2 & :o2 \\
   :s3 & :p3 & :o3 \\
 };

 \node[state,
 below=1cm of PI1] (PI2) 
 {%
   :pi2 & :p1 & :o1  \\
   :s3 & :p3 & :o3 \\
 };

 \draw (IT-1-4) to[out=0,in=180] (PI1.west);
 \draw (IT-2-4) to[out=0,in=180] (PI1.west);
 \draw (IT-3-4) to[out=0,in=180] (PI2.west);

\end{tikzpicture}
\end{document}

相关内容