仅适合节点的高度

仅适合节点的高度

我一直在尝试获取fitTikZ 中的键来缩放节点,以便它仅匹配其适合节点的高度,但我没有成功。我试图让红色框的大小与蓝色框的大小相同:

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}

\usetikzlibrary{positioning,fit}
\newcommand{\filler}[1]{\begin{minipage}{12cm}\small\lipsum[#1]\end{minipage}}
\thispagestyle{empty}

\begin{document}

\begin{tikzpicture}[node distance=0pt,outer sep = 2pt, text centered]
\tikzstyle{box}=[rectangle,draw,inner sep=0em]

\tikzstyle{vline}=[box, rotate=90, fill=red!20, minimum height=1cm]
\tikzstyle{hline}=[box, fill=blue!20, minimum width=10cm]

\node[vline] (a) at (0,0) {\textbf{How do I extend this node to fit?}};
\node[hline] (b1) [below right = of a.south east] {\filler{1}};
\node[hline] (b2) [below = of b1] {\filler{2}};
\node[hline] (b3) [below = of b2] {\filler{3}};
\end{tikzpicture}

\end{document}

问题:对于节点a,如何保持 x 维度固定,而 y 维度缩放至节点的高度(b1,b2,b3)

答案1

在此处输入图片描述

\documentclass[border=5]{standalone}
\usepackage{tikz}
\usepackage{lipsum}

\usetikzlibrary{positioning,fit}
\newcommand{\filler}[1]{\small\lipsum[#1]}
\thispagestyle{empty}

\begin{document}

\begin{tikzpicture}[node distance=2pt,align = justify]
\tikzset{
box/.style={rectangle,draw,inner sep=0em},
vline/.style={box, fill=red!20, align=center},
hline/.style={box, fill=blue!20, text width=12cm}
}

\node[hline] (b1) {\filler{1}};
\node[hline] (b2) [below = of b1] {\filler{2}};
\node[hline] (b3) [below = of b2] {\filler{3}};

\coordinate [left=12pt of b1.north west] (top);
\coordinate [left=12pt of b3.south west] (bottom);

\node[vline, minimum width=10pt,fit=(top)(bottom), 
    label={[rotate=90]center:\textbf{How do I extend this node to fit?}}] (a) {};
\end{tikzpicture}

\end{document}

概括

  • 我从你的宏中删除了minipage环境并在你的选项中替换为,因为这会产生相同的效果。\fillertext centeredtext justifiedtikzpicture
  • 我将其替换node distance=0ptnode distance=2pt
  • coordinatestopbottom被定义为与fit节点选项一起使用。现在,节点a不再b1根据节点定位,而是根据节点和使用库来定位。aab1b3fit更新coordinates:对于 ,使用两个就足够了,fit因为节点(a)只会在两个坐标和这两个点之间定义的任何坐标周围创建一个边界框。只要坐标对齐,这样做没有坏处,因为坐标理论上是无量纲的。至于 节点10pt的宽度(a),我认为这就是你想要的;如果不是,你可以将其更改为你喜欢的尺寸:)
  • a使用该选项可以解决节点文本旋转的问题label更新:需要解决方法,因为使用此解决方案,rotate=90直接在节点选项中执行操作将旋转节点形状和文本。

更新

  • 我已将Gonzalo 的回答中的旧\tikzstyle内容替换为。\tikzset

答案2

这是不使用fit库或额外坐标的另一种选择。我使用let语法来计算节点所需的长度;我还将旧\tikzstyle语法更改为新语法\tikzset

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\usepackage{lipsum}

\newcommand{\filler}[1]{{\small\lipsum[#1]}}

\begin{document}

\begin{tikzpicture}[node distance=2pt,align=justify]
\tikzset{
box/.style={rectangle,draw},
vline/.style={box, fill=red!20,align=center,minimum height=1cm,rotate=90},
hline/.style={box, fill=blue!20, text width=12cm}
}

\node[hline] (b1) {\filler{1}};
\node[hline] (b2) [below = of b1] {\filler{2}};
\node[hline] (b3) [below = of b2] {\filler{3}};

\path let \p1 = (b1.north), \p2 = (b3.south) in 
  node[vline,inner xsep=0pt,text width=\y1-\y2-\pgflinewidth,anchor=south east] 
  at ([xshift=-2pt]b1.north west) {some text here};
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

另一个解决方案。它也使用fittikzlibrary,但不需要额外的coordinatestikzlibrary calc

\node[vline, minimum width=1cm,
    fit=(b1.north)(b3.south), 
    label={[rotate=90]center:\textbf{How do I extend this node to fit?}}, 
    left=of b1.north west, anchor=north east] (a) {};

声明一个节点,其高度包括b1.northb3.south,并且其右上角 ( anchor=north east) 位于node distance处。声明之后b1.north west很重要,因为最后一个选项将锚点固定到。anchorleft=ofeast

\documentclass[border=5]{standalone}
\usepackage{tikz}
\usepackage{lipsum}

\usetikzlibrary{positioning,fit}
\newcommand{\filler}[1]{\small\lipsum[#1]}
\thispagestyle{empty}

\begin{document}

\begin{tikzpicture}[node distance=2pt,align = justify]
\tikzset{
box/.style={rectangle,draw,inner sep=0em},
vline/.style={box, fill=red!20, align=center},
hline/.style={box, fill=blue!20, text width=12cm}
}

\node[hline] (b1) {\filler{1}};
\node[hline] (b2) [below = of b1] {\filler{2}};
\node[hline] (b3) [below = of b2] {\filler{3}};

%\coordinate [left=12pt of b1.north west] (top);
%\coordinate [left=12pt of b3.south west] (bottom);

\node[vline, minimum width=10pt, 
    fit=(b1.north)(b3.south), 
    label={[rotate=90]center:\textbf{How do I extend this node to fit?}}, 
    left=of b1.north west, anchor=north east, minimum width=1cm ] (a) {};
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容