tikzlibrary の「配置」を使用して (複数行テキスト) ノードを整列します

tikzlibrary の「配置」を使用して (複数行テキスト) ノードを整列します

テキスト ボックスと座標に移る前に、tikzlibrary だけでどこまでできるかを知りたいですpositioning

  1. サンプルでは、​​ボックスの下の行n4n6およびn8が揃う必要があります。p(そうであるように思われますが、とによって生じるわずかな高さ/深さの追加はg問題ではありません)n5n7および も同様ですn9
  2. さらに、の左の境界線n4は、n5 (すでにそうなっている)、同様にn6-n7 (のようにn7node[right = of n5, below = of n6そしてn8-n9
  3. n10と同じ高さにする必要がありますn3
  4. 多少低くしてn5も問題ありませんが、私はそうしていません。

これのいくつかを で達成できますか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}

最後の仕上げが足りない

答え1

だけで目的の配置を実現できるかどうかを尋ねていますpositioning。答えはイエスですが、私の意見では、それはあなたの人生を不必要に複雑にします。matrixこれに加えてライブラリを使用すると、物事ははるかに簡単になります。すると、目的の配置は、ノード アンカーを持つマトリックスになりますsouth。これにより、必要な調整が大幅に減り (text widths手動での改行にこだわる場合は、列依存にする必要があるだけです)、出力も私の意見ではより説得力のあるものになります。

\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}

ここに画像の説明を入力してください

付録: 楽しみのためだけに: マトリックス ノード間の水平矢印を自動的に描画するスタイルmatrix horizontal arrows。(垂直矢印のスタイルも完全に類似しています。)

\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}

ここに画像の説明を入力してください

答え2

このような?

ここに画像の説明を入力してください

これには、コードへの手動介入が必要です。

\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}

ただし、以下の質問に対する @AndréC のコメントを考慮すると、コードは非常にシンプルになります。

編集: あなたのコメントに関して、次のノード配置設計を探しているようです:

ここに画像の説明を入力してください

そのためには、コードを少し変更する必要があります:

\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}

答え3

皆さんの助けのおかげで、AndréC、シュレディンガーの猫、Zarko のおかげで、このように見えるはずです (ゼルダの世界では、矢印の多くは厳密に垂直ですが、これはカウントされません)。必要なのは tikzlibrarymatrixと修正です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}

最後の仕上げ

関連情報