![Tikz:如何拆分节点并在其中定位文本](https://linux22.com/image/263487/Tikz%EF%BC%9A%E5%A6%82%E4%BD%95%E6%8B%86%E5%88%86%E8%8A%82%E7%82%B9%E5%B9%B6%E5%9C%A8%E5%85%B6%E4%B8%AD%E5%AE%9A%E4%BD%8D%E6%96%87%E6%9C%AC.png)
我有一个很大的问题:
我需要一个如下所示的 TikZ 节点:
但我不知道如何像那样分割节点。特别是“更多文本”是一个大问题。我尝试的所有方法都以错误告终。所以我又从头开始。有人能帮我吗?
我的最后一段代码确实看起来像那样,但没有起作用......
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{calc,positioning}
\begin{document}
\begin{tikzpicture}
\node[name=data, rectangle split, rectangle split horizontal, rectangle split draw splits=false, draw, rounded corners=5pt] {1 \nodepart{two} 2 \nodepart{three} 3 \nodepart{four} 4 \nodepart{five} 5 \nodepart{six} 6};
\foreach \subnode in {1,...,5}% counter goes 1 to number_of_subnodes-1
{\draw[dashed] ($(data.north east)!{\subnode*0.25}!(data.north west)$) -- ($(data.south east)!{\subnode*0.25}!(data.south west)$);}
\end{tikzpicture}
\end{document}
还有一个问题:为什么CMD没有居中???
\node[name=data, rectangle split, very thick,
rectangle split horizontal,
rectangle split parts=6,
rectangle split draw splits=true,
draw, rounded corners=2pt,
label={[fill=white,inner sep=0pt,font=\tiny]center:Daten/Parameter},
align=center,
text width=2.5em,
inner sep=2pt,
font=\tiny] at (mega88)
{CMD\nodepart{two} ~
\nodepart{three} ~
\nodepart{four} ~
\nodepart{five} ~
\nodepart{six}CS};
答案1
默认情况下rectangle split
有 4 个部分,因此如果您需要更多,则必须使用 明确修复它们rectangle split parts=number_you_want
。
第二个问题是more text
。我在分割的节点上使用了另一个节点。
\node[fill=white,inner sep=1pt]
绘制一个白色背景节点,比前一个节点小一点。结果是:
完整的代码如下:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{calc,positioning}
\begin{document}
\begin{tikzpicture}
\node[name=data, rectangle split,
rectangle split horizontal,
rectangle split parts=6,
rectangle split draw splits=true,
draw, rounded corners=5pt] (main)
{text \nodepart{two} 2
\nodepart{three} 3
\nodepart{four} 4
\nodepart{five} 5
\nodepart{six} text};
\node[fill=white,inner sep=1pt] at (main.center) {more text};
\end{tikzpicture}
\end{document}
您不需要在第 2 部分到第 5 部分中写任何内容,但我留在那里向您展示more text
节点如何覆盖它们。
编辑:more text
作为label
。
另一个选择是使用label
选项而不是第二个节点。事实上,label
它们就像节点,所以你可以修复它们的选项。在这种情况下,你必须修复它的宽度(通过minimum size
或text width
)以确保覆盖空白部分。如果你想对已填充和空白部分使用不同的大小,请text width
对已填充部分和rectangle split empty part width
空白部分使用选项。空白部分未声明,textpart{two} ~
不是空白部分,而是~
内部有(不可破坏空间)的部分。如果text width
比里面的文本更宽,它将向左对齐,因此添加align=center
以将其放置在其空间的中心。
现在包含所有这些建议的代码
\begin{tikzpicture}
\node[name=data, rectangle split,
rectangle split horizontal,
rectangle split parts=6,
rectangle split draw splits=true,
draw, rounded corners=5pt,
text width=2cm,
align=center,
rectangle split empty part width=5mm,
label={[fill=white,
inner sep=1pt,
text width=2.5cm,
align=center]center:more text \dots},
] (main)
{CMD
% \nodepart{two} ~
% \nodepart{three} ~
% \nodepart{four} ~
% \nodepart{five} ~
\nodepart{six} CS};
\end{tikzpicture}
结果