No se puede reducir el espacio con \vskip entre partes de un rectángulo dividido verticalmente

No se puede reducir el espacio con \vskip entre partes de un rectángulo dividido verticalmente

En un rectángulo de varias partes quiero reducir el espacio entre las partes. Para un rectángulo dividido horizontalmente, lo logré con un \hskipdespués del \nodepartcomando.

Para un rectángulo dividido verticalmente lo probé de manera análoga y lo reemplacé \hskipcon \vskip. Desafortunadamente al compilador no le gusta \vskipesto y termina con un error. El código adjunto lo ilustra.

¿Por qué vskipno funciona en mi ejemplo y cómo podría, alternativamente, reducir el espacio entre las partes divididas verticalmente del rectá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}

Respuesta1

En circunstancias normales, el contenido de los nodos se coloca en un TeXcuadro horizontal. Pero los cuadros horizontales no pueden contener comandos como \vskipeste.

\hbox{A \vskip-5pt B}

producirá un error. Esto se debe a que TeXestá en "modo horizontal interno" dentro de los \hboxcomandos y verticales (por ejemplo, \vskip) producirá un error (una referencia útil para este tipo de cosas es "TeX by Topic" de Victor Eijkhout, que está disponible gratuitamente en Internet).

¿Pero cómo ayuda esto TikZ? Supongo que la forma más limpia de \vskiptrabajar dentro de un nodo es configurar el text widthnodo para que el contenido se coloque primero dentro de un cuadro vertical donde \vskipse pueda usar.

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

ingrese la descripción de la imagen aquí

información relacionada