
다음과 같은 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}