我遇到了以下问题:我想拟合一个(垂直)二项式树,但第三级的兄弟节点重叠(无论我如何调整距离,它们要么相互重叠,要么与它们的堂兄弟交叉)。您建议什么解决方案?我试过 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
字体意味着它们占用的空间比默认值要多。(标准类默认为10pt
。standalone
,通常用于创建图形,默认为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
那么使用专门用于绘制此类树的包怎么样?如果您愿意,有两个主要这样的包:forest
和tikz-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}