我正在学习 tikz 树,以便我可以制作流程图。
在下面这个例子中,我有linear
和seperable
子节点,它们应该是节点的子节点degree 1
,但它们与节点的子节点混合显示higher degree than one
。我知道我做的不对。如何修复它?这是第一个屏幕截图
这是 MWE
\documentclass[12pt]{book}
\usepackage[export]{adjustbox}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{trees}
\begin{document}
\tikzset{level 1/.style={sibling distance=4cm},
level 2/.style={sibling distance=5cm},
level 3/.style={sibling distance=5cm}}
\begin{tikzpicture}[node distance = 10cm, auto]
% Place nodes
\node {ode} [edge from parent fork down]
child {node {first order}
child {node {\adjustbox{max width=2cm}{degree 1}}
child {node {linear}}
child {node {seperable}}
}
%
child {node {\adjustbox{max width=3cm}{higher degree than one}}
child {node {\adjustbox{max width=2cm}{Find roots of $p$}}}
child {node {solve for $y$}}
child {node {solve for $x$}}
}
}
child {node {second order}}
child {node {higher order}};
\end{tikzpicture}
\end{document}
答案1
实际上,您的代码中没有什么问题,您只需要调整样式,尤其是关于sibling distance
s 的样式。根据您现有的设置,sibling distance
forlevel 3
太大,因此右侧分支的节点与左侧分支重叠,从而产生这个奇怪的输出。
sibling distance
您应该减少for的长度level 3
,也许还可以增加sibling distance
for 的长度level 2
。此外,在这种情况下,该选项node distance
在树中毫无用处。
最后,我可能不会\adjustbox
在节点内使用,而是减小字体大小或插入换行符。为了能够执行后者,您可以设置align=center
节点。您可能还想设置text depth=0pt
以正确对齐节点的基线。
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\tikzset{
level distance=2cm,
level 1/.style={sibling distance=3cm},
level 2/.style={sibling distance=6cm},
level 3/.style={sibling distance=2.5cm},
every node/.style={align=center, text depth=0pt}
}
\begin{tikzpicture}
% Place nodes
\node {node} [edge from parent fork down]
child {node {first order}
child {node {degree 1}
child {node {linear}}
child {node {seperable}}
}
%
child {node {higher degree \\ than one}
child {node {Find roots \\ of $p$}}
child {node {solve for $y$}}
child {node {solve for $x$}}
}
}
child {node {second order}}
child {node {higher order}};
\end{tikzpicture}
\end{document}