我想在其他两个节点下方创建一个节点,但将其恰好放置在两个节点的中间。以下是我目前所做的...
\documentclass[12pt]{article}
\thispagestyle{empty}
\usepackage{tikz}
\usepackage{amsfonts}
\begin{document}
\begin{center}
\begin{tikzpicture}[node distance=3cm]
\node (top) {$\top$};
\node (node1) [below left of=top] {\{node1\}};
\node (node2) [left of=node1] {\{node2\}};
\node (node3) [below right of=top] {\{node3\}};
\node (node4)[right of=node3] {\{node4\}};
\node (node1node2) [below right of=node2] {\{node2 , node1\}};
\node (node4node3) [below right of=node3] {\{node3, node4\}};
\node (bot) [below left of = node4node3] {$\bot$};
\draw (top) -- (node1);
\draw (top) -- (node2);
\draw (top) -- (node3);
\draw (top) -- (node4);
\draw (node4) -- (node4node3);
\draw (node3) -- (node4node3);
\draw (node2) -- (node1node2);
\draw (node1) -- (node1node2);
\draw (node1node2) -- (bot);
\draw (node4node3) -- (bot);
\end{tikzpicture}
\end{center}
\end{document}
节点“bot”几乎位于节点“node1node2”和“node3node4”的中间,但并非完全位于中间。它应该位于图片底部的中心
答案1
首先,我不确定你想要什么。我知道你想要最后一个节点“bot”位于 (node1node2) 和 (node4node3) 中间,但在此之前我想知道你是否想要一个对称图。
在这种情况下,您需要写\node (node4node3) [below left of=node4]
而不是\node (node4node3) [below right of=node3]
。
如果图是对称的,那么中间位于下方(顶部),放置(底部)没有问题。
如果图形不对称,首先可以使用 Peter 的方法和库calc
,positioning
但我认为您需要避免使用旧方法来放置节点。说明:below left of=top
您需要写而不是below left= of top
。
/tikz/above left(无值)与anchor=south east相同。请注意,同时提供above和left选项不会产生与above left相同的效果,而只有最后一个left“获胜”。实际上,此选项也接受⟨offset⟩参数,但不使用定位库使用此参数已被弃用。(定位库将此参数的含义更改为更合理的含义。)
结果不一样,因为节点距离不是节点中心之间的距离。如果想要相同的结果,则需要使用选项on grid
。
为了获取两个节点的中间,你可以避免calc
使用
\path (A) -- node [below= 3cm] {$\bot$} (B);
我的解决方案
\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}[node distance=3cm,on grid]
\draw[help lines] (-6,-9) grid (6,1);
\node (top) {$\top$};
\node (node1) [below left= of top] {\{node1\}};
\node (node2) [left= of node1] {\{node2\}};
\node (node3) [below right= of top] {\{node3\}};
\node (node4) [right= of node3] {\{node4\}};
\node (node1node2) [below right= of node2] {\{node2 , node1\}};
\node (node4node3) [below right= of node3] {\{node3, node4\}};
\path (node1node2) -- node (bot) [text=red,below=3cm] {$\bot$} (node4node3);
\draw (top) edge (node1)
edge (node2)
edge (node3)
edge (node4);
\draw (node1node2) edge (bot)
edge (node1)
edge (node2);
\draw (node4node3) edge (bot)
edge (node3)
edge (node4);
\end{tikzpicture}
\end{center}
\end{document}
使用下面的代码,图形是对称的
\begin{center}
\begin{tikzpicture}[node distance=3cm,on grid]
...
\node (node4node3) [below left= of node4] {\{node3, node4\}};
...
\end{tikzpicture}
\end{center}
没有“网格and with the default
节点距离”
\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw[help lines] (-6,-9) grid (6,1);
\node (top) {$\top$};
\node (node1) [below left= of top] {\{node1\}};
\node (node2) [left= of node1] {\{node2\}};
\node (node3) [below right= of top] {\{node3\}};
\node (node4) [right= of node3] {\{node4\}};
\node (node1node2) [below right= of node2] {\{node2 , node1\}};
\node (node4node3) [below right= of node3] {\{node3, node4\}};
\path (node1node2) -- node (bot) [text=red,below=1cm] {$\bot$} (node4node3);
\draw (top) edge (node1)
edge (node2)
edge (node3)
edge (node4);
\draw (node1node2) edge (bot)
edge (node1)
edge (node2);
\draw (node4node3) edge (bot)
edge (node3)
edge (node4);
\end{tikzpicture}
\end{center}
\end{document}
备注、补充
要将一个节点放置在两个其他节点之间,有两种方法:
1) \begin{tikzpicture}
\node (a) {a} ;
\node (b) at (4,2) {b};
\path (a) -- node {m} (b);
% or \path (a) -- (b) node[midway]{m};
% or pos =.5 instead of midway
\end{tikzpicture}
2) \begin{tikzpicture} % with calc library
\node (a) {a} ;
\node (b) at (4,2) {b};
\node at ($(a)!0.5!(b)$) {m};
\end{tikzpicture}
方法的选择取决于创建图形的方式(使用绝对坐标、使用定位库或不使用定位库、是否可以缩放、是否需要添加多个节点)
\begin{tikzpicture}
\node (a) {a} ;
\node (b) at (8,0) {b};
\path (a) -- (b) node[pos=.25]{c} node[pos=.5]{d} node[pos=.75]{e};
\end{tikzpicture}
如果你需要将节点放置在中间以下。除非你需要缩放图片,否则使用定位库会很有趣。
如果没有定位库,5 表示 5 pt in,\path (a) -- node[below=5] {m} (b);
但是有了定位库,5 表示 5 cm
如果需要缩放图片,使用 calc 库并避免定位会很有趣。例如:
\node at ($(a)!0.5!(b)+(0,-1)$) {m};
使用此方法,您可以使用scale=2
答案2
您可以使用 tikz 的calc
库来计算两个节点的中点:
\coordinate (CENTER) at ($(node1node2)!0.5!(node4node3)$);
\node (bot) [red,below of = CENTER] {$\bot$};
或者,按照 Jake 的建议,您可以使用 tikz 的positioning
库(与 calc 对齐)库,这样您就不需要创建临时坐标了:
\node (bot) [red,below = of $(node1node2)!0.5!(node4node3)$] {$\bot$};
代码:
\documentclass[12pt]{article}
\thispagestyle{empty}
\usepackage{tikz}
\usepackage{amsfonts}
\usetikzlibrary{calc,positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}[node distance=3cm]
\node (top) {$\top$};
\node (node1) [below left of=top] {\{node1\}};
\node (node2) [left of=node1] {\{node2\}};
\node (node3) [below right of=top] {\{node3\}};
\node (node4)[right of=node3] {\{node4\}};
\node (node1node2) [below right of=node2] {\{node2 , node1\}};
\node (node4node3) [below right of=node3] {\{node3, node4\}};
\node (bot) [red,below = of $(node1node2)!0.5!(node4node3)$] {$\bot$};
\draw (top) -- (node1);
\draw (top) -- (node2);
\draw (top) -- (node3);
\draw (top) -- (node4);
\draw (node4) -- (node4node3);
\draw (node3) -- (node4node3);
\draw (node2) -- (node1node2);
\draw (node1) -- (node1node2);
\draw (node1node2) -- (bot);
\draw (node4node3) -- (bot);
\end{tikzpicture}
\end{center}
\end{document}