我想画一棵水平树。简化版本有一个父节点和两个子节点,子节点之间通过贝塞尔曲线与其父节点相连。
现在我有这个:
\documentclass[a4]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[inner sep = 1mm]
\pgfsetcornersarced{\pgfpoint{1mm}{1mm}};
\node (n1) at (30mm, 0) [rectangle, draw] {First Child};
\node (n2) at (30mm, 10mm) [rectangle, draw] {Second Child};
\node (n3) at (0, 5mm) [rectangle, draw] {Parent};
% \draw (n3.east) .. controls +(((n3.east.x + n1.west.x)/2, n3.east.y)) and +(((n3.east.x + n1.west.x)/2, n1.west.y)) .. (n1.west);
\end{tikzpicture}
\end{document}
我有一些疑问:
节点 n1 和 n2 是居中对齐的。如何将它们左对齐?
注释掉的那行是画一条连接n3和n2的贝塞尔曲线,我想计算出两个特定位置的中间位置,但是不知道怎么做。
如何知道文本和整个节点的精确边界框?我希望他们做额外的计算和绘图。
答案1
这是你想要的吗?
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[declare function={a=.5;}]
\path[nodes={draw,rounded corners,inner sep=1.5mm}]
(0,0) node[fill=orange!50] (P) {Parents}
(2,-a) node[right,fill=yellow!50] (C1) {First Child}
(2,a) node[right,fill=yellow!50] (C2) {Second Child}
;
\draw[->] (P) to[out=0,in=180] (C1);
\draw[->] (P) to[out=0,in=180] (C2);
\end{tikzpicture}
\end{document}
您可能喜欢使用controls
来控制shooting forces
\draw[->] (P.0) .. controls +(0:1.2) and +(180:1.2) .. (C1.180);
\draw[->] (P.0) .. controls +(0:1.2) and +(180:1.2) .. (C2.180);
或者这个(M
中间)
\path (P.0)--(P-|C1.180) coordinate[midway] (M);
\draw[-stealth] (P.0)--(M)|-(C1.180);
\draw[-stealth] (P.0)--(M)|-(C2.180);