Tikz: Linksbündig/Breite verschiedener Fitboxen ausrichten, sodass mehrere Fitboxen vertikal schön ausgerichtet sind

Tikz: Linksbündig/Breite verschiedener Fitboxen ausrichten, sodass mehrere Fitboxen vertikal schön ausgerichtet sind

Die TikzfitDie Funktionalität ist sehr schön, aber was (1) ist, wenn ich mehrere Fit-Boxen an der gleichen linken/breiten Position ausrichten möchte, sodass alle Fit-Boxen übereinstimmen und die verschiedenen Fit-Boxen vertikal sauber ausgerichtet sind?

Und (2) (fortgeschrittener): Kann ich auch den Abstand zwischen den Fitboxen dynamisch steuern? Dazu muss ich für die untergeordneten Elemente den Koordinatenraum der Leinwand in den Koordinatenraum der übergeordneten Elemente (Fitbox) ändern und dann alle Fitboxen entsprechend bestimmter Eigenschaften anordnen (Abstand zwischen den Boxen gleich).

PS: Für diesen einfachen Fall können Sie sich natürlich einige einfache Lösungen einfallen lassen, wie etwa einen zusätzlichen unsichtbaren Knoten in der oberen/unteren Fitbox, um alles auszurichten, aber das funktioniert natürlich nicht, wenn die Fitboxen komplexere Inhalte erhalten.

Ein Bild zur Verdeutlichung:

Bildbeschreibung hier eingeben

MWE:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds} 
\usetikzlibrary{shapes}
\usetikzlibrary{arrows} 
\usetikzlibrary{fit}
\begin{document} 
\begin{tikzpicture}[>=stealth',semithick,auto]
    \tikzstyle{surround} = [fill=blue!10,thick,draw=black,rounded corners=2mm] 
    \tikzstyle{obj}  = [circle, minimum width=10pt, draw, inner sep=0pt]
    \node[obj] (id1) at (2,2)  {};
    \node[obj] (id2) at (2,3) {}; 
    \node[obj] (id3) at (2.5,3) {};
    \node[obj] (id4) at (2.5,4) {};
\begin{pgfonlayer}{background} 
   \node[surround] (background) [fit = (id1)] {};
   \node[surround] (background) [fit = (id2)(id3)] {};
   \node[surround] (background) [fit = (id4)] {};
\end{pgfonlayer}  
\end{tikzpicture}
\end{document}

Antwort1

Der nächste Code zeigt eine Lösung für Ihr erstes Problem. Sie möchten ähnliche passende Knoten. Wenn Sie diese dann mit ähnlichen inneren Knoten erstellen, haben sie dieselbe Größe.

Als Beispiel

   \node[surround, fit = (id1)(id3.east|-id1.center)] {};

wird einen Knoten erstellen, der groß genug ist id1(der die Höhe und die westliche Grenze festlegt), der aber auch die Koordinate umfasst id3.east|-id1.center, die die östliche Grenze festlegt.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds} 
\usetikzlibrary{shapes}
\usetikzlibrary{arrows} 
\usetikzlibrary{fit}
\begin{document} 
\begin{tikzpicture}[>=stealth',semithick,auto,
    surround/.style={fill=blue!10,thick,draw=black,rounded corners=2mm},
    obj/.style={circle, minimum width=10pt, draw, inner sep=0pt}]
    \node[obj] (id1) at (2,2)  {};
    \node[obj] (id2) at (2,3) {}; 
    \node[obj] (id3) at (2.5,3) {};
    \node[obj] (id4) at (2.5,4) {};
\begin{scope}[on background layer] 
   \node[surround, fit = (id2)(id3)] {};
   \node[surround, fit = (id1)(id3.east|-id1.center)] {};
   \node[surround, fit = (id4)(id2.west|-id4.center)] {};
\end{scope}  
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Aktualisieren:Fester Abstand zwischen den passenden Knoten.

Ich weiß nicht, ob diese Lösung funktioniert, aber falls Sie bereits wissen, wie groß Ihre passenden Knoten sind, können Sie sie an der gewünschten Stelle zeichnen und später ausfüllen objects:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,positioning} 
\usetikzlibrary{shapes}
\usetikzlibrary{arrows} 
\usetikzlibrary{fit}
\begin{document} 
\begin{tikzpicture}[>=stealth',semithick,auto,
    surround/.style={fill=blue!10,thick,draw=black,rounded corners=2mm},
    obj/.style={circle, minimum width=10pt, draw, inner sep=0pt}]

    \node[obj] (id2) at (2,3) {}; 
    \node[obj] (id3) at (2.5,3) {};
    \begin{scope}[on background layer]
   \node[surround, fit = (id2)(id3)] (fit1) {};
   \node[surround, fit = (id2)(id3), above=5mm of fit1] (fit2) {};
   \node[surround, fit = (id2)(id3), below=15mm of fit1] (fit3) {};
   \end{scope}
    \node[obj] (id1) at (fit2-|id2)  {};
    \node[obj] (id1) at (fit3-|id3)  {};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

3. Version:mitmatrix of nodes

Wenn Sie einer mehr oder weniger regelmäßigen Verteilung folgen, können Sie objstattdessen zeichnen . Wenn alle die gleiche Anzahl von Spalten enthalten, haben alle die gleiche Breite und ihre Höhe wird mit der Anzahl der vorhandenen Zeilen festgelegt. Und wie bei regulären Knoten können Sie den Abstand zwischen ihnen festlegen.fittingmatrix of nodesmatrixmatrix

Ein kleines Beispiel:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning,arrows} 
\begin{document} 
\begin{tikzpicture}[>=stealth',semithick,auto,
    surround/.style={fill=blue!10, thick, draw=black, 
          rounded corners=2mm, matrix of nodes, nodes in empty cells, nodes={obj}, column sep=3pt, row sep=3pt},
    obj/.style={circle, minimum width=10pt, draw, inner sep=0pt}]

    \matrix[surround] (A) {& |[draw=none]| &\\
    |[draw=none]| & &|[draw=none]|\\};
    \matrix[surround, below=.5 of A] (B) { & &|[draw=none]|\\};
    \matrix[surround, below=.5 of B] (C) {& \\& |[draw=none]| &\\};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen