次のコードのようなものを使用して 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つあります:
- 3つのノード
n1
、、n2
がn3
すべて同じ高さになるようにしたいのですが、最適な高さを推測する必要はありません。minimum height
- 長いノードを他の3つのノードの幅に合わせたいのですが、
long
ノードの高さはノード内のテキストに応じて自動的に設定される必要があります。 - テキストは
long
垂直方向に中央揃えにすべきだが、ここではそうではない。
これに対する良い解決策を持っている人はいますか?
答え1
ノードおよび内のテキストにはとfit
も使用します。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("long")} ( calc
tikzlibrary から) で垂直方向を定義します。
背の高いコンテンツを持つノードに対する別の解決策としては、高さを固定する補助ノードとそれをカバーするノードを使用することです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}