tikzpicture 中节点的相对水平居中

tikzpicture 中节点的相对水平居中

这是两个独立的但密切相关问题。

我有下图:

\documentclass[11pt,a4paper,oneside,notitlepage,tikz]{book}
\usetikzlibrary{positioning,fit,calc}
%...
\begin{document}
%...
\begin{tikzpicture}
\node (1) [draw,rectangle] {Social change};
\node (2) [draw,rectangle,below=of 1] {Mobilizing structures};
\node (3) [draw,rectangle,below left=of 2] {Opportunity and threat};
\node (4) [draw,rectangle,below right=of 2] {Framing processes};
\node (5) [draw,rectangle,below=of $(3)!0.5!(4)$] {Repertoires of contention};
\node (6) [draw,rectangle,below=of 5] {Contentious interaction};
\end{tikzpicture}
%...
\end{document}

在此处输入图片描述

  1. 我不需要节点 3 和 4 相距那么远,也就是说,我希望它们彼此相邻节点 2 正下方。我理解这种不良行为正是library 命令的below leftbelow right选项所导致的positioning,但不使用这些选项会导致两个节点重叠。
  2. 我希望节点 5 和 6 水平居中,就像节点 1 和 2 一样。使用calc库计算节点 3 和 4 之间的中间点($(3)!0.5!(4)$)不起作用,因为它们不对称并且它们的中间点位于中心轴的左侧。

简而言之,我正在寻找一种相对于图表的中心轴水平定位节点的方法。

答案1

我认为 atikz matrix是你的朋友。

我给矩阵取了一个名字(m),所以,如果你需要引用你的节点,你可以使用m-row_number-column_number。例如,“社会变革”节点是m-1-2

如果您想增加行之间的空间,只需更改row sep = 2ex

我绘制了具有相同宽度的所有节点,因为在我看来它们看起来更好。

\documentclass[11pt,a4paper,oneside,notitlepage]{book}
\usepackage{tikz}
\usetikzlibrary{positioning,fit, matrix}
%...
\begin{document}
%...
\begin{tikzpicture}
\matrix[matrix of nodes, nodes={draw, rectangle, text width= 12em,
text height=1.5ex, text depth=0.25ex,
align = center}, row sep = 2ex,column sep = -6em] (m) {%
& Social change \\
& Mobilizing structures \\
Opportunity and threat &&
Framing processes \\
& Repertoires of contention \\
& Contentious interaction \\
};
\end{tikzpicture}
%...
\end{document}

在此处输入图片描述

答案2

您只需要了解positioning库的工作原理。每个定位选项( )都使用要放置的节点和参考节点的left, right, above left, ...特定锚点( )。但您可以在定位选项之后使用新声明更改它们。east, west, south east,...anchor

举个例子,您的below left = of位置3.north east默认距离2.south west, but you could say左下方 = 2.south,锚点 = 北which will place3.北at a below left distance position from2.south`。

您还可以default使用两个组件定义距离(即2mm and 1cm),其中第一个组件将用于水平和垂直定位选项(左、上、...)并且两个组件都将使用水平和垂直定位选项(above right)。

通过之前的评论,我希望您能够理解下面的代码。

positioning有关图书馆的更多信息这里

\documentclass[11pt,a4paper,oneside,notitlepage]{book}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,calc}
%...
\begin{document}
%...
\begin{tikzpicture}[node distance=3mm and 1mm]
\node (1) [draw,rectangle] {Social change};
\node (2) [draw,rectangle,below=of 1] {Mobilizing structures};
\node (3) [draw,rectangle,below left=of 2.south] {Opportunity and threat};
\node (4) [draw,rectangle,below right=of 2.south] {Framing processes};
\node (5) [draw,rectangle,below left= of 4, anchor=north]  {Repertoires of contention};
\node (6) [draw,rectangle,below=of 5] {Contentious interaction};
\end{tikzpicture}
%...
\end{document}

在此处输入图片描述

相关内容