自定义树中节点之间的空间(使用森林)

自定义树中节点之间的空间(使用森林)

我有以下树,我希望中央分支和右侧分支之间的间隔更大,以避免混淆。我一直在尝试一些方法,因为我认为这并不难,但我没有得到我需要的东西。请参见下面的屏幕截图:

在此处输入图片描述

这是一个应该重现错误的 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}

但是,软件包作者可能会希望用(更)明确的解决方案来跟进您答案的评论。

相关内容