tikz: ノードの幅を合わせるが高さは自動調整

tikz: ノードの幅を合わせるが高さは自動調整

次のコードのようなものを使用して tikz で図を作成したいと思います。

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

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

問題は3つあります:

  1. 3つのノードn1、、n2n3すべて同じ高さになるようにしたいのですが、最適な高さを推測する必要はありません。minimum height
  2. 長いノードを他の3つのノードの幅に合わせたいのですが、longノードの高さはノード内のテキストに応じて自動的に設定される必要があります。
  3. テキストはlong垂直方向に中央揃えにすべきだが、ここではそうではない。

これに対する良い解決策を持っている人はいますか?

答え1

ノードおよび内のテキストにはとfitも使用します。n3label=center:textn3long

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

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

アップデート:

longノードの高さを調整したい場合、部分的な解決策は次のようになります。

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

新しいfitオプションでinner xsep=0縦方向の寸法を定義し、最小の高さ={height("long")} ( calctikzlibrary から) で垂直方向を定義します。

背の高いコンテンツを持つノードに対する別の解決策としては、高さを固定する補助ノードとそれをカバーするノードを使用することですfit。補助ノードは次のように作成できます。

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

これは、必要な場所 ( above = 1cm of n1.west, anchor=south west) に配置され、テキストが収まるようにサイズが調整された通常のノードです。

これで、アンカーを使用して、以前の n1、n2、n3 と同じ長さの新しいノードを定義し、そのコンテンツに合わせて高さを調整できるようになりました。

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

ご覧のとおりfit = {(n1.west|-aux.south)(n3.east|-aux.north)}inner sep=-.5\pgflinewidthニュース ノードのサイズを定義できます。

また、ノードopacity=.5も参照するために含まれていますaux。最終結果を生成する前に、この行をコメントアウトするか削除してください。

次のコードのすべてのフィッティング ノードには が含まれますinner sep=-.5\pgflinewidth。これにより、fitノードは参照されたノードとまったく同じサイズになります。 を使用するとinner sep=0pt、フィッティング ノードには境界内に参照アンカーが含まれるため、結果のノードはフィッティングされたノードよりも線幅の半分だけ大きくなります。

完全なコードは次のとおりです。

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

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

関連情報