使用 qtree 生成“无限”树

使用 qtree 生成“无限”树

我正在尝试生成一棵在每个级别都有无限分支的树,这意味着每个“阶段”都有三个没有文本的分支,每个分支的末尾有三个点。唉,当我尝试运行以下代码时:

`\Tree 
    [.\quad 
        [.{ \quad}(\dots)
    {\dots} ]
    {\ldots} ]`

我得到以下输出:

在此处输入图片描述


我想在每个阶段创建至少 3 个分支。如何创建我想要的树?

答案1

请始终包含一个最小工作示例,正如 David Carlisle 提到的那样。

既然是樹,何不建一棵forest

虚线树

由于支持“动态树”,因此可以使用极其紧凑的代码来排版此树forest。此示例基于手册第 40-41 页上的信息和示例。

\documentclass[tikz]{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
  [\dots,
    repeat=3{
      append={
        [\dots, repeat=3{
          append={[\dots]}
        }]
      },
    },
    before typesetting nodes={
      for children={
        for children={
          repeat=3{
            append={
              [\dots, repeat=3{
                append={[\dots]}
              }]
            },
          },
        }
      }
    }
  ]
\end{forest}
\end{document}

除了使用before typesetting nodes,您还可以直接添加更多append命令:

\begin{forest}
  [\dots,
    repeat=3{
      append={
        [\dots,
          repeat=3{
            append={
              [\dots,
                repeat=3{
                  append={
                    [\dots,
                      repeat=3{
                        append={
                          [\dots]
                        }
                      }
                    ]
                  }
                },
              ]
            }
          }
        ]
      },
    },
  ]
\end{forest}

但是我发现这样解析代码会更加困难。

答案2

在 tikzpicture 中绘制一些更灵活的东西可能会更容易,例如,使进一步的节点变得更小,以给人无限分支的更好印象。

这是一个例子。

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning}

\usepackage{mathtools}
\DeclarePairedDelimiter{\seq}{\langle}{\rangle}


\begin{document}
\begin{tikzpicture}
\node (empty) {$\seq{}$};

%above empty - layer 1
\node (0) [above left = 1cm and 2cm of empty] {$\seq{0}$};
\node (1) [right=3cm of 0,scale=.9] {$\seq{1}$};
\node (2) [right=2 cm of 1,scale=.8] {$\seq{2}$};
\node (3) [right=1cm of 2,scale=.7] {$\seq{3}$};
\node (4) [right=.8 cm of 3,scale=.6] {$\seq{4}$};
\node (ldots) [right=.5cm of 4] {$\ldots$};

\draw (empty)--(0);
\draw (empty)--(1);
\draw (empty)--(2);
\draw (empty)--(3);
\draw (empty)--(4);
\node (ldotsline) [below=.5cm of 3] {$\ldots$};



%above 0 - layer 2
\node (00) [above left = 1cm and 2cm of 0,scale=.9] {$\seq{0,0}$};
\node (01) [right=.8cm of 00,scale=.8] {$\seq{0,1}$};
\node (02) [right=.6 cm of 01,scale=.6] {$\seq{0,2}$};
\node (03) [right=.4cm of 02,scale=.4] {$\seq{0,3}$};
\node (0ldots) [right=0cm of 03] {$\ldots$};

\draw (0)--(00);
\draw (0)--(01);
\draw (0)--(02);
\draw (0)--(03);
\node (0ldotsline) [below=.5cm of 03] {$\ldots$};


%above 1 - layer 2
\node (10) [right = .5cm of 0ldots,scale=.8] {$\seq{1,0}$};
\node (11) [right=.8cm of 10,scale=.6] {$\seq{1,1}$};
\node (12) [right=.6 cm of 11,scale=.4] {$\seq{1,2}$};
\node (1ldots) [right=.2cm of 12] {$\ldots$};

\draw (1)--(10);
\draw (1)--(11);
\draw (1)--(12);


%above 00 - layer 3
\node (000) [above left = .3cm and .5cm of 00,scale=.6] {$\seq{0,0,0}$};
\node (001) [right=.8cm of 000,scale=.6] {$\seq{0,0,1}$};
\node (00ldots) [right=.2cm of 001,scale=.8] {$\ldots$};

\draw (00)--(000);
\draw (00)--(001);


% continuing dots
\node (vdots11) [above=.5cm of 11] {$\vdots$};
\node (vdots02) [above=.5cm of 02] {$\vdots$};
\node (vdots4) [above=1cm of 4] {$\vdots$};
\node (vdots000) [above=.3cm of 000] {$\vdots$};
\node (vdots001) [above=.3cm of 001] {$\vdots$};
\node (ldots2) [above right=.3cm and .3cm of 2] {$\ldots$};
\end{tikzpicture}
\end{document}

其结果为:在此处输入图片描述

可能有更快捷的方法来做到这一点,例如使用 \foreach。

相关内容