我正在尝试制作一个表格,其中每行都有一行指向另一个表格。我使用自定义\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
该问题可能是由于tikzpicture
s 嵌套造成的,这通常不是一个好主意。使用 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}