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