В многосоставном прямоугольнике я хочу уменьшить расстояние между частями. Для горизонтально разделенного прямоугольника я добился этого с помощью команды \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}