tikz: passende Breite des Knotens, aber automatische Höhe

tikz: passende Breite des Knotens, aber automatische Höhe

Ich möchte in Tikz ein Diagramm erstellen, indem ich etwa den folgenden Code verwende:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{positioning,fit}
\begin{document}    
%\input{content/renalBrainshake/gfx/flowchart.tikz}

\begin{tikzpicture}[every node/.style={draw, fill=blue, font=\sffamily\tiny}, align=center, node distance = 2.1cm]
    %%%%% COHORT NODES
    %% DIABETICS
    \node (n1)  []              {node1\\ line 2};
    \node (n2)  [right of = n1] {node2\\ line 2};
    \node (n3)  [right of = n2] {node3};
    \node (long)[fit   = (n1)(n3),
            above = 1cm of n1.west,
            anchor= south west, inner sep=0] {long};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Es gibt 3 Probleme:

  1. Ich möchte, dass die drei Knoten n1, n2, n3alle die gleiche Höhe haben, ohne die optimale Höhe mithilfe vonminimum height
  2. Ich möchte, dass der lange Knoten der Breite der drei anderen Knoten entspricht, aber die Höhe des longKnotens sollte automatisch dem darin enthaltenen Text entsprechen
  3. Der Text longsollte vertikal zentriert sein, aber hier ist er es nicht

Hat irgendjemand eine gute Lösung dafür?

Antwort1

Verwenden Sie fitauch für n3und label=center:textfür Text in Knoten n3und long.

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{positioning,fit}
\begin{document}    
%\input{content/renalBrainshake/gfx/flowchart.tikz}

\begin{tikzpicture}[every node/.style={draw, fill=blue, font=\sffamily\tiny}, align=center, node distance = 2.1cm]
    %%%%% COHORT NODES
    %% DIABETICS
    \node (n1)  []              {node1\\ line 2};
    \node (n2)  [right of = n1] {node2\\ line 2};
    \node (n3)  [fit= (n2), inner sep=0pt, right of = n2, label=center:node3] {};
    \node (long)[fit = (n1)(n3),
            above = 1cm of n1.west,
            anchor= south west, inner sep=0, label=center:long] {};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Aktualisieren:

Falls Sie die Höhe des longKnotens anpassen möchten, könnte eine Teillösung wie folgt aussehen:

\node (long)[fit = (n1.west)(n3.east),
        above = 1cm of n1.west,
        anchor= south west, inner xsep=0, label=center:{long}, 
        minimum height={height("long")}
        ] {};

neue fitOptionen und inner xsep=0definieren Sie seine Längsdimension und die Mindesthöhe = {height("long")} (aus calctikzlibrary) definiert die Vertikale.

Eine weitere Lösung für Knoten mit höherem Inhalt könnte die Verwendung eines Hilfsknotens sein, der die Höhe fixiert, und eines fitKnotens, der sie abdeckt. Der Hilfsknoten kann wie folgt erstellt werden:

\node (aux) [above = 1cm of n1.west, anchor=south west, fill=red!30] {long\\long\\long};

Es handelt sich um einen regulären Knoten, der an der gewünschten Stelle ( above = 1cm of n1.west, anchor=south west) platziert wird und dessen Größe so angepasst ist, dass er seinen Text aufnehmen kann.

Jetzt können wir seine Anker verwenden, um den neuen Knoten zu definieren, solange er wie die vorherigen n1, n2 und n3 ist und die Höhe an seinen Inhalt angepasst ist.

\node (long)[fit = {(n1.west|-aux.south)(n3.east|-aux.north)},
            above = 1cm of n1.west,
            anchor= south west, 
            opacity = .5, %<--- delete this line in final figure
            inner sep=-.5\pgflinewidth, label=center:{long\\ long\\ long}, 
          ] {};

Wie Sie sehen können fit = {(n1.west|-aux.south)(n3.east|-aux.north)}, inner sep=-.5\pgflinewidthist die Newsknotengröße definierbar.

Und opacity=.5wurde eingeschlossen, um auch auxden Knoten anzuzeigen. Kommentieren Sie diese Zeile aus oder löschen Sie sie, bevor Sie das Endergebnis erstellen.

Alle Anpassungsknoten im folgenden Code enthalten inner sep=-.5\pgflinewidth. Auf diese Weise fithaben die Knoten genau die Größe der referenzierten Knoten. Mit inner sep=0ptenthalten Anpassungsknoten Referenzanker innerhalb ihrer Grenzen, was bedeutet, dass die resultierenden Knoten eine halbe Zeilenbreite größer sind als die angepassten Knoten.

Der vollständige Code lautet:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{positioning,fit}
\begin{document}    
%\input{content/renalBrainshake/gfx/flowchart.tikz}

\begin{tikzpicture}[every node/.style={draw, fill=blue!50, font=\sffamily\tiny}, align=center, node distance = 2.1cm]
    %%%%% COHORT NODES
    %% DIABETICS
    \node (n1)  []              {node1\\ line 2};
    \node (n2)  [right of = n1] {node2\\ line 2};
    \node (n3)  [fit= (n2), inner sep=-.5\pgflinewidth, right of = n2, label=center:node3] {};
    \node (aux) [above = 1cm of n1.west, anchor=south west, fill=red!30] {long\\long\\long};

    \node (long)[fit = {(n1.west|-aux.south)(n3.east|-aux.north)},
            above = 1cm of n1.west,
            anchor= south west, 
            opacity = .5,
            inner sep=-.5\pgflinewidth, label=center:{long\\ long\\ long}, 
          ] {};

\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen