自动跨越多个较小块的块宽度

自动跨越多个较小块的块宽度

给出以下代码:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzstyle{block} = [draw, rectangle, minimum height=3.5em, minimum width=4.5em]

\begin{document}
\begin{tikzpicture}
\node [block,align=center](a) {A};
\node [block,align=center,right=1cm of a](b) {B};
\node [block,align=center,below=1cm of a](c) {C};
\end{tikzpicture}
\end{document}

我希望位于 A 和 B 块下方的 C 块能够自动采用 A 和 B 块跨度的宽度。我希望它看起来像这样:

在此处输入图片描述

如何在不手动设置 C-Block 宽度的情况下实现这一点?

答案1

您可以使用calcTikZ 库。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,positioning}
\tikzstyle{block} = [draw, rectangle, minimum height=3.5em, minimum width=4.5em]

\begin{document}
\begin{tikzpicture}
\node [block,align=center](a) {A};
\node [block,align=center,right=1cm of a](b) {B};
\path
  let \p0 = (a.south west),
      \p1 = (b.south east),
      \p2 = ($ (\p0)!.5!(\p1) $)
  in
    node [block, below=1cm of \p2, minimum width=\x1-\x0] (c) {C};
\end{tikzpicture}
\end{document}

路径命令let允许您通过 定义点\p{name} = ...和 通过 定义数字\n{name} = ...,您可以在操作内部引用这些数字let(此处为node)。如果您有一个像 这样的点\p0,那么您可以将它的组件引用为\x0\y0

对于\p2,我使用了calc库的另一个功能,即所谓的“部分修饰符”。表示和(\p0)!.5!(\p1)之间的中点\p0\p1pgf 手册有这两者的全部细节。

请注意大概使用\tikzset而不是\tikzstyle

答案2

另一个解决方案是使用fit节点。在这种情况下,必须将节点内容添加为中心label(如第 57 节:Fitting 库中所述)

有时我们会忘记fit适合节点的列表只是用来固定其大小,但其位置并不局限于适合节点周围。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning, fit}
\tikzstyle{block} = [draw, rectangle, minimum height=3.5em, minimum width=4.5em]

\begin{document}
\begin{tikzpicture}
\node [block,align=center](a) {A};
\node [block,align=center,right=1cm of a](b) {B};
\node [block, fit= (a) (b), inner sep=-.5\pgflinewidth, below right=1cm and 0 of a.south west, label=center:C](c) {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容