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:
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.center
que 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}
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 objects
má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}
3ra versión:conmatrix of nodes
Si obj
sigues una distribución más o menos regular, en lugar de fitting
ellas, puedes dibujar matrix of nodes
. Si todo matrix
contiene 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 matrix
son 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}