
Около недели назад @cfr уже предоставил очень приличное решение дляэкономия вертикального пространства в моей древовидной диаграмме. К сожалению, моя изначальная ситуация изменилась, и я сталкиваюсь с горизонтальным деревом, которое превосходит мои навыки. На самом деле это то же самое дерево, что и в моем предыдущем вопросе, с той разницей, что одна из трех основных ветвей теперь является частью двух оставшихся основных ветвей. Вот что я попробовал:
\documentclass[a4paper,11pt]{article}
\usepackage[edges]{forest}
%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}
}
\colorlet{col1}{white}
\colorlet{col2}{gray!20}
\colorlet{col3}{gray!40}
\colorlet{col4}{gray!60}
\begin{document}
\begin{center}
\resizebox{\linewidth}{!}{%
\begin{forest}
forked edges,
for tree={
draw,
rounded corners,
node options={align=center,},
text width=2.7cm,
minimum height=1.5cm,
parent anchor=children,
}
[LMS, fill=col4, parent, s sep=3cm
[Funktionale \\Anforderungen, for tree={child, fill=col3}
[Lerninhalte organisieren, tier=first]
[Lerninhalte erstellen]
[Lerninhalte abfragen]
[Kommunikation]
[Benutzerkonten\-führung]
[Steuerungs\-funktionen]
]
[Nicht-Funktionale Anforderungen, tier=first, for tree={child, fill=col2}
[Zuverl{\"a}ssig\-keit]
[Skalierbar\-keit und Effizienz]
[Benutzer\-freundlich\-keit]
[Portierbarkeit]
[Datenschutz / Informationssicherheit]
[Erweiterbar\-keit]
[Anpassbarkeit]
[Technische Rahmen\-bedinungen, for tree={child, calign=last, fill=col1}
[System\-architektur]
[Software\-kriterien]
[Schnittstellen]
[Wartung und Support
[Support\-leistungen]
[Software-Pflege]
]
]
]
]
\end{forest}
}
\end{center}
\end{document}
По каким-то причинам узлы с разрывом строки не выравниваются должным образом... Может кто-нибудь объяснить, почему или, вернее, как это исправить?
И есть ли способ разделить только один узел одного уровня? В примере узел "Technische Rahmenbedinungen" должен быть разделен вправо на 2 см. s sep
применяется только для целого уровня...
И последнее, но не менее важное: есть ли у кого-нибудь идея, как сэкономить здесь еще немного горизонтального пространства? Текст все еще немного мелковат.
Я также сделал это, что, конечно, является довольно хорошей альтернативой, но горизонталь меня раздражает:
\documentclass[a4paper,11pt,ngerman]{article}
\usepackage[edges]{forest}
\usepackage{caption}
%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}
}
\colorlet{col1}{white}
\colorlet{col2}{gray!20}
\colorlet{col3}{gray!40}
\colorlet{col4}{gray!60}
\begin{document}
\begin{center}
\resizebox*{.75\linewidth}{!}{%
\begin{forest}
forked edges,
for tree={
grow'=east,
draw,
rounded corners,
text width=2.7cm,
node options={align=center},
}
[LMS, fill=col4, parent, s sep=1cm
[Funktionale \\Anforderungen, for tree={child, fill=col3}
[Lerninhalte organisieren]
[Lerninhalte erstellen]
[Lerninhalte abfragen, calign with current]
[Kommunikation]
[Benutzerkonten\-führung]
[Steuerungs\-funktionen]
]
[Nicht-Funktionale Anforderungen, for tree={child, fill=col2}
[Zuverl{\"a}ssig\-keit]
[Skalierbar\-keit und Effizienz]
[Benutzer\-freundlich\-keit]
[Portierbarkeit]
[Datenschutz/\\Informations-\\sicherheit, calign with current]
[Erweiterbar\-keit]
[Anpassbarkeit]
[Technische Rahmen\-bedinungen, calign=last, for tree={child, fill=col1}
[System\-architektur]
[Software\-kriterien]
[Schnittstellen]
[Wartung und Support
[Support\-leistungen]
[Software-Pflege]
]
]
]
]
\end{forest}}
\captionsetup{type=figure}
\captionof{figure}{Gliederung des UKSH Lastenheft: Subgliederung LMS}
\label{abb:GliederungUKSHLMS}
\end{center}
\end{document}
Буду признателен за любую помощь!
решение1
Добавление
anchor=parent,
для дерева будет гарантировать, что узлы будут выровнены более аккуратно:
Чтобы переместить определенный узел, вы можете добавить
before drawing tree={x'+=20mm}
для рассматриваемого узла. Например:
Если вы хотите, чтобы это также применялось к потомкам узла, вы можете добавить это для всего поддерева. Например:
[Technische Rahmen\-bedinungen, for tree={child, calign=last, fill=col1, before drawing tree={x'+=20mm}}
Конечно, это, очевидно, занимает больше горизонтального пространства в дереве, которое и так выглядит довольно неудобно разбросанным.Почемунужно ли его сместить на 2 см вправо? Что бы это ни представляло, можно ли это представить по-другому?)
Трудно сказать, что предложить относительно горизонтального пространства. Самое очевидное предложение — не делать того, что вы делаете, чтобыувеличиватьгоризонтальное пространство, например, использование униформы text width
даже для узлов, которым не требуется так много места. И настройка, s sep=3cm
очевидно, увеличивает использование горизонтального пространства еще больше.
Если вы можете пожертвовать этими ограничениями, вы можете сделать что-то вроде этого:
\documentclass[tikz,multi,border=10pt]{standalone}
\usepackage[edges]{forest}
%Defining tikz classes for tree diagrams
\forestset{%
parent/.style={text width=3cm,rounded corners=3pt},
child/.style={rounded corners=3pt},
my phantom/.style={inner xsep=0pt, draw=none, child anchor=children}
}
\colorlet{col1}{white}
\colorlet{col2}{gray!20}
\colorlet{col3}{gray!40}
\colorlet{col4}{gray!60}
\begin{document}
\begin{forest}
forked edges,
for tree={
draw,
rounded corners,
align=center,
text centered,
minimum height=1.5cm,
parent anchor=children,
anchor=parent,
},
before typesetting nodes={%
where n children=0{}{%
if content={}{}{%
text width=27mm
},
},
},
[LMS, fill=col4, parent
[Funktionale\\Anforderungen, for tree={child, fill=col3}
[Lerninhalte\\organisieren, tier=first]
[Lerninhalte\\erstellen]
[Lerninhalte\\abfragen]
[Kommunikation]
[Benutzerkonten-\\führung]
[Steuerungs-\\funktionen]
]
[, tier=first, my phantom
[Nicht-Funktionale\\Anforderungen, tier=second, for tree={child, fill=col2}
[Zuverl{\"a}ssig\-keit, tier=third]
[Skalierbar\-keit\\und Effizienz]
[Benutzer-\\freundlich\-keit]
[Portierbarkeit]
[Datenschutz\\/ Informa-\\tionssicherheit]
[Erweiterbar\-keit]
[Anpassbarkeit]
[, my phantom, tier=third
[Technische\\Rahmen-\\bedinungen, for tree={child, calign=last, fill=col1}
[System\-architektur]
[Software\-kriterien]
[Schnittstellen]
[Wartung\\und Support
[Support\-leistungen]
[Software-Pflege]
]
]
]
]
]
]
\end{forest}
\end{document}
РЕДАКТИРОВАТЬ
Вышеуказанное прекрасно работает у меня внутри \resizebox...
:
\documentclass{article}
\usepackage[edges]{forest}
%Defining tikz classes for tree diagrams
\forestset{%
parent/.style={text width=3cm,rounded corners=3pt},
child/.style={rounded corners=3pt},
my phantom/.style={inner xsep=0pt, draw=none, child anchor=children}
}
\colorlet{col1}{white}
\colorlet{col2}{gray!20}
\colorlet{col3}{gray!40}
\colorlet{col4}{gray!60}
\begin{document}
\resizebox*{\linewidth}{!}{%
\begin{forest}
forked edges,
for tree={
draw,
rounded corners,
align=center,
text centered,
minimum height=1.5cm,
parent anchor=children,
anchor=parent,
},
before typesetting nodes={%
where n children=0{}{%
if content={}{}{%
text width=27mm
},
},
},
[LMS, fill=col4, parent
[Funktionale\\Anforderungen, for tree={child, fill=col3}
[Lerninhalte\\organisieren, tier=first]
[Lerninhalte\\erstellen]
[Lerninhalte\\abfragen]
[Kommunikation]
[Benutzerkonten-\\führung]
[Steuerungs-\\funktionen]
]
[, tier=first, my phantom
[Nicht-Funktionale\\Anforderungen, tier=second, for tree={child, fill=col2}
[Zuverl{\"a}ssig\-keit, tier=third]
[Skalierbar\-keit\\und Effizienz]
[Benutzer-\\freundlich\-keit]
[Portierbarkeit]
[Datenschutz\\/ Informa-\\tionssicherheit]
[Erweiterbar\-keit]
[Anpassbarkeit]
[, my phantom, tier=third
[Technische\\Rahmen-\\bedinungen, for tree={child, calign=last, fill=col1}
[System\-architektur]
[Software\-kriterien]
[Schnittstellen]
[Wartung\\und Support
[Support\-leistungen]
[Software-Pflege]
]
]
]
]
]
]
\end{forest}}
\end{document}
Добавление calign with current
к Anpassbarkeit
:
[Anpassbarkeit, calign with current]
производит