假设我已经定义了两个节点(例如,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
周围的框下方。如果低于但您希望低于,请使用。a
b
b
a
1cm
a
west 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}