¿Cómo decirle selectivamente a tikz que un nodo debe adquirir sus coordenadas sumando todas las coordenadas de todas las imágenes tikz que lo rodean?

¿Cómo decirle selectivamente a tikz que un nodo debe adquirir sus coordenadas sumando todas las coordenadas de todas las imágenes tikz que lo rodean?

Debería haber una forma recomendada/estándar/habitual de hacer (lo que sugiere) lo siguiente:

\begin{tikzpicture}
  \node (tikzpicture0) at (0pt,100pt) []{
     \begin{tikzpicture}
                \ABSOLUTE-AND-CONTEXT-AWARE-node (node00) at (0pt,0pt) []{(0pt,0pt)};
                \node (node01) at (0pt,10pt)[]{(0pt,10pt)};
     \end{tikzpicture}               
  };
  \node (tikzpicture1) at (100pt,200pt) []{
     \begin{tikzpicture}    
                \node (node10) at (0pt,0pt) []{(0pt,0pt)};
                \node (node11) at (0pt,10pt)[]{(0pt,10pt)};
     \end{tikzpicture}                              
  };
  \node (tikzpicture2) at (200pt,300pt) []{
     \begin{tikzpicture}        
                \node (node20) at (0pt,0pt) []{(0pt,0pt)};
                \node (node21) at (0pt,10pt)[]{(0pt,10pt)};
     \end{tikzpicture}                                             
  };
  \draw[->] (node00)--($(node10)+(100pt,200pt)$);
\end{tikzpicture}

donde se supone que ABSOLUTO significa que se puede hacer referencia a (nodo00) fuera de la imagen tikz en la que se definió, y se supone que AND-CONTEXT-AWARE significa que la coordenada (0pt,100pt) de la imagen tikz circundante se agrega a la coordenada del nodo (0 puntos, 0 puntos).

Por supuesto, el código

\begin{tikzpicture}
  \node (tikzpicture0) at (0pt,100pt) []{
     \begin{tikzpicture}
                \node (node00) at (0pt,0pt) []{(0pt,0pt)};
                \node (node01) at (0pt,10pt)[]{(0pt,10pt)};
     \end{tikzpicture}               
  };
  \node (tikzpicture1) at (100pt,200pt) []{
     \begin{tikzpicture}    
                \node (node10) at (0pt,0pt) []{(0pt,0pt)};
                \node (node11) at (0pt,10pt)[]{(0pt,10pt)};
     \end{tikzpicture}                              
  };
  \node (tikzpicture2) at (200pt,300pt) []{
     \begin{tikzpicture}        
                \node (node20) at (0pt,0pt) []{(0pt,0pt)};
                \node (node21) at (0pt,10pt)[]{(0pt,10pt)};
     \end{tikzpicture}                                             
  };
  \draw[->] (node00)--($(node10)+(100pt,200pt)$);
\end{tikzpicture}

rendimientos

ingrese la descripción de la imagen aquí

mientras que la ilustración deseada debe verse como la ilustración (coordenada-obtenida-codificada)

ingrese la descripción de la imagen aquí

¿Qué me recomienda?

Respuesta1

El consejo general es no utilizar tikzpicturemensajes anidados. Puedes hacer lo mismo usando scopeen su lugar. En el código siguiente agregué algunos nombres a sus nodos, solo para diferenciarlos. La flecha al final de su código no coincide con la flecha en su imagen codificada ya que su punto final se deriva de node10y no node01. Agregué uno en rojo usando node01en su lugar.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \node (node00) at (0pt,0pt) []{N00:(0pt,0pt)};
  \node (node01) at (0pt,10pt)[]{N01:(0pt,10pt)};
  \begin{scope}[shift={(100pt,200pt)}]
    \node (node10) at (0pt,0pt) []{N10:(0pt,0pt)};
    \node (node11) at (0pt,10pt)[]{N11:(0pt,10pt)};  
  \end{scope}
  \begin{scope}[shift={(200pt,300pt)}]
    \node (node20) at (0pt,0pt) []{N20:(0pt,0pt)};
    \node (node21) at (0pt,10pt)[]{N21:(0pt,10pt)};
  \end{scope}
  \draw[->] (node00)--($(node10)+(100pt,200pt)$) node[anchor=west]{(N10)+(100pt,200pt)};
  \draw[red,->] (node00)--($(node01)+(100pt,200pt)$);
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Si entiendo esto correctamente, hay un problema con su concepto. Echemos un vistazo al siguiente caso:

\begin{tikzpicture}
\node at (10,10) {This was 10, 10};
\node at (15,15) {This was 15, 15};
\draw (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}

Esto nos dará

ingrese la descripción de la imagen aquí

Un par de cosas a tener en cuenta: el cuadro resultante no tiene un tamaño de 15x15 aunque tiene la mayor distancia al origen. Y tampoco tiene 5x5 debido a la longitud del texto.

Por lo tanto, no será posible encontrar dónde están los nodos en relación absoluta con el lienzo final a menos que arregle el cuadro delimitador de antemano. La solución restante sería piratear la ubicación del nodo e incluir los valores actuales del cuadro delimitador y el tamaño propio y actualizar todo en consecuencia. Incluso entonces, si coloco algo en (-2,-2)este momento, todos los valores de los nodos deben actualizarse porque el cuadro delimitador ahora de repente se vuelve 17ish x 17ish. Por lo tanto, la colocación de los nodos debe retrasarse hasta que se escriba la imagen completa. Y ni siquiera hemos tocado las transformaciones como el escalado y las traducciones.

Por lo tanto, mi opinión es que esto no funcionará con manipulaciones sencillas. Reitero el mantra general: no anidar imágenes de TikZ. Siempre hay otra manera.

Su problema real (cualquiera que sea) que motivó esta dirección probablemente podría resolverse con las respuestas de¿Se pueden exportar las coordenadas tikz a un archivo de texto?con una solución de dos pasos.

información relacionada