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}
Es gibt 3 Probleme:
- Ich möchte, dass die drei Knoten
n1
,n2
,n3
alle die gleiche Höhe haben, ohne die optimale Höhe mithilfe vonminimum height
- Ich möchte, dass der lange Knoten der Breite der drei anderen Knoten entspricht, aber die Höhe des
long
Knotens sollte automatisch dem darin enthaltenen Text entsprechen - Der Text
long
sollte vertikal zentriert sein, aber hier ist er es nicht
Hat irgendjemand eine gute Lösung dafür?
Antwort1
Verwenden Sie fit
auch für n3
und label=center:text
für Text in Knoten n3
und 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}
Aktualisieren:
Falls Sie die Höhe des long
Knotens 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 fit
Optionen und inner xsep=0
definieren Sie seine Längsdimension und die Mindesthöhe = {height("long")} (aus calc
tikzlibrary) 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 fit
Knotens, 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\pgflinewidth
ist die Newsknotengröße definierbar.
Und opacity=.5
wurde eingeschlossen, um auch aux
den 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 fit
haben die Knoten genau die Größe der referenzierten Knoten. Mit inner sep=0pt
enthalten 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}