我想知道,在定义具有多个文本部分的节点时,是否可以自定义分割线?例如,我希望它是虚线或虚线,而不是实线。
例如,下面的代码生成以下图片:
\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.north
,examplenode.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)$);}
,则垂直节点将正确分割。