這似乎是一個基本問題,但我想這對於那些開始使用中的工作範例學習森林的人來說很重要這個問題(通常如圖 2 所示)。我希望父級的第一個箭頭如圖 1 所示。我還認為,如果我在這裡問,對其他人也會有好處。我已使用提供的連結中的程式碼作為基準。
編輯:為了清楚起見,我編輯了第一個 MWE 並修改了連結問題中的 MWE。問題是,依照圖 2 的樣式,當該圖中的子項「拉直箭頭」增加到十列。來自父級的箭頭開始穿過其中的一些。
\documentclass{article}
\usepackage{forest}
\usetikzlibrary{shadows,arrows.meta}
\tikzset{parent/.style={align=center,text width=2cm,fill=green!20,rounded corners=2pt},
child/.style={align=center,text width=2.8cm,fill=green!50,rounded corners=6pt},
grandchild/.style={fill=pink!50,text width=2.3cm}
}
\begin{document}
\begin{forest}
for tree={%
thick,
drop shadow,
l sep=0.6cm,
s sep=0.8cm,
node options={draw,font=\sffamily},
edge={semithick,-Latex},
where level=0{parent}{},
where level=1{
minimum height=1cm,
child,
parent anchor=south west,
tier=p,
l sep=0.25cm,
for descendants={%
grandchild,
minimum height=0.6cm,
anchor=150,
edge path={
\noexpand\path[\forestoption{edge}]
(!to tier=p.parent anchor) |-(.child anchor)\forestoption{edge label};
},
}
}{},
}
[Forest
[Straighten
[
[
[ ]
]
]
]
[The
[
[
[
[ ]
]
]
]
]
[Arrows
[
[
[
[
[]
]
]
]
]
]
]
\end{forest}
\end{document}
答案1
這種結構已經有許多例子了。以下內容改編自https://tex.stackexchange.com/a/299500/,可以在其中找到解釋性註釋。
\documentclass[border=10pt]{standalone}
\usepackage[edges]{forest}
\usepackage[T1]{fontenc}
\tikzset{%
parent/.style={align=center,text width=3cm,rounded corners=3pt},
child/.style={align=center,text width=3cm,rounded corners=3pt}
}
\begin{document}
\begin{forest}
for tree={
% edge+={->},% uncomment for arrows
draw,
rounded corners,
node options={align=center,},
text width=2.7cm,
},
where level=0{%
parent anchor=children,
}{%
folder,
grow'=0,
if level=1{% this changes the edges from level 0 to nodes at 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}, calign with current edge
[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{document}
編輯
為了解決已編輯的問題,獲得所需效果的一種方法是設定parent anchor=center
根節點並使覆蓋節點的邊部分不可見。您可以使用該庫將它們放在一個background
圖層上background
。或者你可以只使用「混合模式=變亮」。例如,
\documentclass[border=10pt]{standalone}
\usepackage[edges]{forest}
\usepackage[T1]{fontenc}
\tikzset{%
parent/.style={align=center,text width=3cm,rounded corners=3pt},
child/.style={align=center,text width=3cm,rounded corners=3pt}
}
\begin{document}
\begin{forest}
for tree={
% forked edges,
draw,
rounded corners,
node options={align=center,},
text width=2.7cm,
},
where level=0{%
parent anchor=center,
}{%
folder,
grow'=0,
if level=1{%
before typesetting nodes={child anchor=north},
edge path'={(!u.parent anchor) -| (.child anchor)},
edge+={blend mode=lighten},
}{},
}
[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}, calign with current edge
[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{document}
如果您的邊緣比節點更亮而不是更暗,請blend mode=darken
改為使用。