我有以下树,我希望中央分支和右侧分支之间的间隔更大,以避免混淆。我一直在尝试一些方法,因为我认为这并不难,但我没有得到我需要的东西。请参见下面的屏幕截图:
这是一个应该重现错误的 MWE:
\documentclass[a4paper]{report}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{forest}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{forest}
for tree={l sep=2em, s sep=0em, anchor=center},
for children={l sep=3em, s sep=1em, anchor=center, calign=fixed edge angles},
[\scriptsize{State}, circle, draw,
[{$-\vert\hat{\pi}_s-\pi_m\vert+\beta$ \\ $-\vert\hat{\pi}_t-\pi_m\vert$}, align=center, edge label={node[midway,fill=white,]{$s_{m}$}}]
[\scriptsize{Troika}, circle, draw, edge label={node[midway,fill=white,]{$s_{t}$}}, before computing xy={s=(s("!p")+s("!n"))/2},
[, name=0, coordinate,]
[\scriptsize{State}, name=P2, coordinate, l*=2, before computing xy={s=(s("!p")+s("!n"))/2}, circle, draw, edge label={node[midway,fill=white,]{$\lambda$}},
[{$\delta(-\vert\hat{\pi}_s-\pi_m\vert+\beta)$ \\ $\delta(-\vert\hat{\pi}_t-\pi_m\vert)$}, align=center, edge label={node[midway,fill=white,]{$s_m$}}]
[{$\delta(-\vert\hat{\pi}_s-\pi_t\vert+\alpha)$ \\ $\delta(-\vert\hat{\pi}_t-\pi_t\vert-\alpha)$}, align=center, edge label={node[midway,fill=white,]{$s_t$}}, before computing xy={s=(s("!p")+s("!n"))/2}]
[{$\delta(-\vert\hat{\pi}_s-\pi_d\vert)$ \\ $\delta(-\vert\hat{\pi}_t-\pi_d\vert)$}, align=center, text width=110pt, edge label={node[midway,fill=white,]{$s_d$}}]]
[, name=1, coordinate,]]
[{$(-\vert\hat{\pi}_s-\pi_d\vert)$ \\ $-\vert\hat{\pi}_t-\pi_d\vert$}, align=center, edge label={node[midway,fill=white,]{$s_{d}$}}]]]
\draw[densely dotted, bend right](0)to(P2);
\draw[densely dotted, bend right](P2)to(1);
\end{forest}
\end{document}
谢谢你们!
答案1
是这个想法吗?
这基本上就是我最终做的事情:
尽可能从树规范本身中删除影响间距的东西;
调整前言以尽可能接近期望结果;
如果需要,请将手动调整添加回树规范中。
这背后的想法是,默认情况下,Forest 的效果通常比原始代码的效果好得多,因此手动调整可能会搞砸事情。使用 Forest,通常更容易剥离到默认值,直到您获得所需的结果,或者,如果做不到,您至少了解为什么会得到这样的结果。在第二种情况下,您可以看到需要进行哪些调整。
\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
anchor=center,
if n=2{calign with current edge}{},
align=center
},
where level=1{%
s sep=1em
}{%
l sep=2em,
s sep=0em,
},
[{State}, circle, draw, font=\scriptsize
[{$-\vert\hat{\pi}_s-\pi_m\vert+\beta$ \\ $-\vert\hat{\pi}_t-\pi_m\vert$}, edge label={node[midway,fill=white,]{$s_{m}$}}
]
[{Troika}, circle, font=\scriptsize, draw, edge label={node[midway,fill=white,]{$s_{t}$}},
[, name=0,coordinate]
[{State}, font=\scriptsize, name=P2, before computing xy={l*=1.5}, circle, draw, edge label={node[midway,fill=white,]{$\lambda$}},
[{$\delta(-\vert\hat{\pi}_s-\pi_m\vert+\beta)$ \\ $\delta(-\vert\hat{\pi}_t-\pi_m\vert)$}, edge label={node[midway,fill=white,]{$s_m$}}]
[{$\delta(-\vert\hat{\pi}_s-\pi_t\vert+\alpha)$ \\ $\delta(-\vert\hat{\pi}_t-\pi_t\vert-\alpha)$}, edge label={node[midway,fill=white,]{$s_t$}},
]
[{$\delta(-\vert\hat{\pi}_s-\pi_d\vert)$ \\ $\delta(-\vert\hat{\pi}_t-\pi_d\vert)$}, edge label={node[midway,fill=white,]{$s_d$}}]
]
[, name=1, coordinate,]
]
[{$(-\vert\hat{\pi}_s-\pi_d\vert)$ \\ $-\vert\hat{\pi}_t-\pi_d\vert$}, edge label={node[midway,fill=white,]{$s_{d}$}}]
]
\draw[densely dotted, bend right](0)to(P2);
\draw[densely dotted, bend right](P2)to(1);
\end{forest}
\end{document}
但是,软件包作者可能会希望用(更)明确的解决方案来跟进您答案的评论。