Não é possível reduzir o espaço com \vskip entre partes do retângulo dividido verticalmente

Não é possível reduzir o espaço com \vskip entre partes do retângulo dividido verticalmente

Em um retângulo multipartes quero reduzir o espaço entre as partes. Para um retângulo dividido horizontalmente, consegui isso com um \hskipapós o \nodepartcomando.

Para um retângulo dividido verticalmente, tentei de forma análoga e substituí \hskippor \vskip. Infelizmente o compilador não gosta \vskipdaqui e termina com um erro. O código anexado ilustra isso.

Por que vskipnão funciona no meu exemplo e como eu poderia reduzir alternativamente o espaço entre as partes divididas verticalmente do retângulo?


\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}

Responder1

Em circunstâncias normais, o conteúdo do nó é colocado em uma TeXcaixa horizontal. Mas as caixas horizontais não podem conter comandos como \vskipeste

\hbox{A \vskip-5pt B}

produzirá um erro. Isso ocorre porque TeXestar no "modo horizontal interno" dentro dos \hboxcomandos e verticais (por exemplo, \vskip) produzirá um erro (uma referência útil para esse tipo de coisa é "TeX by Topic" de Victor Eijkhout que está disponível gratuitamente na internet).

Mas como isso ajuda TikZ? Suponho que a maneira mais limpa de \vskiptrabalhar dentro de um nó é definir o text widthconteúdo do nó para que o conteúdo seja primeiro colocado dentro de uma caixa vertical onde \vskippossa ser usado.

\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}

insira a descrição da imagem aqui

informação relacionada