无法使用 \vskip 减少垂直分割矩形各部分之间的空间

无法使用 \vskip 减少垂直分割矩形各部分之间的空间

在多部分矩形中,我想减少各部分之间的空间。对于水平分割的矩形,我使用命令\hskip后的 来实现这一点\nodepart

对于垂直分割的矩形,我尝试了类似的方法,并用 替换\hskip\vskip不幸的是,编译器不喜欢\vskip这里 以错误结尾。附加的代码说明了这一点。

为什么vskip在我的例子中不起作用以及如何才能减少矩形垂直分割部分之间的空间?


\documentclass{standalone}

\newcommand{\NodeTwoColsH}[2]{%
   #1\nodepart{two}\hskip -5pt #2%
} 

\newcommand{\NodeTwoColsV}[2]{%
   #1\nodepart{two}\vskip -5pt #2%
} 

\usepackage{tikz}
\usetikzlibrary{shapes.multipart}

\begin{document}
\begin{tikzpicture}[
         sibling distance = 2.5cm,
         every node/.style = {
            draw
         },
         split/.style = {
            rectangle split draw splits=false,
            rectangle split,
            draw,
            rectangle split parts=2
         },
         v split/.style = {
            split
         },
         h split/.style = {
            split,
            rectangle split horizontal
         }
   ]

   \node{root}
   child { node[h split] {\NodeTwoColsH{Left}{Right}} }
   child { node[h split] {\NodeTwoColsH{Left}{Right}} 
      child { node[v split]  {\NodeTwoColsV{Up}{Down}} }
      child { node[v split]  {\NodeTwoColsV{Up}{Down}} }
   };

\end{tikzpicture}
\end{document}

答案1

一般情况下,节点内容放在TeX水平框中。但水平框不能包含如下\vskip命令

\hbox{A \vskip-5pt B}

会产生错误。这是因为TeX处于“内部水平模式”,\hbox并且垂直命令(例如\vskip)会产生错误(这类内容的一个有用参考是 Victor Eijkhout 的“TeX by Topic”,可在互联网上免费获取)。

但是这对 有什么帮助呢?我认为在节点内部工作的TikZ最干净的方法是设置节点的 ,以便首先将内容放置在可以使用的垂直框内。\vskiptext width\vskip

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

\begin{document}
\begin{tikzpicture}[every node/.style={
  rectangle split, 
  rectangle split draw splits=false, 
  rectangle split parts=2, draw, text width=1.5cm}]

\node at (0,0) {Top\nodepart{two} Bottom};
\node at (2,0) {Top\nodepart{two}\vskip-10pt Bottom};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容