En un rectángulo de varias partes quiero reducir el espacio entre las partes. Para un rectángulo dividido horizontalmente, lo logré con un \hskip
después del \nodepart
comando.
Para un rectángulo dividido verticalmente lo probé de manera análoga y lo reemplacé \hskip
con \vskip
. Desafortunadamente al compilador no le gusta \vskip
esto y termina con un error. El código adjunto lo ilustra.
¿Por qué vskip
no 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 TeX
cuadro horizontal. Pero los cuadros horizontales no pueden contener comandos como \vskip
este.
\hbox{A \vskip-5pt B}
producirá un error. Esto se debe a que TeX
está en "modo horizontal interno" dentro de los \hbox
comandos 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 \vskip
trabajar dentro de un nodo es configurar el text width
nodo para que el contenido se coloque primero dentro de un cuadro vertical donde \vskip
se 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}