如何将节点与一个节点对齐,并与另一个节点保持最小宽度?

如何将节点与一个节点对齐,并与另一个节点保持最小宽度?

假设我已经定义了两个节点(例如,A 和 B)。假设我想要第三个节点 C 位于节点 A 下方,并延伸到与节点 B 对齐。

\documentclass[tikz]{standalone}

\usetikzlibrary{positioning}
\begin{document}

\begin{tikzpicture} 
  % two example nodes, position and size do not matter: 
  \node [minimum width=2cm, minimum height=3cm, draw] (a) {A}; 
  \node [right=1cm of a, minimum width=2.5cm, minimum height=1.5cm, draw] (b) {B};

  % new node to align and size: 
  \node [below=1cm of a.south west, anchor=north west, draw,
  minimum width=5.5cm, % <--- this should not be necessary!! 
  ] (c) {C}; 
\end{tikzpicture}

\end{document}

我可以通过手动计算最小宽度来完成此操作,但这当然很丑陋。我可以定义新的坐标,如 ([yshift=-1cm]b.south east),然后进行拟合,但这也很丑陋。

是否有一种简洁、易写、易读、相对可行的方法来做到这一点?

答案1

随着ext.positioning-plus我的图书馆tikz-ext扩展包这很容易做到。

键的west below=… of <node>含义与 基本相同below=… of <node>.south west, anchor=north west。 并且-表示以下节点应水平跨越。(还有 和|+

同时使用(a)(b)意味着新节点将位于和1cm周围的框下方。如果低于但您希望低于,请使用。abba1cmawest below=… of a, span horizontal=(a)(b)

这使用了positioning库和fit库但您不需要手动加载它们。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{ext.positioning-plus}
\begin{document}
\begin{tikzpicture} 
  % two example nodes, position and size do not matter: 
  \node[minimum width=2cm, minimum height=3cm, draw]                    (a){A}; 
  \node[right=1cm of a, minimum width=2.5cm, minimum height=1.5cm, draw](b){B};

  % new node to align and size: 
  \node [west below=1cm of -(a)(b), draw] (c) {C}; 
\end{tikzpicture}
\end{document}

答案2

您可以使用let语法(需要calc库)。

在此处输入图片描述

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

\begin{document}

\begin{tikzpicture} 
  % two example nodes, position and size do not matter: 
  \node [minimum width=2cm, minimum height=3cm, draw] (a) {A}; 
  \node [right=1cm of a, minimum width=2.5cm, minimum height=1.5cm, draw] (b) {B};

  % new node to align and size: 
  \path let \p1=(a.west), \p2=(b.east) in (a) to (b) node
    [below=1cm of a.south west, anchor=north west, draw, minimum width=\x2-\x1] (c) {C}; 
\end{tikzpicture}

\end{document}

相关内容