![编辑](https://linux22.com/image/330193/%E7%BC%96%E8%BE%91.png)
我在一个层上有许多节点。因此我已经使用了向东扩展选项。但这还不够……我想节省一点垂直空间,例如通过将两个分支稍微向右拉。或者也许拉出中间的那个会更好看……
有没有延长水平线的选项?或者有人除了缩小尺寸外,还有其他节省垂直空间的方法吗?:)
这是我的代码:
\documentclass[ngerman]{scrreprt}
\usepackage[edges]{forest}
\usepackage{tikz}
\usetikzlibrary{trees}
%Defining tikz classes for tree diagrams
\tikzset{parent/.style={align=center,text width=3cm,rounded corners=3pt},
child/.style={align=center,text width=3cm,rounded corners=3pt}
}
\begin{document}
\begin{center}
\resizebox{.7\textwidth}{!}{%
\begin{forest}
for tree={
grow'=east,
forked edges,
draw,
rounded corners,
node options={
align=center },
text width=2.7cm,
anchor=west,
}
[LMS, fill=gray!25, parent
[Funktionale \\Anforderungen, for tree={fill=brown!25, child}
[Lerninhalte organisieren]
[Lerninhalte erstellen]
[Lerninhalte abfragen]
[Kommunikation]
[Benutzerkonten\-führung]
[Steuerungs\-funktionen]
]
[Nicht-Funktionale Anforderungen, for tree={fill=red!25,child}
[Zuverl{\"a}ssig\-keit]
[Skalierbar\-keit und Effizienz]
[Benutzer\-freundlich\-keit]
[Portierbarkeit]
[Datenschutz / Informationssicherheit]
[Erweiterbar\-keit]
[Anpassbarkeit]
]
[Technische Rahmen\-bedinungen, for tree={fill=blue!25, child}
[System\-architektur]
[Software\-kriterien]
[Schnittstellen]
[Wartung und Support
[Support\-leistungen]
[Software-Pflege]
]
]
]
\end{forest}
}
\end{center}
\end{document}
答案1
我不知道这是否有帮助,但作为评论中讨论的后续,您可以通过执行以下操作使树更加紧凑:
\documentclass[ngerman]{scrreprt}
\usepackage[edges]{forest}
\tikzset{%
parent/.style={align=center,text width=3cm,rounded corners=3pt},
child/.style={align=center,text width=3cm,rounded corners=3pt}
}
\begin{document}
\begin{center}
\resizebox{.7\textwidth}{!}{%
\begin{forest}
for tree={
% forked edges,
draw,
rounded corners,
node options={align=center,},
text width=2.7cm,
},
where level=0{%
}{%
folder,
grow'=0,
if level=1{%
before typesetting nodes={child anchor=north},
edge path'={(!u.parent anchor) -- ++(0,-5pt) -| (.child anchor)},
}{},
}
[LMS, fill=gray!25, parent
[Funktionale \\Anforderungen, for tree={fill=brown!25, child}
[Lerninhalte organisieren]
[Lerninhalte erstellen]
[Lerninhalte abfragen]
[Kommunikation]
[Benutzerkonten\-führung]
[Steuerungs\-funktionen]
]
[Nicht-Funktionale Anforderungen, for tree={fill=red!25,child}
[Zuverl{\"a}ssig\-keit]
[Skalierbar\-keit und Effizienz]
[Benutzer\-freundlich\-keit]
[Portierbarkeit]
[Datenschutz / Informationssicherheit]
[Erweiterbar\-keit]
[Anpassbarkeit]
]
[Technische Rahmen\-bedinungen, for tree={fill=blue!25, child}
[System\-architektur]
[Software\-kriterien]
[Schnittstellen]
[Wartung und Support
[Support\-leistungen]
[Software-Pflege]
]
]
]
\end{forest}
}
\end{center}
\end{document}
请注意,不建议调整包含文本的图形的大小,因为这样最终会得到各种不同大小的字体。因此,如果可以避免这样调整框的大小,那就更好了。
编辑
回答评论中的问题:
“中心”实际上是模棱两可的——中心相对于什么?我建议将根与中间子节点对齐。最简单的方法可能是添加
calign with current edge
到相关子节点:[Nicht-Funktionale Anforderungen, for tree={fill=red!25,child}, calign with current edge
这使
边缘可以通过多种方式控制:
forked edges
适用于整棵树(尽管它实际上并没有做任何事情,因为它在所有情况下都被覆盖);folder
改变根以下所有节点的边,也就是说,所有可能有边的节点;edge path'
然后仅对第一级中的节点(即您尝试更改的边)进行最后的更改。
因此,要恢复第一级的默认样式,我们需要:
- 删除
forked edges
; - 删除
edge path
。
folder
这里不会造成任何损害,因此我们可以保留它:
如果我们希望边从一个公共点开始,我们可以重新定义parent anchor
根:
where level=0{%
parent anchor=children,
}{%
或者我们可以使用我们想要的任何类型的替代定义edge path
。例如:
where level=0{%
parent anchor=children,
}{%
folder,
grow'=0,
if level=1{%
before typesetting nodes={child anchor=north},
edge path'={%
(!u.parent anchor) -- ++(0,-5pt) -- (.child anchor)
},
}{},
}
答案2
您可以将下一级的节点与以下内容对齐tier=<some name>
:
% arara: pdflatex
\documentclass[ngerman]{scrreprt}
\usepackage[edges]{forest}
\tikzset{%
,parent/.style={align=center,text width=3cm,rounded corners=3pt}
,child/.style={align=center,text width=3cm,rounded corners=3pt}
}
\begin{document}
\begin{figure}\centering
\begin{forest}
for tree={%
,scale=.78
,grow'=east
,forked edges
,draw
,rounded corners
,node options={align=center}
,text width=2.7cm
,anchor=west
}
[LMS, fill=gray!25, parent
[Funktionale \\Anforderungen, tier=align here, for tree={fill=brown!25, child}
[Lerninhalte organisieren]
[Lerninhalte erstellen]
[Lerninhalte abfragen]
[Kommunikation]
[Benutzerkonten\-führung]
[Steuerungs\-funktionen]
]
[Nicht-Funktionale Anforderungen, for tree={fill=red!25,child}
[Zuverl{\"a}ssig\-keit]
[Skalierbar\-keit und Effizienz]
[Benutzer\-freundlich\-keit]
[Portierbarkeit]
[Datenschutz / Informationssicherheit]
[Erweiterbar\-keit]
[Anpassbarkeit, tier=align here]
]
[Technische Rahmen\-bedinungen, tier=align here, for tree={fill=blue!25, child}
[System\-architektur]
[Software\-kriterien]
[Schnittstellen]
[Wartung und Support
[Support\-leistungen]
[Software-Pflege]
]
]
]
\end{forest}
\end{figure}
\end{document}