Невозможно уменьшить расстояние с помощью \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) приведет к ошибке (полезная ссылка на такие вещи - "TeX by Topic" Виктора Эйкхоута, которая свободно доступна в Интернете).

Но как это поможет с TikZ? Я полагаю, что самый чистый способ начать \vskipработу внутри узла — это установить text 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}

введите описание изображения здесь

Связанный контент