给出以下代码:
\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
您可以使用calc
TikZ 库。
\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
\p1
。pgf 手册有这两者的全部细节。
请注意大概使用\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}