我知道这有点乏味,但是有人可以为我写出下面树的乳胶代码吗?
以下是我的开始
\documentclass{article}
\usepackage{amsmath}
\usepackage{forest}
\tikzset{
dot/.style={circle,draw,inner sep=1.2,fill=black},
}
\begin{document}
\begin{forest}
[ ,name=a,for tree={s sep=60pt,l sep=2cm,dot,grow=0},
[ ,name=b,edge
[ ,name=c, ]
[,name=d,]
]
[ ,name=e, edge
[ ,name=f,]
[,name=g, ]
[ ,name=h,]
]
]
\end{forest}
\end{document}
我尝试过多次在此基础上构建我想要的树,但我无法得到正确的树枝。谢谢!
答案1
确实,forest
树枝有点难以正确处理,我建议您下次先尝试构建下部,然后复制并粘贴以制作上部(应用更改以适合您所需的输出)。
由于您使用节点来表示点,因此您无法像平常一样输入文本。如果您这样做,结果如下:
因此,为了解决这个问题,您可以使用标签命令,其工作方式如下(\cdots 是点的命令):
[ ,name=g, label={right:$\cdots$}]
因此标签放在右边,因为这片森林生长在东边。
输出
代码
\documentclass[margin=10pt]{standalone}
\usepackage{amsmath}
\usepackage{forest}
\tikzset{
dot/.style={circle,draw,inner sep=1.2,fill=black},
}
\begin{document}
\begin{forest}
for tree={s sep=60pt,l sep=2cm,dot,grow=0}
%
[ ,name=root
[ ,name=below
[ ,name=a
[ ,name=c, label={right:$\cdots$}]
[ ,name=d, label={right:$\cdots$}]
[ ,name=e, label={right:$\cdots$}]
]
[ ,name=f
[ ,name=g, label={right:$\cdots$}]
[ ,name=h, label={right:$\cdots$}]
] ]
[ ,name=above
[ ,name=i
[ ,name=k, label={right:$\cdots$}]
[ ,name=l, label={right:$\cdots$}]
]
[ ,name=m
[ ,name=n, label={right:$\cdots$}]
[ ,name=o, label={right:$\cdots$}]
[ ,name=p, label={right:$\cdots$}]
] ]
]
\end{forest}
\end{document}
答案2
如果您更喜欢少输入一些内容 ;),您可以forest
自动标记最终节点并自动命名所有节点。为了更容易确定哪个名称与哪个节点匹配,您可以使用 TikZforeach
循环临时标记它们。
\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\tikzset{
dot/.style={circle,draw,inner sep=1.2,fill=black},
}
\begin{document}
\newcounter{mynode}
\setcounter{mynode}{0}
\renewcommand*\themynode{\alph{mynode}}
\begin{forest}
for tree={
if n children=0{label=right:$\dots$}{},
grow=0,
dot,
fit=band,
TeX={\stepcounter{mynode}},
name/.expanded={\themynode},
s sep+=5pt
}
[
[
[
[ ]
[ ]
[ ]
]
[
[ ]
[ ]
]
]
[
[
[ ]
[ ]
]
[
[ ]
[ ]
[ ]
]
]
]
\foreach \i in {a,...,q} {\node [text=red, text opacity=.25, font=\tiny, yshift=-5pt] at (\i) {\i};};
\end{forest}
\end{document}
一旦您完成了所有事情,您可以删除或注释掉标签行。