我有以下代码:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{pblock/.style = {rectangle split, rectangle split horizontal,
rectangle split parts=3,
rectangle split part fill={red!30,blue!20,green!20}, draw, thick, align=center}}
\begin{tikzpicture}
\node[pblock] (x) {\nodepart[text width=2cm]{one} Cell 1
\nodepart[text width=4cm]{two}Cell 2
\nodepart[text width=2cm]{three}Cell 3};
\node [above right=.6cm and 1.15cm of x.one south, anchor=base] {$x$};
\end{tikzpicture}
\tikzset{/tikz/pblock/.append style = {every one node part/.style={text width=1cm}}}
\end{document}
生成以下图像:
值得注意的是,x
使用以下行放置:
\node [above right=.6cm and 1.15cm of x.one south, anchor=base] {$x$};
显然,这需要进行一些调整才能获得精确的移位,以便将x
直接放置在两个矩形之间的分隔线上方。我的问题是,我如何才能简单地将 放置x
在此边界上方,而无需调整位置?一般来说,我也希望将 放置y
在单元格 2 和单元格 3 之间的边界上方。
答案1
这几乎是在哪里可以找到 Tikz 的基本语法?在某种程度上,你只需要找到合适的锚点。在这种情况下:
\node [above=0pt of x.one split north] {$x$};
一般而言,除了最后一部分rectangle split
,节点的其他部分都会有称为 的锚点<nodepart name> split <direction>
。请参阅第节中的图表71.6 具有多个文本部分的形状在手册中。
答案2
@Torbjørn T. 的回答非常有帮助,尤其是参考。事实证明,我不仅需要将节点放置在分叉上方,还需要将其放置在末端。因此,我添加了以下代码:
\begin{tikzpicture}
\node[name=s,pblock] (x) {\nodepart[text width=3cm]{one} Cell 1
\nodepart[text width=4cm]{two}Cell 2
\nodepart[text width=2cm]{three}Cell 3};
\draw[shift=(x.north west)] plot coordinates{(0,0)}
node[above] {\scriptsize\texttt{$x_1$}};
\draw[shift=(x.one split north)] plot coordinates{(0,0)}
node[above] {\scriptsize\texttt{$x_2$}};
\draw[shift=(x.two split north)] plot coordinates{(0,0)}
node[above] {\scriptsize\texttt{$x_3$}};
\draw[shift=(x.north east)] plot coordinates{(0,0)}
node[above] {\scriptsize\texttt{$x_4$}};
\end{tikzpicture}
生产
这比前面提到的答案稍微复杂一些,但如果需要这些锚点,它会有所帮助!