(Mehrzeiliger Text)-Knoten mit Tikzlibrary-Positionierung ausrichten

(Mehrzeiliger Text)-Knoten mit Tikzlibrary-Positionierung ausrichten

Bevor ich mich Textfeldern und Koordinaten zuwende, möchte ich wissen, wie weit ich positioningnur mit der Tikzlibrary komme.

  1. Im Beispiel sollte die untere Zeile der Kästchen n4, n6und n8ausgerichtet sein(scheint der Fall zu sein, die geringe zusätzliche Höhe/Tiefe entsteht dadurch pund gspielt keine Rolle), das gleiche mit n5, n7und n9.
  2. Darüber hinaus sollte der linke Rand von n4auf der gleichen vertikalen Linie liegen wien5 (was bereits der Fall ist), das gleiche gilt fürn6-n7 (wie n7: node[right = of n5, below = of n6)Und n8-n9.
  3. n10sollte auf der gleichen Höhe sein wie n3.
  4. Etwas tiefer anzusetzen n5ist kein Problem, habe ich allerdings nicht gemacht.

Kann ich etwas davon mit erreichen positioning?

% -*- mode: latex; TeX-engine: luatex; coding: utf-8; -*-
\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, positioning}
\usepackage{luatextra}
\begin{document}

\begin{tikzpicture}[every node/.style = {draw, shape=rectangle,
      rounded corners , node distance = 2em ,
    align=left]
    \node[anchor=center] (n1) {n1 Erheblicher Stress\\
      in fruher Kindheit\\
      oder spater};
    \node[right = of n1] (n2) {n2 Anpassung der\\
      Ausbildung von\\
      Cortisolrezeptoren};
    \node[right = of n2, anchor=west] (n3) {n3 langfristig\\
      erhohte Cortisol-\\
      freisetzung};
    \node[base right = of n3.north east] (n4) {n4 langfristig\\
      verminderte\\
      Neurogenese};
    \node[ right = of n3.south east] (n5) {n5 verringerte\\
      Serotonon-\\
      wirkung an\\
      5-HT\textsubscript{1A}-\\
      Rezeptoren} ;
    \node[base right = of n4] (n6) {n6 verringertes\\
      Volumen von\\
      Hippocampus und\\
      Basalganglien};
    \node[base right = of n5] (n7) {n7 erhohte Aktivitat\\
      im limbischen\\
      Cortexbereich};
    \node[base right = of n6] (n8) {n8 verringerte\\
      Fahigkeit zu\\
      Integration neuer\\
      Informationen};
    \node[base right = of n7] (n9) {n9 erhöhte Ten-\\
      denz, an Emotionen\\
      festzuhalten};
    \node[right = of n8.south east] (n10) {n10 Depressive\\
      Episode};
  \end{tikzpicture}
\end{document}

fehlt der letzte Schliff

Antwort1

Sie fragen, ob man die gewünschte Ausrichtung positioningnur mit erreichen kann. Die Antwort ist ja, aber meiner Meinung nach machen Sie sich damit das Leben unnötig kompliziert. Wenn Sie matrixzusätzlich die Bibliothek verwenden, wird es viel einfacher. Dann ist die gewünschte Ausrichtung nur eine Matrix mit Knotenankern south. Dies erfordert viel weniger Feinabstimmung (nur die text widthsNotwendigkeit, spaltenabhängig zu machen, wenn Sie auf Ihren manuellen Zeilenumbrüchen bestehen) und die Ausgabe ist meiner Meinung nach auch überzeugender.

\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{matrix, positioning}
\begin{document}

\begin{tikzpicture}[every node/.style = {draw, shape=rectangle,
      rounded corners }, node distance = 2em ,
    align=left,mymat/.style={matrix of nodes,
    draw=none,nodes={draw,rounded corners,align=left,text width=10em,
    anchor=south},column 1/.style={nodes={text width=8em}},
    row sep=2em,column sep=2em}]
    \node[anchor=center] (n1) {n1 Erheblicher Stress\\
      in fruher Kindheit\\
      oder spater};
    \node[right = of n1] (n2) {n2 Anpassung der\\
      Ausbildung von\\
      Cortisolrezeptoren};
    \node[right = of n2] (n3) {n3 langfristig\\
      erh\"ohte Cortisol-\\
      freisetzung};
    \matrix[right = of n3,mymat] (m1) {{n4 langfristig\\
      verminderte\\
      Neurogenese} &
      {n6 verringertes\\
       Volumen von\\
       Hippocampus und\\
       Basalganglien}& 
       {n8 verringerte\\
       F\"ahigkeit zu\\
       Integration neuer\\
       Informationen}
       \\
      {n5 verringerte\\
      Serotonon-\\
      wirkung an\\
      5-HT\textsubscript{1A}-\\
      Rezeptoren}&
      {n7 erh\"ohte Aktivitat\\
       im limbischen\\
       Cortexbereich}&
       {n9 erh\"ohte Ten-\\
       denz, an Emotionen\\
       festzuhalten}
       \\
      };
     \node[right = of m1] (n10) {n10 Depressive\\
       Episode};
  \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

NACHTRAG: Nur zum Spaß: ein Stil matrix horizontal arrows, der die horizontalen Pfeile zwischen den Matrixknoten automatisch zeichnet. (Ein Stil für vertikale Pfeile ist völlig analog.)

\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{matrix, positioning}
\tikzset{matrix horizontal arrows/.style={execute at end matrix={
\foreach \Y in {1,...,\the\pgfmatrixcurrentrow}
{\foreach \X in {2,...,\the\pgfmatrixcurrentcolumn}
{\path (\tikzmatrixname-\Y-\the\numexpr\X-1\relax.east)
-- (\tikzmatrixname-\Y-\X.west) coordinate[midway](maux);
\draw[->,#1] (\tikzmatrixname-\Y-\the\numexpr\X-1\relax.east|-maux) 
-- (\tikzmatrixname-\Y-\X.west|-maux); }
}}}}
\begin{document}

\begin{tikzpicture}[every node/.style = {draw, shape=rectangle,
      rounded corners }, node distance = 2em ,
    align=left,mymat/.style={matrix of nodes,
    draw=none,nodes={draw,rounded corners,align=left,text width=6em,
    anchor=south},
    row sep=2em,column sep=2em,
    matrix horizontal arrows={-latex}}]
    \node[anchor=center] (n1) {Erheblicher Stress\\
      in fr\"uher Kindheit\\
      oder spater};
    \node[right = of n1] (n2) {Anpassung der\\
      Ausbildung von\\
      Cortisolrezeptoren};
    \node[right = of n2] (n3) {langfristig\\
      erh\"ohte Cortisol-\\
      freisetzung};
    \matrix[right = of n3,mymat] (m1) {{langfristig
      verminderte
      Neurogenese} &
      {verringertes
       Volumen von
       Hippocampus und
       Basalganglien}& 
       {n8 verringerte
       F\"ahigkeit zu
       Integration neuer
       Informationen}
       \\
      {verringerte
      Serotonon
      wirkung an
      5-HT\textsubscript{1A}-Rezeptoren}&
      {n7 erh\"ohte Aktivitat
       im limbischen
       Cortexbereich}&
       {n9 erh\"ohte Tendenz, an Emotionen
       festzuhalten}
       \\
      };
     \node[right = of m1] (n10) {Depressive Episode};
     \foreach \X in {2,3}
      {\draw[-latex] (n\the\numexpr\X-1) -- (n\X);}
      \draw[-latex] (n3.45) |- (m1-1-1.west);
      \draw[-latex] (n3.-45) |- (m1-2-1.west);
      \draw[latex-] (n10.135) |- (m1-1-3.east);
      \draw[latex-] (n10.-135) |- (m1-2-3.east);
  \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

So was?

Bildbeschreibung hier eingeben

Dies erfordert einige manuelle Eingriffe in den Code:

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, positioning}
\usepackage{luatextra}

\begin{document}
    \begin{tikzpicture}[
    node distance = 1ex and 2em,
every node/.style = {draw, shape=rectangle, rounded corners, 
                     align=left}
                        ]
\node (n1) {n1 Erheblicher Stress\\
               in fruher Kindheit\\
               oder spater};
\node (n2) [right = of n1]  {n2 Anpassung der\\
                            Ausbildung von\\
                            Cortisolrezeptoren};
\node (n3) [right = of n2]  {n3 langfristig\\
                            erhohte Cortisol-\\
                            freisetzung};
\node (n4) [above right = of n3.east]{n4 langfristig\\
                              verminderte\\
                              Neurogenese};
\node (n5) [below right = of n3.east] {n5 verringerte\\
                              Serotonon-\\
                              wirkung an\\
                              5-HT\textsubscript{1A}-\\
                              Rezeptoren} ;
\node (n6) [right = of n4] {n6 verringertes\\
                              Volumen von\\
                              Hippocampus und\\
                              Basalganglien};
\node (n7) [right = of n5 -| n4.east] {n7 erhohte Aktivitat\\
                              im limbischen\\
                              Cortexbereich};
\node (n8) [right = of n6] {n8 verringerte\\
                              Fahigkeit zu\\
                              Integration neuer\\
                              Informationen};
\node (n9) [right = of n7 -| n6.east] {n9 erhöhte Ten-\\
                              denz, an Emotionen\\
                              festzuhalten};
\node (n10) [right = of n3-| n8.east] {n10 Depressive\\
                              Episode};
    \end{tikzpicture}
\end{document}

Der Code wird jedoch ziemlich einfach, wenn Sie den Kommentar von @AndréC unter der Frage berücksichtigen:

Bearbeiten: in Bezug auf Ihren Kommentar scheint es, dass Sie nach dem folgenden Knotenpositionierungsdesign suchen:

Bildbeschreibung hier eingeben

Hierzu sind kleine Codeänderungen nötig:

\documentclass[border=1cm]{standalone}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{calc, positioning}
\usepackage{luatextra}

\begin{document}
    \begin{tikzpicture}[
    node distance = 0ex and 2em,
every node/.style = {draw, shape=rectangle, rounded corners,
                     anchor=south west,  
                     text width=11em, align=left}
                        ]
\node (n1) {n1 Erheblicher Stress in fruher Kindheit oder spater};
\node (n2) [above right = of n1.south east]  {n2 Anpassung der Ausbildung von Cortisolrezeptoren};
\node (n3) [above right = of n2.south east]  {n3 langfristig erhohte Cortisol freisetzung};
\node (n4) [above right = 2ex of n3.east]{n4 langfristig verminderte Neurogenese};
\node (n5) [below right = 2ex of n3.east] {n5 verringerte Serotonon wirkung an 5-HT\textsubscript{1A}-                              Rezeptoren} ;
\node (n6) [above right = of n4.south east] {n6 verringertes Volumen von Hippocampus und Basalganglien};
\node (n7) [above right = of n5.south east] {n7 erhohte Aktivitat im limbischen Cortexbereich};
\node (n8) [above right = of n6.south east] {n8 verringerte Fahigkeit zu Integration neuer Informationen};
\node (n9) [above right = of n7.south east] {n9 erhöhte Tendenz, an Emotionen festzuhalten};
\node (n10) [right = of n3 -| n8.east] {n10 Depressive Episode};
    \end{tikzpicture}
\end{document}

Antwort3

Mit Ihrer Hilfe – danke an AndréC, Schrödingers Katze und Zarko – sollte es jetzt so aussehen (in der Welt von Zelda sind die meisten Pfeile streng vertikal, aber das zählt nicht). Was ich brauchte, war tikzlibrary matrixund habe Folgendes behoben text width:

\begin{tikzpicture}[every node/.style = {draw, shape=rectangle,
    rounded corners, text width = 9em, inner sep = 4pt }, 
  node distance = 2em, align=left,
  mymat/.style={matrix of nodes,
    draw=none,nodes={draw,rounded corners,align=left,
      text width=6em, anchor=south},
  column 1/.style={nodes={text
        width=6em}}, row sep=2em,column sep=2em}]
  \node[anchor=center] (n1) {% n1 
    Erheblicher Stress 
    in früher Kindheit 
    oder später};
  \node[right = of n1] (n2) {% n2 
    Anpassung der 
    Ausbildung von 
    Cortisol"|rezeptoren};
  \node[right = of n2] (n3) {% n3 
    langfristig 
    erhöhte Cortisol"|freisetzung};
  \matrix[right = of n3,yshift=1.5ex, mymat] (m1) {%
    {% n4 
      langfristig 
      verminderte 
      Neuro"|genese} &
    {% n6 
      verringertes 
      Volumen von 
      Hippo"|campus und 
      Basal"|ganglien}&
    {% n8 
      verringerte 
      Fähigkeit zu 
      Integration neuer 
      Informationen}\\
    {% n5 
      verringerte 
      Serotonin"|wirkung an 
      5-HT\textsubscript{1A}-%
      Rezeptoren}&
    {% n7 
      erhöhte Aktivität 
      im limbischen 
      Cortexbereich}&
    {% n9 
      erhöhte Tendenz, 
      an Emotionen 
      festzuhalten}\\
  };
  \node[right = of m1] (n10) {% n10 
    Depressive 
    Episode};
  \draw[->] (n1) -- (n2);
  \draw[->] (n2) -- (n3);
  \draw[->] (n3) -- (m1-1-1);
  \draw[->] (n3) -- (m1-2-1);
  \draw[->] (m1-1-1) -- (m1-1-2);
  \draw[->] (m1-1-2) -- (m1-1-3);
  \draw[->] (m1-1-3) -- (n10);
  \draw[->] (m1-2-1) -- (m1-2-2);
  \draw[->] (m1-2-2) -- (m1-2-3);
  \draw[->] (m1-2-3) -- (n10);
\end{tikzpicture}

letzter Schliff

verwandte Informationen