TikZ の異なるノード間で選択したオプションを共有するにはどうすればよいでしょうか?

TikZ の異なるノード間で選択したオプションを共有するにはどうすればよいでしょうか?

(この質問にもっと良いタイトルが見つかりませんでした。ご提案をお待ちしています。)

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};に同じ値を書き込む必要があります。より良い解決策は、両方を含む新しいスタイルを定義することです。これは次のようになります。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}

関連情報