РЕДАКТИРОВАТЬ

РЕДАКТИРОВАТЬ

Около недели назад @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]

производит

перестроенный

Связанный контент