Tikz: Alinhe à esquerda/largura de diferentes caixas de ajuste para que várias caixas de ajuste se alinhem perfeitamente verticalmente

Tikz: Alinhe à esquerda/largura de diferentes caixas de ajuste para que várias caixas de ajuste se alinhem perfeitamente verticalmente

O Tikzajustara funcionalidade é muito boa, mas e (1) se eu quiser alinhar várias caixas de ajuste no mesmo local esquerdo/largura para que todas as caixas de ajuste correspondam, para que diferentes caixas de ajuste fiquem bem alinhadas verticalmente?

E (2) (mais avançado), posso também controlar dinamicamente o espaçamento entre os fitboxes? Portanto, isso requer a mudança para os filhos do espaço de coordenadas da tela para o espaço de coordenadas pai (fitbox) e, em seguida, o layout de todas as fitboxes de acordo com certas propriedades (o espaçamento entre as caixas é o mesmo).

PS: Para este caso simples, é claro que você pode encontrar algumas soluções simples, como um nó invisível extra no fitbox superior/inferior para alinhar tudo, mas é claro que isso não funciona quando os fitboxes obtêm conteúdo mais complexo.

Uma imagem para esclarecer:

insira a descrição da imagem aqui

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}

Responder1

O próximo código mostra uma solução para seu primeiro problema. Você deseja nós de ajuste semelhantes, então, se construí-los com nós internos semelhantes, eles terão o mesmo tamanho.

Como um exemplo

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

construirá um nó grande o suficiente para id1(que fixa a altura e a fronteira oeste), mas também abrangerá as coordenadas id3.east|-id1.centerque fixarão a fronteira leste.

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

insira a descrição da imagem aqui

Atualizar:Distância fixa entre nós de ajuste.

Não sei se esta solução servirá, mas caso você já saiba o tamanho dos seus nós de encaixe, você pode desenhá-los onde quiser e preencher objectsdepois:

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

insira a descrição da imagem aqui

3ª versão:commatrix of nodes

Se você objsegue uma distribuição mais ou menos regular, em vez fittingdelas, você pode desenhar matrix of nodes. Se todas matrixcontiverem o mesmo número de colunas, todas terão a mesma largura e sua altura será fixada com o número de linhas presentes. E como matrixsão os nós regulares, você pode fixar a distância entre eles.

Um pequeno exemplo:

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

insira a descrição da imagem aqui

informação relacionada