Bei einem mehrteiligen Rechteck möchte ich den Abstand zwischen den Teilen verringern. Bei einem horizontal geteilten Rechteck erreiche ich das mit einem \hskip
nach dem \nodepart
Befehl.
Für ein vertikal geteiltes Rechteck habe ich es analog versucht und \hskip
durch ersetzt \vskip
. Leider gefällt das dem Compiler nicht \vskip
und endet mit einem Fehler. Der angehängte Code veranschaulicht das.
Warum vskip
funktioniert das in meinem Beispiel nicht und wie könnte ich alternativ den Abstand zwischen den vertikal geteilten Teilen des Rechtecks verringern?
\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}
Antwort1
Normalerweise werden Knoteninhalte in eine TeX
horizontale Box gesetzt. Horizontale Boxen können jedoch keine Befehle wie \vskip
diese enthalten.
\hbox{A \vskip-5pt B}
wird einen Fehler erzeugen. Dies liegt daran, dass TeX
sich im „internen horizontalen Modus“ befindet \hbox
und vertikale Befehle (z. B. \vskip
) einen Fehler erzeugen (eine nützliche Referenz für diese Art von Sachen ist „TeX by Topic“ von Victor Eijkhout, das kostenlos im Internet verfügbar ist).
Aber wie hilft das bei TikZ
? Ich nehme an, der sauberste Weg, \vskip
innerhalb eines Knotens zu arbeiten, besteht darin, den Knoten so einzustellen, text width
dass der Inhalt zuerst in einer vertikalen Box platziert wird, wo \vskip
er verwendet werden kann.
\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}