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