这是两个独立的但密切相关问题。
我有下图:
\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}
- 我不需要节点 3 和 4 相距那么远,也就是说,我希望它们彼此相邻节点 2 正下方。我理解这种不良行为正是library 命令的
below left
和below right
选项所导致的positioning
,但不使用这些选项会导致两个节点重叠。 - 我希望节点 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 place
3.北at a below left distance position from
2.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}