tikz: 노드의 너비는 맞지만 높이는 자동으로 조정됩니다.

tikz: 노드의 너비는 맞지만 높이는 자동으로 조정됩니다.

다음 코드와 같이 sth를 사용하여 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. n1다음을 사용하여 최적의 높이를 추측할 필요 없이 세 개의 노드 , n2n3모두 동일한 높이를 갖기를 원합니다.minimum height
  2. 긴 노드가 다른 세 노드의 너비에 맞도록 하고 싶지만 long노드의 높이는 그 안에 있는 텍스트에 따라 자동으로 조정되어야 합니다.
  3. 의 텍스트는 long수직으로 중앙에 정렬되어야 하지만 여기서는 그렇지 않습니다.

누구든지 이것에 대한 좋은 해결책을 가지고 있습니까?

답변1

노드 및 의 텍스트에도 fitfor n3및 를 사용하세요 .label=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={height("long")} ( calctikzlibrary에서)는 세로를 정의합니다.

더 큰 콘텐츠가 있는 노드에 대한 또 다른 솔루션은 높이를 고정하는 보조 노드와 fit이를 덮는 노드를 사용하는 것입니다. Aux 노드는 다음을 사용하여 생성할 수 있습니다.

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

여기에 이미지 설명을 입력하세요

관련 정보