编辑

编辑

在学校的一项作业中,我需要制作很多树,而且是大型树。我搜索了一些方法,偶然发现了森林包,它给了我很大的帮助。我快完成了,但还是想不出最后一个重要的事情。我想将树的根节点置于中心。我已经将树置于中心,但它将树的中心置于中心,而不是根节点。我正在寻找一种专门将根节点置于中心的方法。

\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{center}
\scalebox{1}{
\begin{forest}
for tree={
parent anchor=south,
child anchor=north,
l=2cm 
}    
[ {[?,?,?,?]}, calign=center
    [ {[Intel,?,?,?]}
        [ {[i7,?,?,?]}
        ]
    ]
    [ {[?,Radeon,?,?]}
    ]
    [ {[?,?,4GB,?]}
        [ {[Intel,?,4GB,?]}
        ]
        [ {[?,Radeon,4GB,?]}
        ] 
        [ {[?,?,8GB,?]}
        ]
        [ {[?,?,4GB,Asus]}
        ]
    ]
]    
\end{forest}
}
\end{center}  
\end{document}

根节点 [?,?,?,?] 位于页面中心左侧几厘米处,而整个树位于中心。

答案1

我不推荐这样做。对我来说,它会产生一个过满的盒子,即使在这种情况下不会,在其他情况下也很可能如此。此外,树不会如果不对称,则居中。

但如果你愿意的话你可以这样做:

中心根

虚线蓝线仅用于显示页面的中心。

通过使用一个空的、未绘制的节点作为 width 的根来实现居中\linewidth。然后将可见根与真实根对齐,使其位于正中央。

\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{tikzpicture}[overlay, remember picture]% this is just to show the centre of the page
  \draw [dashed, draw=blue!50!white] (current page.north) -- (current page.south);
\end{tikzpicture}
\begin{center}
  \begin{forest}
    for tree={
      if level=0{
        text height=0pt,
        text width=\linewidth,
        inner sep=0pt,
        outer sep=0pt,
        parent anchor=north
      }{
        parent anchor=south,
        child anchor=north,
        align=center,
        if level=1{
          l=0pt,
        no edge,
        }{
          l=2cm
        },
      },
    },
    [
      [{[?,?,?,?]}
          [{[Intel,?,?,?]}
              [{[i7,?,?,?]}
              ]
          ]
          [{[?,Radeon,?,?]}
          ]
          [{[?,?,4GB,?]}
              [{[Intel,?,4GB,?]}
              ]
              [{[?,Radeon,4GB,?]}
              ]
              [{[?,?,8GB,?]}
              ]
              [{[?,?,4GB,Asus]}
              ]
          ]
      ]
    ]
  \end{forest}
\end{center}
\end{document}

编辑

在这个特殊情况下,由于节点锚点位于中心,因此Sašo Živanović 指出,可以使用更简单的版本,minimum width而不是text width并应用于现有根节点。将使与其他文档元素的垂直对齐更简单,但parent anchor如果不居中则失败

\begin{center}
  \begin{forest}% simplified with Sašo Živanović's suggestion (https://tex.stackexchange.com/questions/278708/center-root-of-forest-tree/278793?noredirect=1#comment671409_278793)
    for tree={
      parent anchor=south,
      child anchor=north,
      align=center,
      l=2cm,
      if level=0{
        minimum width=\linewidth,
        inner xsep=0pt,
        outer xsep=0pt,
      }{},
    },
    [{[?,?,?,?]}
        [{[Intel,?,?,?]}
            [{[i7,?,?,?]}
            ]
        ]
        [{[?,Radeon,?,?]}
        ]
        [{[?,?,4GB,?]}
            [{[Intel,?,4GB,?]}
            ]
            [{[?,Radeon,4GB,?]}
            ]
            [{[?,?,8GB,?]}
            ]
            [{[?,?,4GB,Asus]}
            ]
        ]
    ]
  \end{forest}
\end{center}

相关内容