(질문에 대한 더 나은 제목을 찾지 못했습니다. 제안을 환영합니다.)
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};
에 동일한 값을 써야 합니다 . 더 나은 해결책은 두 가지를 모두 포함하는 새로운 스타일을 정의하는 것입니다. 이는 다음과 같습니다 .ground
rotate
grounded
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}