![“最小宽度”对水平多部分节点没有影响](https://linux22.com/image/334706/%E2%80%9C%E6%9C%80%E5%B0%8F%E5%AE%BD%E5%BA%A6%E2%80%9D%E5%AF%B9%E6%B0%B4%E5%B9%B3%E5%A4%9A%E9%83%A8%E5%88%86%E8%8A%82%E7%82%B9%E6%B2%A1%E6%9C%89%E5%BD%B1%E5%93%8D.png)
我有一个多部分节点N1
,在它下面有一个节点N2
,我希望N1
它与有相同的宽度N2
。我已经设置了minimum width=3cm
, every 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 xsep
s 以及内部linewidth
s。
由于非空值会为节点部分文本text width
激活类似环境,因此如果您想将文本放回到中心,您需要类似的内容。minipage
align=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 width
matrix
d
第二种,以另一种方式绘制节点,先绘制三个节点 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}