
Я пытаюсь создать tizktree, который должен выглядеть следующим образом:
На данный момент мой код латекса выглядит следующим образом:
\begin{tikzpicture}
\node {r} [grow'=right]
child {node {$C^h$}
child {node {$C^h$} }
child {node {$C^l$}}
}
child {node {$C^l$}
child {node {$C^h$}}
child {node {$C^l$}}
};
\end{tikzpicture}
Проблема в том, что этот код приводит к перекрытию некоторых узлов, и я не уверен, как обозначить стрелки как P^h и P^l.
Любая помощь будет оценена по достоинству.
решение1
Если forest
это опция, она автоматически настроит макет дерева для размещения узлов. Она также позволяет очень лаконично указывать деревья и очень настраиваема с точки зрения внешнего вида дерева. Например:
\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
grow'=0,
math content,
tier/.wrap pgfmath arg={tier #1}{level()},
l sep+=5mm,
},
before typesetting nodes={
for tree={
if n=1{
edge label/.wrap value={node [midway, font=\scriptsize, above] {$#1$}}
}{
edge label/.wrap value={node [midway, font=\scriptsize, anchor=north] {$#1$}}
}
}
}
% now to specify the tree itself - as you see, the syntax is quite concise
[r
[C^h, edge label=P^h
[C^h, edge label=P^h]
[C^l, edge label=P^l]
]
[C^l, edge label=P^l
[C^h, edge label=P^h]
[C^l, edge label=P^l]
]
]
\end{forest}
\end{document}
РЕДАКТИРОВАТЬ
В комментарии спрашивалось, как обойтись без корневого узла. Любое дерево должно иметь корень, однако он может быть невидимым и не занимать места. Forest предоставляет возможность phantom
для такого рода случаев:
\begin{forest}
for tree={
grow'=0,
math content,
tier/.wrap pgfmath arg={tier #1}{level()},
l sep+=5mm,
},
before typesetting nodes={
for tree={
if n=1{
edge label/.wrap value={node [midway, font=\scriptsize, above] {$#1$}}
}{
edge label/.wrap value={node [midway, font=\scriptsize, anchor=north] {$#1$}}
}
}
}
[, phantom
[C^h, edge label=P^h
[C^h, edge label=P^h]
[C^l, edge label=P^l]
]
[C^l, edge label=P^l
[C^h, edge label=P^h]
[C^l, edge label=P^l]
]
]
\end{forest}