![绘制一棵叶子底部对齐的树](https://linux22.com/image/270204/%E7%BB%98%E5%88%B6%E4%B8%80%E6%A3%B5%E5%8F%B6%E5%AD%90%E5%BA%95%E9%83%A8%E5%AF%B9%E9%BD%90%E7%9A%84%E6%A0%91.png)
我想将树的所有叶子都对齐到底部,所以我想要实现的效果应该是这样的:
p
/ \
/ /\
c d e
到目前为止我尝试过的(使用 tikz-qtree)结果是:
p
/ \
c /\
d e
我目前正在使用 tikz-qtree,但如果有更适合该任务的替代方案,请随时提出建议;)旁注:我实际上不是标记节点,而是标记边。
代码:
\documentclass[12pt]{article}
\usepackage[active,pdftex,tightpage]{preview}
\usepackage{tikz-qtree}
\PreviewEnvironment[]{tikzpicture}
\begin{document}
\begin{tikzpicture}[every tree node/.style={draw,circle},sibling distance=10pt,
edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}]
\tikzstyle{every node}=[font=\tiny, sloped,anchor=south,auto=false,inner sep=1pt]
\Tree
[.{}
\edge node[]{C};
[.{}
]
\edge node[]{A};
[.{}
\edge node[]{D};
[.{}
]
\edge node[]{E};
[.{}
]
]
]
\end{tikzpicture}
\end{document}
答案1
这是一个森林解决方案允许非常简洁地指定树。一旦配置了树的序言(例如,也可以将其保存为样式),我们就可以编写
[
[c]
[a
[d]
[e]
]
]
生产
树中最终节点的对齐是通过
if n children=0{tier=terminal}{},
完整代码:
\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
draw,
circle,
delay={
if level=0{}{
edge label/.wrap pgfmath arg={node [font=\tiny, sloped, midway, anchor=south, auto=false, inner sep=1pt] {#1} }{content()}
},
},
if n children=0{tier=terminal}{},
s sep=10pt,
},
before typesetting nodes={
for tree={
content=,
}
}
[
[c]
[a
[d]
[e]
]
]
\end{forest}
\end{document}
答案2
此代码生成您所需要的内容:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{figure}
\begin{center}
\tikzstyle{level 1}=[level distance=1.5cm, sibling distance=2.5cm]
\tikzstyle{level 2}=[level distance=1.5cm, sibling distance=2.5cm]
\tikzstyle{level 3}=[level distance=1.5cm, sibling distance=1cm]
\tikzstyle{level 4}=[level distance=1.5cm, sibling distance=2cm]
\begin{tikzpicture}
\node {p}
child{
child{
node(a){c}
} child{edge from parent[draw=none] }
}
child{
node{}
child{
node(b){d}
}
child{
node(c){e}
}
};
\end{tikzpicture}
\end{center}
\end{figure}
\end{document}
致谢这一页。