我真的是 tikz 的新手(大约 12 小时经验)但我认为我需要对此进行一些提示。
我正在使用tikz-qtree
。一些节点可以包含比其他节点更多的文本。我将设置text width
为一个值,以便节点不会向侧面扩展太多。
然后通过反复试验,我找到了一个值,level distance
使得边不与节点的内容重叠。
问题是这会level distance
平等地影响所有级别。因此这会导致某些级别之间有太多空白空间。
最好通过一个例子来解释。这是我设置时所得到的屏幕截图 level distance=5cm
从上图中可以看出,顶层和下一层之间以及第三层和第四层之间现在有很多空白空间。而第一层和下一层之间的距离是可以的。
level distance
如果我将的值减小到3cm
,则会出现这个问题:
正确的做法是什么,以便各个级别之间浪费的空间最少?
我四处寻找,找不到level distance
使用包设置每个级别的方法qtree
。我发现的最好的方法是这个如何仅更改 tikz-qtree 中一个级别的级别距离? 读了几遍之后,还是不明白,也不知道该怎么办。
也许有人可以修改下面的代码来告诉我如何做?
这是我用来生成上述代码的代码。我不想从中删除一些东西来缩小它,因为它已经显示出问题了。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{trees}
\begin{document}
\tikzset{font=\small,edge from parent fork down,level distance=3cm,
every node/.style={draw,rectangle,rounded corners,
align=center,text width = 100pt }}
\begin{tikzpicture}
\Tree [.{second order linear partial differential equation}
[.{elliptic\\No characteristic curves
\\diffusion process reached equilibrium, steady state temperature distribution.
Numerically, solved by relaxation methods
\\{$A\frac{\partial^{2}u}{\partial x^{2}}+B\frac{\partial^{2}u}{\partial x\partial y}+C\frac{\partial^{2}u}{\partial y^{2}}+D\frac{\partial u}{\partial x}+E\frac{\partial u}{\partial y}+Fu=G$}
\\{$B^2-4AC<0$}
\\{$A=1,C=1,B=0$}}
[.{{$F=0$}\\a function that satisfies Laplace is called harmonic}
[.{{$G=0$}\\Laplace in 2D\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}}=0 $} } ]
[.{{$G=g(x,y)$}\\Poisson in 2D\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}}=g(x,y) $}} ]
]
[.{$F=k^2$}
[.{{$G=0$}\\homogeneous Helmholtz\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}} + k^2 u=0 $}\\eigenvalue equilibrium} ]
[.{{$G=g(x,y)$}\\inhomogeneous Helmholtz\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}} + k^2 u=g(x,y) $}\\steady state oscillation} ]
]
]
[.parabolic ]
[.hyperbolic ]
]
\end{tikzpicture}
\end{document}
答案1
fork down
常规 TikZ 树库中的路径有时会以奇怪的方式交互。我用手册中建议的方法tikz-qtree
替换了路径,然后为树中的每个级别设置单独的级别距离。这给了你一个相当合理的树。fork down
tikz-qtree
\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-qtree}
%\usetikzlibrary{trees} % not required for this solution
\begin{document}
\tikzset{font=\small,
edge from parent path={(\tikzparentnode.south) -- +(0,-8pt) -| (\tikzchildnode)},
level 1/.style={level distance=2cm},
level 2/.style={level distance=6cm},
level 3/.style={level distance=2cm},
every node/.style={draw,rectangle,rounded corners, align=center,text width = 100pt}
}
\begin{tikzpicture}
\Tree [.{second order linear partial differential equation}
[.{elliptic\\No characteristic curves
\\diffusion process reached equilibrium, steady state temperature distribution.
Numerically, solved by relaxation methods
\\{$A\frac{\partial^{2}u}{\partial x^{2}}+B\frac{\partial^{2}u}{\partial x\partial y}+C\frac{\partial^{2}u}{\partial y^{2}}+D\frac{\partial u}{\partial x}+E\frac{\partial u}{\partial y}+Fu=G$}
\\{$B^2-4AC<0$}
\\{$A=1,C=1,B=0$}}
[.{{$F=0$}\\a function that satisfies Laplace is called harmonic}
[.{{$G=0$}\\Laplace in 2D\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}}=0 $} } ]
[.{{$G=g(x,y)$}\\Poisson in 2D\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}}=g(x,y) $}} ]
]
[.{$F=k^2$}
[.{{$G=0$}\\homogeneous Helmholtz\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}} + k^2 u=0 $}\\eigenvalue equilibrium} ]
[.{{$G=g(x,y)$}\\inhomogeneous Helmholtz\\{$ \frac{\partial^{2}u}{\partial x^{2}}+ \frac{\partial^{2}u}{\partial y^{2}} + k^2 u=g(x,y) $}\\steady state oscillation} ]
]
]
[.parabolic ]
[.hyperbolic ]
]
\end{tikzpicture}
\end{document}
或者,您可以创建样式并将其应用到包含大量文本的节点,使其更宽wide node
。这样您就可以将级别距离保持在较小范围内。
对于下一张图片,我添加了
wide node/.style={text width=200pt}
到tikzset
命令,并改变了 2 级距离:
level 2/.style={level distance=4cm}
然后对于大节点我添加了一个明确的\node
命令:
[.\node[wide node]{elliptic\\No characteristic curves ... };
请不要忘记,;
由于这是一个常规命令,因此需要在节点文本后进行明确说明tikz
。
得出的结果为: