tikz: ancho de ajuste del nodo pero altura automática

tikz: ancho de ajuste del nodo pero altura automática

Quiero crear un diagrama en tikz usando algo como el siguiente código:

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

ingrese la descripción de la imagen aquí

Hay 3 problemas:

  1. Quiero que los tres nodos n1, n2todos n3tengan la misma altura, sin tener que adivinar la altura óptima usandominimum height
  2. Quiero que el nodo largo se ajuste al ancho de los otros tres nodos, pero la altura del longnodo debe ser automática según el texto que contiene.
  3. El texto longdebe estar centrado verticalmente, pero aquí no está

¿Alguien tiene una buena solución para algo de esto?

Respuesta1

Úselo fittambién para n3y label=center:textpara texto en nodos n3y 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}

ingrese la descripción de la imagen aquí

Actualizar:

En caso de que desee ajustar la altura del longnodo, una solución parcial podría ser:

\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")}
        ] {};

nuevas fitopciones y inner xsep=0define su dimensión longitudinal y altura mínima={height("long")} (de calctikzlibrary) define la vertical.

Otra solución para nodos con contenidos más altos podría ser utilizar un nodo auxiliar que fije la altura y un fitnodo que la cubra. El nodo auxiliar se puede crear con:

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

Es un nodo normal que se coloca donde queramos ( above = 1cm of n1.west, anchor=south west) y con el tamaño ajustado para contener su texto.

Ahora podemos usar sus anclajes para definir el nuevo nodo siempre que los anteriores n1, n2 y n3 y ajustar la altura a su contenido.

\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}, 
          ] {};

Como puede ver fit = {(n1.west|-aux.south)(n3.east|-aux.north)}y inner sep=-.5\pgflinewidthdefinir el tamaño del nodo de noticias.

Y opacity=.5se ha incluido para ver también auxel nodo. Comente esta línea o elimínela antes de producir el resultado final.

Todos los nodos de ajuste en el siguiente código incluyen inner sep=-.5\pgflinewidth. De esta forma, fitlos nodos tendrán el tamaño exacto de los referenciados. Con inner sep=0pt, los nodos ajustados incluyen anclajes de referencia dentro de sus bordes, lo que significa que los nodos resultantes tienen un ancho de línea medio mayor que los ajustados.

El código completo es:

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

ingrese la descripción de la imagen aquí

información relacionada