Como dizer seletivamente ao tikz que um nó deve adquirir sua coordenada adicionando todas as coordenadas de todas as imagens tikz incluídas?

Como dizer seletivamente ao tikz que um nó deve adquirir sua coordenada adicionando todas as coordenadas de todas as imagens tikz incluídas?

Deve haver uma maneira recomendada/padrão/usual de fazer (o que é sugerido por) o seguinte:

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

onde ABSOLUTE significa que (node00) pode ser referenciado fora do tikzpicture em que foi definido, e AND-CONTEXT-AWARE significa que a coordenada (0pt,100pt) do tikzpicture envolvente é adicionada à coordenada do nó (0pt,0pt).

Claro, o 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}

rendimentos

insira a descrição da imagem aqui

enquanto a ilustração pretendida deve se parecer com a ilustração (coordenada codificada obtida)

insira a descrição da imagem aqui

O que você recomenda?

Responder1

O conselho geral é não usar tikzpictures aninhados. Você pode fazer o mesmo usando scopeem vez disso. No código abaixo adicionei alguns nomes aos seus nós, apenas para diferenciá-los. A seta no final do seu código não corresponde à seta na sua imagem codificada, pois seu ponto final é derivado de node10e não node01. Eu adicionei um em vermelho usando node01.

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

insira a descrição da imagem aqui

Responder2

Se bem entendi, há um problema com o seu conceito. Vejamos o seguinte 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}

Isto nos dará

insira a descrição da imagem aqui

Algumas coisas a serem observadas: a caixa resultante não tem o tamanho 15x15, embora tenha a maior distância até a origem. E também não tem 5x5 por causa do comprimento do texto.

Portanto, não será possível descobrir onde os nós estão absolutamente relativos à tela final, a menos que você conserte a caixa delimitadora de antemão. A solução restante seria invadir o posicionamento do nó e incluir os valores atuais da caixa delimitadora e o tamanho próprio e atualizar tudo de acordo. Mesmo assim, se eu colocar algo (-2,-2)agora, todos os valores dos nós precisarão ser atualizados porque a caixa delimitadora agora se torna repentinamente 17ish x 17ish. Portanto, a colocação dos nós deve ser adiada até que toda a imagem esteja composta. E nem tocamos nas transformações como dimensionamento e translações.

Portanto, minha opinião é que isso não funcionará com manipulações diretas. Reitero o mantra geral: não aninhe fotos TikZ. Sempre há outra maneira.

Seu problema real (seja ele qual for) que motivou essa direção provavelmente poderia ser resolvido pelas respostas deAs coordenadas tikz podem ser exportadas para um arquivo de texto?com uma solução de duas passagens.

informação relacionada