(この質問にもっと良いタイトルが見つかりませんでした。ご提案をお待ちしています。)
TikZ で新しい図形をいくつか作成しましたが、特定のキーがこの最後のノードに渡されたときに、そのうちの 1 つを別の図形の下に配置したいと思います。2 つの長方形を使用した例で、私が何を意味しているかをよりわかりやすく示します。
\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}
ご覧のとおり、最初のノードに 2 番目のノードの作成が正しく参照されるように追加するスタイルを作成しました。すべて正常に動作しますが、たとえば両方の図形を一緒に回転する必要がある場合、最初の四角形のみが回転 (左) されるため、解決策が見つかりません。目的の結果を達成した唯一の方法は、コードに示されている方法で、2 番目のノードを手動で描画し、それに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}