Der Abstand zwischen Teilen eines vertikal geteilten Rechtecks ​​kann mit \vskip nicht reduziert werden

Der Abstand zwischen Teilen eines vertikal geteilten Rechtecks ​​kann mit \vskip nicht reduziert werden

Bei einem mehrteiligen Rechteck möchte ich den Abstand zwischen den Teilen verringern. Bei einem horizontal geteilten Rechteck erreiche ich das mit einem \hskipnach dem \nodepartBefehl.

Für ein vertikal geteiltes Rechteck habe ich es analog versucht und \hskipdurch ersetzt \vskip. Leider gefällt das dem Compiler nicht \vskipund endet mit einem Fehler. Der angehängte Code veranschaulicht das.

Warum vskipfunktioniert 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 TeXhorizontale Box gesetzt. Horizontale Boxen können jedoch keine Befehle wie \vskipdiese enthalten.

\hbox{A \vskip-5pt B}

wird einen Fehler erzeugen. Dies liegt daran, dass TeXsich im „internen horizontalen Modus“ befindet \hboxund 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, \vskipinnerhalb eines Knotens zu arbeiten, besteht darin, den Knoten so einzustellen, text widthdass der Inhalt zuerst in einer vertikalen Box platziert wird, wo \vskiper 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}

Bildbeschreibung hier eingeben

verwandte Informationen