“最小宽度”对水平多部分节点没有影响

“最小宽度”对水平多部分节点没有影响

我有一个多部分节点N1,在它下面有一个节点N2,我希望N1它与有相同的宽度N2。我已经设置了minimum width=3cmevery node但这对节点没有任何影响N1!?

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}

\begin{document}

\begin{tikzpicture}[scale=2,every node/.style={fill=blue!10,minimum width=3cm,draw}]

\node(N1)[rectangle split, rectangle split parts=3,rectangle split horizontal]
{a\nodepart{two}b\nodepart{three}c};

\node[yshift=-1cm,anchor=north](N2) at (N1.south){d};


\end{tikzpicture}

\end{document}

在此处输入图片描述

答案1

您可能会误用text width,这确实会考虑节点部分。但是您需要减去inner xseps 以及内部linewidths。

由于非空值会为节点部分文本text width激活类似环境,因此如果您想将文本放回到中心,您需要类似的内容。minipagealign=center

请注意,节点部分/整个节点的“最小”属性已经丢失。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.multipart}
\tikzset{stretch split horizontal/.style={text width=(\pgfkeysvalueof{/pgf/minimum width}-
  (\pgfkeysvalueof{/pgf/rectangle split parts}-1)*\pgflinewidth)
  /(\pgfkeysvalueof{/pgf/rectangle split parts})-2*(\pgfkeysvalueof{/pgf/inner xsep})}}
\begin{document}
\begin{tikzpicture}[scale=2, every node/.style={fill=blue!10, minimum width=3cm, draw}]
\node (N1) [rectangle split, rectangle split parts=5, rectangle split horizontal,
  stretch split horizontal, align=center]
  {a \nodepart{two} b \nodepart{three} c \nodepart{four} d \nodepart{five} e};
\node[yshift=-1cm,anchor=north] (N2) at (N1.south) {d};
\end{tikzpicture}
\end{document}

答案2

来自 pgfmanual 第 726 页:

垂直分割时,矩形分割将满足所有minimum width 要求,但任何要求minimum height都会被忽略。相反,水平分割时,minimum height要求将得到满足,但任何要求 minimum width都会被忽略。此外,inner sep适用于所使用的每个部件,因此无法单独为特定部件指定。

两种替代解决方案:

第一个使用matrix节点的 a 而不是multipart节点的 a。我知道它们不一样,所以需要一些技巧才能将 a 转换matrix为类似于multipart节点的东西。在这种情况下,我使用了选项\vphantom,但 a也可以使用。我还将每个节点minimum height定义为节点宽度的 1/3 。minimum widthmatrixd

第二种,以另一种方式绘制节点,先绘制三个节点 a,b,c,第二个节点d用 调整其大小fit。在这种情况下,必须用label选项写入适合的节点内容。

\documentclass[border=5mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning,fit}

\begin{document}

\begin{tikzpicture}[scale=2, every node/.style={fill=blue!10,minimum width=3cm,draw}]

\matrix (N1) [matrix of nodes, inner sep=0pt, nodes={fill=blue!10, minimum width=1cm, inner sep=.3333em}, column sep=-\pgflinewidth, draw=none]
{a\vphantom{d} & b & c\vphantom{d}\\};

\node[yshift=-1cm,anchor=north](N2) at (N1.south){d};

\end{tikzpicture}

\begin{tikzpicture}[scale=2, every node/.style={fill=blue!10,minimum width=1cm,draw, minimum height=5mm}]

\begin{scope}[node distance=0pt]
\node(A) {a};\node[right=of A] (B) {b};\node[right=of B] (C) {c};
\end{scope}

\node[fit=(A.north west) (C.south east), inner sep=0pt, below=1cm of B.south, label=center:d] (N2) {};


\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容