Latex 二项式树(空间和重叠)

Latex 二项式树(空间和重叠)

我遇到了以下问题:我想拟合一个(垂直)二项式树,但第三级的兄弟节点重叠(无论我如何调整距离,它们要么相互重叠,要么与它们的堂兄弟交叉)。您建议什么解决方案?我试过 footnotesize 字体,但还不够,我想保持正常大小。我想也许父母 $b_1 b_2$ 和 $b_2E[b_2]$ 的孩子可以放在下一级,但我不知道该怎么做 :( 非常感谢您的帮助!

\documentclass[12pt,a4paper,reqno,oneside]{amsart}
\usepackage{fancybox}
\usepackage{tikz}


\begin{document}
\begin{tikzpicture}[
baseline,
 level distance=20mm,
text depth=.1em,
text height=.8em,
level 1/.style={sibling distance=20em},
level 2/.style={sibling distance=10em},
level 3/.style={sibling distance=20mm}]


\node   (z){$b$}
child {node (a) {$b_1$}
child {node  (b) {$b_1 \, b_1$}
child {node {$b_1 \, b_1 \, b_1$}
} 
child {node {$b_1 \, b_1 \, b_2$}}
}
child {node (g) {$b_1 \, b_2$}
  child {node {$b_1b_2E[b_1]$}}
  child {node {$b_1b_2E[b_2]$}}
}
}
 child {node  (j) {$b_2$}
child {node  (k) {$b_2 \, E[b_1]$}
  child {node {$b_2 E[b_1b_1]$}}
  child {node {$b_2 E[b_1b_2]$}}
}
child {node  (l) {$b_2 \, E[b_2]$}
child {node {$b_2E[b_2]E[b_1]$}}
child {node (c){$b_2E[b_2]E[b_2]$}    
 }
 }
};
\path (a) -- (j) ;
\path (b) -- (g) ;
\path (k) -- (l) ;
\path (k) -- (g) ;
\end{tikzpicture}  

\end{document}  

答案1

将树设置为使用12pt字体意味着它们占用的空间比默认值要多。(标准类默认为10ptstandalone,通常用于创建图形,默认为11pt。)

这是forest未经过任何调整的版本:

\documentclass[12pt,tikz]{standalone}
\usepackage{forest}
\begin{document}
  \begin{forest}
    [{$b$}, name=z
      [{$b_1$}, name=a
        [{$b_1 \, b_1$}, name=b
          [{$b_1 \, b_1 \, b_1$}
          ]
          [{$b_1 \, b_1 \, b_2$}
          ]
        ]
        [{$b_1 \, b_2$}, name=g
          [{$b_1b_2E[b_1]$}
          ]
          [{$b_1b_2E[b_2]$}
          ]
        ]
      ]
      [{$b_2$}, name=j
        [{$b_2 \, E[b_1]$}, name=k
          [{$b_2 E[b_1b_1]$}
          ]
          [{$b_2 E[b_1b_2]$}
          ]
        ]
        [{$b_2 \, E[b_2]$}, name=l
          [{$b_2E[b_2]E[b_1]$}
          ]
          [{$b_2E[b_2]E[b_2]$}, name=c
          ]
        ]
      ]
    ]
    \path (a) -- (j) ;
    \path (b) -- (g) ;
    \path (k) -- (l) ;
    \path (k) -- (g) ;
  \end{forest}
\end{document}

森林版

尺寸为 172x42mm,可放入 A4 纸张内,但除非您旋转树,否则一点也不舒服。

因此,让我们尝试一个包含您建议的更改的版本:

\documentclass[12pt,tikz]{standalone}
\usepackage{forest}
\begin{document}
  \begin{forest}
    [{$b$}, name=z
      [{$b_1$}, name=a
        [{$b_1 \, b_1$}, name=b
          [{$b_1 \, b_1 \, b_1$}
          ]
          [{$b_1 \, b_1 \, b_2$}
          ]
        ]
        [{$b_1 \, b_2$}, name=g, for children={l+=2\baselineskip}
          [{$b_1b_2E[b_1]$}
          ]
          [{$b_1b_2E[b_2]$}
          ]
        ]
      ]
      [{$b_2$}, name=j
        [{$b_2 \, E[b_1]$}, name=k
          [{$b_2 E[b_1b_1]$}
          ]
          [{$b_2 E[b_1b_2]$}
          ]
        ]
        [{$b_2 \, E[b_2]$}, name=l, for children={l+=2\baselineskip}
          [{$b_2E[b_2]E[b_1]$}
          ]
          [{$b_2E[b_2]E[b_2]$}, name=c
          ]
        ]
      ]
    ]
    \path (a) -- (j) ;
    \path (b) -- (g) ;
    \path (k) -- (l) ;
    \path (k) -- (g) ;
  \end{forest}
\end{document}

调整树

调整后的树尺寸为 131x52mm,完全在 A4 尺寸范围内。

答案2

那么使用专门用于绘制此类树的包怎么样?如果您愿意,有两个主要这样的包:foresttikz-qtree,它们都是基于 TikZ 构建的。

这是使用该包的树forest。该tikz-qtree包使用类似的语法,但正如@cfr 在评论中提到的那样,forest它更擅长使树更紧凑并处理间距。

\documentclass{article}

\usepackage{forest}
\forestset{
% This style is defined on page 8 of the current forest manual
sn edges/.style={for tree={parent anchor=south, child anchor=north}}
}

\begin{document}  

\begin{forest} baseline, sn edges
[$b$
    [$b_{1}$
        [{$b_1 \, b_1$}
            [{$b_1 \, b_1 \, b_1$}]
            [{$b_1 \, b_1 \, b_2$}]
        ]
        [{$b_1 \, b_2$}
            [{$b_1b_2E[b_1]$}]
            [{$b_1b_2E[b_2]$}]
        ]
    ]
    [$b_{2}$
        [{$b_2 \, E[b_1]$}
            [{$b_2 E[b_1b_1]$}]
            [{$b_2 E[b_1b_2]$}]
        ]
        [{$b_1b_2E[b_2]$}
            [{$b_2E[b_2]E[b_1]$}]
            [{$b_2E[b_2]E[b_2]$}]
        ]
    ]
]
\end{forest}

\end{document}

在此处输入图片描述

相关内容