
Дочерний узел ведет себя странно внутри матричного узла. И он появляется только в одном матричном узле. Я знаю, что есть методы, чтобы нарисовать его без матричного узла в этом простом случае. Но по сути мне нужно нарисовать диаграмму Хассе частично упорядоченного множества, где каждый элемент является деревом. Поэтому было бы неплохо, если бы матричный узел сохранился. В любом случае, странное поведение также интересно. Можно также проверитьдочерний узел странно наклонен вправочтобы увидеть, что это также появляется при использовании вложенного 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}