Tikz: Alinee a la izquierda/ancho de diferentes cuadros de ajuste para que varios cuadros de ajuste se alineen bien verticalmente

Tikz: Alinee a la izquierda/ancho de diferentes cuadros de ajuste para que varios cuadros de ajuste se alineen bien verticalmente

Los TikzadaptarLa funcionalidad es muy buena, pero ¿qué (1) sucede si quiero alinear varios cuadros de ajuste en la misma ubicación izquierda/ancho para que todos los cuadros de ajuste coincidan, de modo que diferentes cuadros de ajuste queden bien alineados verticalmente?

Y (2) (más avanzado), ¿puedo también controlar dinámicamente el espacio entre los fitboxes? Por lo tanto, esto requiere cambiar para los niños del espacio de coordenadas del lienzo al espacio de coordenadas principal (fitbox) y luego diseñar todos los fitboxes de acuerdo con ciertas propiedades (el espacio entre cuadros es el mismo).

PD: Para este caso simple, por supuesto, puedes encontrar algunas soluciones simples, como un nodo invisible adicional en el fitbox superior/inferior para alinear todo, pero esto, por supuesto, no funciona cuando los fitboxes obtienen contenido más complejo.

Una imagen para aclarar:

ingrese la descripción de la imagen aquí

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}

Respuesta1

El siguiente código muestra una solución para su primer problema. Quieres nodos de ajuste similares, luego, si los construyes con nodos internos similares, tendrán el mismo tamaño.

Como ejemplo

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

construirá un nodo lo suficientemente grande para id1(que fija la altura y el borde occidental) pero también abarcará las coordenadas id3.east|-id1.centerque fijarán el borde oriental.

\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}

ingrese la descripción de la imagen aquí

Actualizar:Distancia fija entre nodos de ajuste.

No sé si esta solución servirá, pero en caso de que ya sepas qué tan grandes son tus nodos de ajuste, puedes dibujarlos donde quieras y rellenarlos objectsmás tarde:

\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}

ingrese la descripción de la imagen aquí

3ra versión:conmatrix of nodes

Si objsigues una distribución más o menos regular, en lugar de fittingellas, puedes dibujar matrix of nodes. Si todo matrixcontiene el mismo número de columnas, todas tendrán el mismo ancho y su alto se fijará con el número de filas presentes. Y como matrixson los nodos normales, puedes fijar la distancia entre ellos.

Un pequeño ejemplo:

\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}

ingrese la descripción de la imagen aquí

información relacionada