TikZ 中的大树 - 避免“分组级别”限制

TikZ 中的大树 - 避免“分组级别”限制

我对以下代码有疑问:

\begin{tikzpicture} [level distance=4mm]
    \path [
        every node/.style={ball color=red,inner sep=1.5pt},
        level 2/.style={sibling distance=22mm},
        level 5/.style={sibling distance=3mm}
        ]
        node{} child foreach \perI in {1,...,6} {
            node{} child { node{} child { node{} child {
            node{} child foreach \perII in {1,...,5} {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
                    node{}
                }}}}}}}}}}}}}}}}}}}}
            }}}}
        }
    ;
\end{tikzpicture}

当我使用 pdflatex(使用 MiKTeX)编译它时,出现以下错误消息:

! TeX capacity exceeded, sorry [grouping levels=255].

我猜我遇到了递归级别的限制。有什么办法可以解决这个问题吗?
请注意,我实际上需要一棵更长的树(总共 48 个级别)——不要问为什么,说来话长。

我唯一的想法是提前在第二个命令下生成长路径foreach,然后在每个节点中重复使用它,即 30 次 - 但我不知道如何做到这一点。
(我试过了\path[save to=\tmpPath],但它似乎用绝对坐标保存了它,所以我没能得到我需要的 30 份副本。)

答案1

您可以使用 achain代替children 来表示底部的长路径。如果使用node distance=\tikzleveldistance, on grid, join,节点的放置将与树级相同,并且您将获得节点之间的连接线。

这将使用以下方式进行编译pdflatex

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots, pgfplotstable}
\usetikzlibrary{chains}

\pgfplotstableread{volcano.dat}\datatable



\begin{document}
\begin{tikzpicture} [level distance=4mm]
    \path [
        every node/.style={ball color=red,inner sep=1.5pt},
        level 2/.style={sibling distance=22mm},
        level 5/.style={sibling distance=3mm}
        ]
        node{} child foreach \perI in {1,...,6} {
            node{} child { node{} child { node{} child {
            node{} child foreach \perII in {1,...,5} {
                node [start chain=going below]{}
                \foreach \perIII in {1,...,25}{
                    node [node distance=\tikzleveldistance,
                        on grid,
                        on chain,
                        join
                    ] {}
                    }
                }   
            }
            }}
        }
    ;
\end{tikzpicture}


\end{document}

答案2

检查一下

\begin{tikzpicture} [level distance=4mm]
    \path [
        every node/.style={ball color=red,inner sep=1.5pt},
        level 2/.style={sibling distance=22mm},
        level 5/.style={sibling distance=3mm}
        ]
        node{} child foreach \perI in {1,...,6} {
            node{} child { node{} child { node{} child {
            node{} child foreach \perII in {1,...,5} {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
                node{} child { node{} child { node{} child { node{} child {
%                    node{}
                }}}}}}}}}}}}}}}}}}}}
            }}}}
        }
    ;
\end{tikzpicture}

相关内容