当不同节点的文本量差异很大时,如何在 qtree 中设置最佳级别距离?

当不同节点的文本量差异很大时,如何在 qtree 中设置最佳级别距离?

我真的是 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 downtikz-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

得出的结果为:

经过修改的版本

相关内容