子节点中的双重 foreach 循环(TikZ 树)

子节点中的双重 foreach 循环(TikZ 树)

我正在尝试使用 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}}

在此处输入图片描述

相关内容