모든 둘러싸는 tikzpicture의 모든 좌표를 추가하여 노드가 해당 좌표를 획득해야 함을 tikz에 선택적으로 알리는 방법은 무엇입니까?

모든 둘러싸는 tikzpicture의 모든 좌표를 추가하여 노드가 해당 좌표를 획득해야 함을 tikz에 선택적으로 알리는 방법은 무엇입니까?

다음을 수행하는 권장/표준/일반적인 방법(권장 사항)이 있어야 합니다.

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

여기서 ABSOLUTE는 (node00)이 정의된 tikzpicture 외부에서 참조될 수 있음을 의미하고 AND-CONTEXT-AWARE는 둘러싸는 tikzpicture의 좌표(0pt,100pt)가 노드의 좌표에 추가된다는 것을 의미해야 합니다. (0포인트,0포인트).

물론 코드는

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

수확량

여기에 이미지 설명을 입력하세요

의도한 그림은 (하드 코딩된 좌표 획득-) 그림과 같아야 합니다.

여기에 이미지 설명을 입력하세요

추천 메뉴가 무엇인가요?

답변1

일반적인 조언은 중첩된 tikzpictures를 사용하지 않는 것입니다. 대신에 동일한 작업을 수행할 수 있습니다 scope. 아래 코드에서는 노드에 몇 가지 이름을 추가하여 차이점을 두었습니다. 코드 끝에 있는 화살표는 끝점이 node10and not 에서 파생되므로 하드코딩된 그림의 화살표 5개가 아닙니다 node01. 대신 빨간색으로 하나를 추가했습니다 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}

여기에 이미지 설명을 입력하세요

답변2

내가 이것을 올바르게 이해했다면 당신의 개념에 문제가 있는 것입니다. 다음 사례를 살펴보겠습니다.

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

이것은 우리에게 줄 것이다

여기에 이미지 설명을 입력하세요

주목해야 할 몇 가지 사항: 결과 상자의 크기는 15x15가 아니지만 원점까지의 거리가 가장 큽니다. 또한 텍스트 길이 때문에 5x5도 없습니다.

따라서 경계 상자를 미리 수정하지 않으면 노드가 최종 캔버스를 기준으로 절대적으로 상대적인 위치를 찾는 것이 불가능합니다. 나머지 해결책은 노드 배치를 해킹하고 현재 경계 상자 값과 자체 크기를 포함하고 이에 따라 모든 것을 업데이트하는 것입니다. 그럼에도 불구하고 지금 뭔가를 배치하더라도 (-2,-2)경계 상자가 갑자기 17ish x 17ish가 되므로 모든 노드 값을 업데이트해야 합니다. 따라서 전체 그림이 조판될 때까지 노드 배치를 연기해야 ​​합니다. 그리고 우리는 스케일링이나 번역 같은 변형도 건드리지 않았습니다.

따라서 내 의견은 이것이 간단한 조작으로는 성공하지 못할 것이라는 것입니다. 나는 일반적인 주문을 반복합니다: TikZ 사진을 중첩하지 마십시오. 항상 다른 방법이 있습니다.

이 방향에 동기를 부여한 실제 문제(무엇이든)는 아마도 다음 답변으로 해결될 수 있습니다.tikz 좌표를 텍스트 파일로 내보낼 수 있나요?2단계 솔루션을 사용합니다.

관련 정보