Странное поведение дочернего узла внутри матричного узла

Странное поведение дочернего узла внутри матричного узла

Дочерний узел ведет себя странно внутри матричного узла. И он появляется только в одном матричном узле. Я знаю, что есть методы, чтобы нарисовать его без матричного узла в этом простом случае. Но по сути мне нужно нарисовать диаграмму Хассе частично упорядоченного множества, где каждый элемент является деревом. Поэтому было бы неплохо, если бы матричный узел сохранился. В любом случае, странное поведение также интересно. Можно также проверитьдочерний узел странно наклонен вправочтобы увидеть, что это также появляется при использовании вложенного tikzpicture. Мне предлагается поднять новый вопрос для случая узла матрицы.

Два дерева рядом друг с другом

\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

Библиотека неявно устанавливает positioning. К сожалению, это передается вниз к узлам внутри матрицы.right = of …anchor = west

Мы могли бы создать дополнительные positioningключи для матрицы, которые используют matrix anchorвместо , anchorно в этом случае самым простым решением было бы явно задать anchor = center(значение по умолчанию) или centered(псевдоним для anchor = 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}

Связанный контент