在 TikZ 中使用具有多个文本部分的节点时自定义分割线?

在 TikZ 中使用具有多个文本部分的节点时自定义分割线?

我想知道,在定义具有多个文本部分的节点时,是否可以自定义分割线?例如,我希望它是虚线或虚线,而不是实线。

例如,下面的代码生成以下图片:

在此处输入图片描述

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}
  \node[rectangle split, draw] {1 \nodepart{two} 2 \nodepart{three} 3 \nodepart{four} 4};
\end{tikzpicture}
\end{document}

我希望 1-2、2-3 和 3-4 之间的线不仅仅是一条实心黑线。

答案1

没有选择可以做到这一点。但:有个好消息。您可以禁用“子节点”之间的分隔线(使用选项rectangle split draw splits=false- 如您所见,它采用布尔参数)并根据需要手动绘制分隔线。这是可能的,因为分隔线端点的锚点仍然可用且可自由访问。您需要做的就是命名您的节点。(这里我给了它非常原始的examplenode名字。):

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}
  \node[name=examplenode, rectangle split, rectangle split draw splits=false, draw] {1 \nodepart{two} 2 \nodepart{three} 3 \nodepart{four} 4};
  \draw[dashed] (examplenode.text split west) -- (examplenode.text split east);
  \draw[dashed] (examplenode.two split west) -- (examplenode.two split east);
  \draw[dashed] (examplenode.three split west) -- (examplenode.three split east);
\end{tikzpicture}
\end{document}

在此处输入图片描述

编辑:对于水平分割矩形,锚点的名称不会被“翻译”。在这种情况下,需要使用calc库进行一些小改动:TikZ

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{calc,positioning}

\begin{document}
\begin{tikzpicture}
  \node[name=examplenode, rectangle split, rectangle split horizontal, rectangle split draw splits=false, draw] {1 \nodepart{two} 2 \nodepart{three} 3 \nodepart{four} 4};
  \draw[dashed] ($(examplenode.north)!0.5!(examplenode.north west)$) -- ($(examplenode.south)!0.5!(examplenode.south west)$);
  \draw[dashed] (examplenode.north) -- (examplenode.south);
  \draw[dashed] ($(examplenode.north)!0.5!(examplenode.north east)$) -- ($(examplenode.south)!0.5!(examplenode.south east)$);
\end{tikzpicture}
\end{document}

这里,矩形的角仍然以相同的方式命名,顶线和底线的中心也是如此。通过取顶线和底线的中间(examplenode.northexamplenode.south),您可以绘制中心线。其他两条线是通过找到角和顶线/底线中间之间的线段的中间来使用的。(后一个代码可以调整以将分隔子节点的线放置在不同位置,例如当子节点的大小不相同时。)下面是更通用的代码,使用\foreach循环来绘制分隔线。

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{calc,positioning}

\begin{document}
\begin{tikzpicture}
  \node[name=examplenode, rectangle split, rectangle split horizontal, rectangle split draw splits=false, draw] {1 \nodepart{two} 2 \nodepart{three} 3 \nodepart{four} 4};
  \foreach \subnode in {1,...,3}% counter goes 1 to number_of_subnodes-1
  {\draw[dashed] ($(examplenode.north east)!{\subnode*0.25}!(examplenode.north west)$) -- ($(examplenode.south east)!{\subnode*0.25}!(examplenode.south west)$);}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果你在上面的代码中替换锚点(将循环中的行更改\foreach为: {\draw[dashed] ($(examplenode.north east)!{\subnode*0.25}!(examplenode.south east)$) -- ($(examplenode.north west)!{\subnode*0.25}!(examplenode.south west)$);},则垂直节点将正确分割。

相关内容