如何将 tikZ \tree 的最后一级对齐到相同的高度?

如何将 tikZ \tree 的最后一级对齐到相同的高度?

如何让树的最后一个层级对齐到相同的高度?在此之前的每个层级都已对齐,但最后一个层级不同。

你能用这个代码吗?我 5 周前开始使用 TeX,这是我第一次在论坛上寻求帮助。

\documentclass[a5paper,pdftex,twoside,9pt,paper=21cm:14.85cm,openright]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage{tikz}                               
\usetikzlibrary{arrows,positioning,automata,shadows,fit,shapes}
\usepackage{tikz-qtree}

\begin{document}

\begin{center}
\resizebox{1\textwidth}{!}{%
\begin{tikzpicture}[every tree node/.style={align=center,anchor=north}]
\Tree [.\textbf{Gießverfahren} 
                        [.{Schwerkraftgießen} 
                                        [.{Verlorene\\Formen} 
                                                [.{verlorene\\Modelle} \textit{Feingießen}\\\textit{Vollformgießem} ]
                                                [.{Dauermodelle} \textit{Sandgießen}\\\textit{Maskenformgießen} ]] 
                                        [.Dauerformen \textit{Kokillengießen}\\\textit{Stranggießen}\\\textit{Schleudergießen} ] ] 
                        [.{\textbf{Gießen unter Druck}} 
                                        [.{Verlorene\\Formen} \textit{Niederdruck-Sandgießen} ] 
                                        [.\textbf{Dauerformen} \textbf{Druckgießen}\\\textit{Niederdruckgießen}\\\textit{Gegendruckgießen}\\\textit{Sonderverfahren} ] ] ]
\end{tikzpicture}}
\end{center}

\end{document}

答案1

frontier是应用于每个叶节点的样式。假设“最后一个层次”指的是这些节点,即没有子节点的终端节点,您可以设置此样式来自定义它们的外观和位置。

要对齐这些节点,您需要指定与根的绝对距离。(因此这需要比森林但允许您使用当前代码进行少量更改。)

例如:

\documentclass[tikz,border=10pt]{standalone}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
  [
    every tree node/.style={align=center,anchor=north},
    frontier/.style={distance from root=130pt}
  ]
  \Tree
  [.\textbf{Gießverfahren}
    [.{Schwerkraftgießen}
      [.{Verlorene\\Formen}
        [.{verlorene\\Modelle} \textit{Feingießen}\\\textit{Vollformgießem} ]
        [.{Dauermodelle} \textit{Sandgießen}\\\textit{Maskenformgießen} ]
      ]
      [.Dauerformen \textit{Kokillengießen}\\\textit{Stranggießen}\\\textit{Schleudergießen} ]
    ]
    [.{\textbf{Gießen unter Druck}}
      [.{Verlorene\\Formen} \textit{Niederdruck-Sandgießen} ]
      [.\textbf{Dauerformen} \textbf{Druckgießen}\\\textit{Niederdruckgießen}\\\textit{Gegendruckgießen}\\\textit{Sonderverfahren} ]
    ]
  ]
\end{tikzpicture}
\end{document}

边界叶与根部保持一定距离

