我试图在两个节点之间添加一条边,但得到了意想不到的结果。
我想在节点g
、h
和之间添加一条路径,其方式与在、和i
之间添加的方式类似。但是,当我尝试这样做时,我得到了一个意想不到的结果——路径向后而不是朝向节点:生成的最终线条显示为红色。我似乎误解了语法;请问我该如何纠正?a
b
c
h
代码:
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[node distance = 3cm, auto]
\node (a) {a};
\node [above right of=a, xshift=2cm] (b) {b};
\node [below right of=a, xshift=2cm] (c) {c};
\node [right of=b] (d) {d};
\node [above right of=d, yshift=-1cm] (e) {e};
\node [below right of=d, yshift=1cm] (f) {f};
\node [right of=e] (g) {g};
\node [above right of=g, xshift=2cm] (h) {h};
\node [below right of=g, xshift=2cm] (i) {i};
\draw (a.east) -| (45:20mm) |- (b.west);
\draw (a.east) -| (-45:20mm) |- (c.west);
% offending line
\draw[red] (g.east) -| (45:20mm) |- (h.west);;
\end{tikzpicture}
\end{document}
答案1
问题是 是(45:2mm)
绝对坐标,恰好位于 的左侧g
。在 的情况下a
,b
您c
会得到所需的结果,因为a
恰好位于(0,0)
,这是如果您未指定任何位置时使用的默认位置,因此“意外”(45:2mm)
位于 的右侧a
。可以说更简洁的方法是在所有坐标前面添加+
或++
(在这种情况下,这没有区别,因为这是路径的第二个坐标)(45:2mm)
。
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[node distance = 3cm, auto]
\node (a) {a};
\node [above right of=a, xshift=2cm] (b) {b};
\node [below right of=a, xshift=2cm] (c) {c};
\node [right of=b] (d) {d};
\node [above right of=d, yshift=-1cm] (e) {e};
\node [below right of=d, yshift=1cm] (f) {f};
\node [right of=e] (g) {g};
\node [above right of=g, xshift=2cm] (h) {h};
\node [below right of=g, xshift=2cm] (i) {i};
\draw (a.east) -| +(45:20mm) |- (b.west);
\draw (a.east) -| +(-45:20mm) |- (c.west);
% no longer offending line
\draw[red] (g.east) -| +(45:20mm) |- (h.west);;
\end{tikzpicture}
\end{document}
这样,当您决定四处走动时,就不会遇到不好的意外a
。
forest
最后我要说的是,可以使用基于 的方便地生成此类图表tikz
。
\documentclass[tikz,border=10pt]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={forked edges,text height=0.75em,text depth=0.25ex,grow'=0}
[a
[b
[d
[e
[g
[h]
[i]
]
]
[f]
]
]
[c]
]
\end{forest}
\end{document}