マトリックスノード内の子ノードの奇妙な動作

マトリックスノード内の子ノードの奇妙な動作

子ノードは、行列ノード内で奇妙な動作をします。そして、それは 1 つの行列ノードにのみ現れます。この単純なケースでは、行列ノードなしで描画する方法があることは知っています。しかし、本質的には、各要素がツリーである半順序集合のハッセ図を描く必要があります。したがって、行列ノードが保持されていれば便利です。いずれにしても、奇妙な動作も興味深いものです。次のことも確認してください。子ノードが奇妙に右に傾いているネストされた tikzpicture を使用する場合にも表示されることを確認します。マトリックス ノードの場合に新しい質問を提起するように提案されました。

隣り合う2本の木

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
    [level distance = 10mm]

    \node [matrix, label=left:{$T_1$}] (T1)
    {
            \begin{scope}
                [every node/.style={draw, circle, inner sep=1pt, minimum size = 1mm}]
                \node {}
                child {node {} child {node {}}}
                child {node {} child {node {}}}
                child {node {} child {node {}}};
            \end{scope}\\
        };

    \node [matrix, right = of T1, label=left:{$T_2$}] (T2)
    {
            \begin{scope}
                [every node/.style={draw, circle, inner sep=1pt, minimum size = 1mm}]
                \node {}
                child {node {} child {node {}}}
                child {node {} child {node {}}}
                child {node {} child {node {}}};
            \end{scope}\\
        };

\end{tikzpicture}
\end{document}

答え1

ライブラリpositioningright = of …暗黙的に を設定しますanchor = west。残念ながら、これはマトリックス内のノードに渡されます。

の代わりにpositioningを使用する行列の追加キーを作成することもできますが、この場合、最も簡単な解決策は、行列のすべてのノードに対して(デフォルト) または( のエイリアス) を明示的に設定することです。matrix anchoranchoranchor = centercenteredanchor = center

TikZ のツリー構文は非常にシンプルで、アンカーを自動的に設定しません。

コード

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
  level distance = 10mm,
  every matrix/.style={
    nodes={draw, circle, inner sep=1pt, minimum size = 1mm, centered}}]
\node [matrix, label=left:{$T_1$}] (T1){
  \node {}
    child {node {} child {node {}}}
    child {node {} child {node {}}}
    child {node {} child {node {}}};\\};
\node [matrix, right = of T1, label=left:{$T_2$}] (T2){
  \node {}
    child {node {} child {node {}}}
    child {node {} child {node {}}}
    child {node {} child {node {}}};\\};
\end{tikzpicture}
\end{document}

出力

ここに画像の説明を入力してください

答え2

この問題は に関連しているようですpositioning。回避策は次のとおりです。

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}
    [level distance = 10mm]

    \node [matrix, label=left:{$T_1$}] (T1)
    {
            \begin{scope}
                [every node/.style={draw, circle, inner sep=1pt, minimum size = 1mm}]
                \node [grow=down] {}
                child {node {} child {node {}}}
                child {node {} child {node {}}}
                child {node {} child {node {}}};
            \end{scope}\\
        };

    \node [matrix, label=left:{$T_2$}, matrix anchor=west] at ($(T1.east) + (10mm,0)$) (T2)
    {
            \begin{scope}
                [every node/.style={draw, circle, inner sep=1pt, minimum size = 1mm}]
                \node {}
                child {node {} child {node {}}}
                child {node {} child {node {}}}
                child {node {} child {node {}}};
            \end{scope}\\
        };

\end{tikzpicture}
\end{document}

関連情報