我正在尝试使用 TikZ 排版概率树,它有许多分支,所以我宁愿避免完全输入。我不知道如何制作一种双循环。这是我目前拥有的一个例子:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{tikz}
\begin{document}
\tikzset{
level 1/.style={sibling distance=60mm},level 2/.style={sibling distance=10mm}
}
\begin{tikzpicture}
\node(0){root}[grow'=right]
child{ node{B} foreach \n/\l in {4/B, 3/R, 1/J} { child foreach \i in {1,...,\n} { node{\l} } } }
child{ node{R} \foreach \n/\l in {4/B, 3/R, 1/J} { child foreach \i in {1,...,\n} { node{\l} } } ; }
% child{ node{G} \foreach \n/\l in {4/B, 3/R, 1/J} { \foreach \i in {1,...,\n} { child node{\l} } ; } ; }
child{ node{J} child foreach \i in {1,...,4} { node{B} }
child foreach \i in {1,...,3} { node{R} }
child {node{J}}
} ;
\end{tikzpicture}
\end{document}
我想要在第二级的每个节点获得的合适结果是最后一个节点的结果,它有 8 个分支,来自第一级(树的底部)的节点“J”。前面的代码没有给出我期望的结果,或者没有编译(注释掉的行)。
如果有人有想法,提前谢谢了!
答案1
forest
我认为在树设计中使用包比使用循环更好tikz
。由于不清楚(至少对我来说),你的树应该是什么样子,我从你的代码中部分重建了它:
\documentclass[12pt, margin=3mm]{standalone}
\usepackage[french]{babel}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree = {
grow' = 0,
s sep = 1mm,
l sep = 9mm,
}
[root
[B
[B][B][B][B
[R][R][R]
]
]
[R,fit=band, before computing xy={s/.average={s}{siblings}}
[B][B][B][B
[R][R][R]
]
]
[J
[B][B][B][B][R][R][R][J]
]
]
\end{forest}
\end{document}
或者如果你在上面的 MWE 中删除选项before computing xy={s/.average={s}{siblings}}
: