다음 코드와 같이 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가지 문제가 있습니다:
n1
다음을 사용하여 최적의 높이를 추측할 필요 없이 세 개의 노드 ,n2
가n3
모두 동일한 높이를 갖기를 원합니다.minimum height
- 긴 노드가 다른 세 노드의 너비에 맞도록 하고 싶지만
long
노드의 높이는 그 안에 있는 텍스트에 따라 자동으로 조정되어야 합니다. - 의 텍스트는
long
수직으로 중앙에 정렬되어야 하지만 여기서는 그렇지 않습니다.
누구든지 이것에 대한 좋은 해결책을 가지고 있습니까?
답변1
노드 및 의 텍스트에도 fit
for n3
및 를 사용하세요 .label=center:text
n3
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}
업데이트:
노드 높이를 조정하려는 경우 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")} ( calc
tikzlibrary에서)는 세로를 정의합니다.
더 큰 콘텐츠가 있는 노드에 대한 또 다른 솔루션은 높이를 고정하는 보조 노드와 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}