TikZ의 여러 노드 간에 선택한 옵션을 공유하는 방법은 무엇입니까?

TikZ의 여러 노드 간에 선택한 옵션을 공유하는 방법은 무엇입니까?

(질문에 대한 더 나은 제목을 찾지 못했습니다. 제안을 환영합니다.)

TikZ에서 몇 가지 새로운 모양을 만들었고 특정 키가 이 마지막 노드에 전달될 때 그 중 하나를 다른 모양 아래에 배치하고 싶습니다. 두 개의 직사각형을 사용한 예를 통해 제가 의미하는 바를 더 잘 보여드리겠습니다.

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{patterns,calc}

\tikzstyle{ground}=[append after command={;\node[draw=red,rectangle,anchor=north] (B) at (\tikzlastnode.south){a}}]


\begin{document}
\begin{tikzpicture}
  \node[draw,rectangle,ground,rotate=10] (A) at (0,0){a};% not good
  \begin{scope}[shift={(1,0)}]
    \node[draw,rectangle,rotate=10] (B) at (0,0){a};
    \node[draw=red,rectangle,anchor=north,rotate=10] (C) at (B.south){a};% OK
  \end{scope}
\end{tikzpicture}
\end{document}

누적 노드

보시다시피, 저는 두 번째 노드 생성 시 이를 올바르게 참조하는 첫 번째 노드에 추가하는 스타일을 만들었습니다. 모든 것이 잘 작동하지만 예를 들어 두 모양을 함께 회전해야 하는 경우 첫 번째 직사각형만 회전하기 때문에(왼쪽) 해결책을 찾을 수 없습니다. 원하는 결과를 얻은 유일한 방법은 코드에 표시된 방법으로 두 번째 노드를 수동으로 그리고 옵션을 전달해야 했습니다 rotate.

그러면 원하는 결과(오른쪽)를 얻을 수 있는 방법이 있지만 첫 번째 예(왼쪽)의 구문을 사용하면 될까요? 관련된 실제 모양은 모두 제가 그린 것이므로 사용자 정의해야 하는 경우 괜찮습니다.

답변1

추가 노드에 영향을 미치는 매개변수를 알고 있는 경우 해당 매개변수를 에 포함할 수 있습니다 .style. 여기에 코드를 기반으로 한 예가 있습니다. 그것이 당신의 실제 문제에 도움이 될지 모르겠습니다.

귀하의 예에서는 추가 노드를 원하므로 기본값이 0인 이 매개변수를 포함하는 스타일을 rotate정의했습니다 .ground

    ground/.style={%
       append after command={;%
          \node[draw=red,rectangle,
             anchor=north,rotate=#1] (B) 
             at (\tikzlastnode.south){a}}},
    ground/.default=0,

이제 쓸 수 있지만 이 방법을 사용하면 및 \node[draw,rectangle,ground=10,rotate=10] (A) at (0,0){a};에 동일한 값을 써야 합니다 . 더 나은 해결책은 두 가지를 모두 포함하는 새로운 스타일을 정의하는 것입니다. 이는 다음과 같습니다 .groundrotategrounded

    grounded/.style={ground=#1,rotate=#1},
    grounded/.default=0}

전체 코드는 다음과 같습니다.

\documentclass[tikz,border=1mm]{standalone}

\tikzset{%
    ground/.style={%
       append after command={;%
          \node[draw=red,rectangle,
             anchor=north,rotate=#1] (B) 
             at (\tikzlastnode.south){a}}},
    ground/.default=0,
    grounded/.style={ground=#1,rotate=#1},
    grounded/.default=0}

\begin{document}
\begin{tikzpicture}
  \node[draw,rectangle,ground=10,rotate=10] (A) at (0,0){a};
  \node[draw,rectangle,grounded] (A) at (0.5,0){a};
  \node[draw,rectangle,grounded=25] (A) at (1,0){a};    
  \node[draw,rectangle,grounded=-25] (A) at (1.5,0){a};
\end{tikzpicture}
\end{document}

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

그리고 다음 사항을 살펴보시기 바랍니다.TikZ 스타일을 정의하려면 \tikzset 또는 \tikzstyle을 사용해야 합니까?

답변2

범위와 변형 모양을 사용하여 이것을 시도해 보십시오.

  \begin{scope}[shift={(2,0)},rotate=10,transform shape]
  \node[draw,rectangle,ground,] (A) at (0,0){a};% not good
  \end{scope}

관련 정보