我们可以做类似的事情,但更灵活,森林通过适应Alenanno 的解决方案

  for tree={
    parent anchor=south,
    child anchor=north,

这确保了子节点的边缘从同一点开始,因为这不是森林的默认点,并且被绘制到这些子节点的顶部中心。

    align=center,

与以下操作相同tikz-qtree

如果需要的话,最好确保所有级别的节点都默认对齐,而不是依赖于它碰巧以这种方式出现。我们可以使用以下代码来实现这一点:

    tier/.wrap pgfmath arg={tier #1}{level()},% align the nodes on all levels

我们需要为终端节点重写此设置,因为我们希望它们对齐,尽管它们处于不同的级别。因此,对于叶节点,我们将其设置tier=word为 Alenanno 的解决方案,但无需记住将其添加到每个节点:

    if n children=0{% for the leaf nodes
      tier=word,% override the default tier setting because these are at different levels of the tree but we want them still aligned

当我们在这里时,我们不妨将它们设置为斜体字体并覆盖异常,而不是将它们全部设置为直立,然后除了一种情况外,在其他所有情况下都覆盖它:

      font=\itshape,% make these nodes italic by default and we'll override this for the single exception
    }{}
}

森林解决方案

介绍森林及其括号语法,请参阅第二部分我对先前问题的回答

森林代码:

\documentclass[tikz,border=10pt]{standalone}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{forest}
\begin{document}
\begin{forest}
  for tree={
    parent anchor=south,
    child anchor=north,
    align=center,
    tier/.wrap pgfmath arg={tier #1}{level()},% align the nodes on all levels
    if n children=0{% for the leaf nodes
      tier=word,% override the default tier setting because these are at different levels of the tree but we want them still aligned
      font=\itshape,% make these nodes italic by default and we'll override this for the single exception
    }{}
  }
  [\textbf{Gieverfahren}
    [Schwerkraftgieen
      [Verlorene Formen
        [verlorene\\Modelle
          [Feingieen\\Vollformgieen
          ]
        ]
        [Dauermodelle
          [Sandgieen\\Maskenformgieen
          ]
        ]
      ]
      [Dauerformen
        [Kokillengieen\\Stranggieen\\Schleudergieen
        ]
      ]
    ]
    [\textbf{Gieen unter Druck}
      [Verlorene Formen
        [Niederdruck-Sandgieen
        ]
      ]
      [\textbf{Dauerformen}
        [\textbf{\upshape Druckgieen}\\Niederdruckgieen\\Gegendruckgieen\\Sonderverfahren
        ]
      ]
    ]
  ]
\end{forest}
\end{document}

请注意,如果在节点内添加\itshape,则需要在每个换行符后添加,就像在tikz-qtree否则只有第一行会设置为斜体。

答案2

我建议使用该forest包。它有一个选项tier=word,您可以将其添加到所有要对齐的节点。

我已经替换了一些其他的小细节,请随时要求解释。

输出

图像

代码

\documentclass[a5paper,pdftex,twoside,9pt,paper=21cm:14.85cm,openright]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{tikz}                               
\usepackage{forest}

\forestset{
    .style={
        for tree={
            base=bottom,
            parent anchor=south, 
            child anchor=north,
            align=center,
            s sep=.9mm,
            draw=none,
    if n children=0{tier=word, font=\itshape}{}
        }
    }
}

\begin{document}

\begin{figure}[!h]
\centering
\resizebox{\textwidth}{!}{
\begin{forest}
    [ \textbf{Gieverfahren}
        [ Schwerkraftgieen
            [ Verlorene Formen 
                [ verlorene\\Modelle
                    [Feingieen\\Vollformgieen] ]
                [ Dauermodelle
                    [Sandgieen\\Maskenformgieen]] ] 
            [ Dauerformen 
                [Kokillengieen\\Stranggieen\\Schleudergieen] ] ]
        [ \textbf{Gieen unter Druck} 
            [ Verlorene Formen 
                [Niederdruck-Sandgieen] ] 
            [ \textbf{Dauerformen} 
                [\textbf{Druckgieen}\\Niederdruckgieen\\Gegendruckgieen\\Sonderverfahren] ] ] ]
\end{forest}}
\end{figure}
\end{document}

答案3

也可以插入缺失的级别:

\documentclass[a5paper,twoside,fontsize=9pt,open=any]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß}}

\usepackage{tikz-qtree}

\begin{document}
\begin{center}
\resizebox{1\textwidth}{!}{%
\begin{tikzpicture}[every tree node/.style={align=center,anchor=north}]
\Tree [.\textbf{Gießverfahren} 
  [.{Schwerkraftgießen} 
    [.{Verlorene\\Formen} 
      [.{verlorene\\Modelle} \textit{Feingießen}\\\textit{Vollformgießem} ]
      [.{Dauermodelle} \textit{Sandgießen}\\\textit{Maskenformgießen} ]] 
        [.Dauerformen 
          [ 
            [.\textit{Kokillengießen}\\\textit{Stranggießen}\\\textit{Schleudergießen} ] ] ] ]
  [.{\textbf{Gießen unter Druck}} 
    [.{Verlorene\\Formen}
      [
        [.\textit{Niederdruck-Sandgießen} ] ] ]
    [.\textbf{Dauerformen} 
      [ 
        [.\textbf{Druckgießen}\\\textit{Niederdruckgießen}\\\textit{Gegendruckgießen}\\\textit{Sonderverfahren} ] ] ] ] ]
\end{tikzpicture}}
\end{center}
\end{document}

在此处输入图片描述

相关内容