
Я рисую дерево в tikz, однако, похоже, что дочерние узлы повернуты, так что линия, входящая в них, смещена и проходит сквозь. Посмотрите, например, на эту картинку. Особенно обратите внимание на то, как линии смещены по центру и как они проходят через синий шар..
Я нарисовал картинку, используя:
\includepackage{tikz}
\tikzstyle planar forest=[scale=1, sibling distance=0, level distance=0, semithick]
\tikzstyle planar forest node=[scale=1, shape=circle, semithick, draw]
\tikzstyle b=[style=planar forest node, fill=black]
\tikzstyle bb=[style=planar forest node, fill=blue]
определить окружающую среду и:
\tikz[planar forest] {
\node [b, label=right:] at (0.0, 0.0) {}
child {node [bb, label=right:] at (-0.5, 1.0) {}
}
child {node [b, label=right:] at (0.5, 1.0) {}
}
;
}
нарисовать настоящую фигуру. Есть ли у кого-нибудь идеи, почему она выглядит так уродливо?
решение1
Основная проблема, насколько я могу судить, заключается в том, что вы смешиваете древовидную структуру с ручным размещением всех узлов. Так что, если бы мне пришлось рискнуть предположить, я бы предположил, что втвойкод --- код, который воспроизводит проблему, в отличие от кода, которым вы поделились, который не воспроизводит проблему --- вы сообщаете TiкZ, что дерево растет в одном направлении, в то время как вручную принудительно размещаются узлы, как будто оно растет в другом.
Нет смысла использовать дерево, а затем устанавливать и sibling distance
и level distance
на ноль. По крайней мере, у меня может просто не хватать воображения, но я не могу придумать веской причины, по которой вам бы хотелось это сделать.
Вот версия вашего дерева, обновленная с целью удаления устаревших элементов \tikzstyle
и измененная так, чтобы она действительно была деревом.
\tikzset{
planar forest node/.style={shape=circle, semithick, draw},
b/.style={style=planar forest node, fill=black},
bb/.style={style=planar forest node, fill=blue},
}
\tikz {
\node [b, label=right:A] {}
child {node [bb, label=right:B] {}
}
child {node [b, label=right:C] {}
}
;
}
Или, с grow=up
:
Если я постараюсь, то смогу получить приблизительно такой же результат, как у вас.
Но я добился этого и обнулением level
, sibling distance
и настройкой yscale=-.75
:
\tikz [sibling distance=0, level distance=0, yscale=-.75] {
\node [b] {}
child {node [bb] at (-.5,1) {}
}
child {node [b] at (.5,1) {}
}
;
}
что вряд ли является очевидным решением.
Для полноты картины вот forest
:
\begin{forest}
[, b
[, bb
]
[, b
]
]
\end{forest}
который создает дерево из гораздо более краткой спецификации.
Полный код:
\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\begin{document}
\tikzset{
planar forest node/.style={shape=circle, semithick, draw},
b/.style={style=planar forest node, fill=black},
bb/.style={style=planar forest node, fill=blue},
}
\tikz {
\node [b, label=right:A] {}
child {node [bb, label=right:B] {}
}
child {node [b, label=right:C] {}
}
;
}
\tikz [grow=up] {
\node [b, label=right:A] {}
child {node [bb, label=right:B] {}
}
child {node [b, label=right:C] {}
}
;
}
\tikz [sibling distance=0, level distance=0, yscale=-.75] {
\node [b] {}
child {node [bb] at (-.5,1) {}
}
child {node [b] at (.5,1) {}
}
;
}
\begin{forest}
[, b
[, bb
]
[, b
]
]
\end{forest}
\end{document}