考虑下面的简单图表,
\begin{tikzpicture}[node distance=2.5cm,main node/.style={circle,fill=white!20,draw}, scale=0.6, every node/.style={scale=0.6}]
\node[main node] [label={[label distance=1cm]30:label}] (A) {$v_1$};
\node[main node] (B) [right of=A] {$v_2$};
\node[main node] (C) [right of=B] {$v_3$};
\node[main node] (D) [right of=C] {$v_4$};
\draw
(A) -- (C)
(B) -- (C)
(B) -- (D);
\end{tikzpicture}
是否可以删除穿过节点的线(使节点内部为空)并将标签放在节点上方?
答案1
您正在从A
到画一条线C
,因此它将越过B
。如果您从 到 到 画A
一条B
线C
,则D
可以避免这种情况。
如果您所说的“标签”是指您已经添加的标签,则只需更改30
为90
(或30:
完全删除,上面是默认设置)。如果您指的是v_i
,那么也添加带有标签的标签。在最后一种情况下,您可能需要更改minimum size
节点的。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[node distance=2.5cm,main node/.style={circle,fill=white!20,draw}, scale=0.6, every node/.style={scale=0.6}]
\node[main node] [label={[label distance=1cm]90:label}] (A) {$v_1$};
\node[main node] (B) [right of=A] {$v_2$};
\node[main node] (C) [right of=B] {$v_3$};
\node[main node] (D) [right of=C] {$v_4$};
\draw (A) -- (B) -- (C) -- (D);
\end{tikzpicture}
\begin{tikzpicture}[node distance=2.5cm,main node/.style={minimum size = .7cm,circle,fill=white!20,draw}, scale=0.6, every node/.style={scale=0.6}]
\node[main node] [label={[label distance=1cm]90:label},label=$v_1$] (A) {};
\node[main node] (B) [right of=A,label=$v_2$] {};
\node[main node] (C) [right of=B,label=$v_3$] {};
\node[main node] (D) [right of=C,label=$v_4$] {};
\draw (A) -- (B) -- (C) -- (D);
\end{tikzpicture}
\end{document}
答案2
如果您想尽可能少地更改代码,可以使用该backgrounds
库。
添加\usetikzlibrary{backgrounds}
到您的序言中,并像这样更改代码(其他所有内容都相同):
\begin{scope}[on background layer]
\draw
(A) -- (D);
\end{scope}
我改变了路径(感谢 Torbjørn),因为当你重复路径时中心线变得更粗/更奇怪。
或者,您可以使用edge
曲线:
用以下方式替换您的抽签:
\draw
(A) edge[out=310,in=230,-] (C)
(B) -- (C) % you could use edge[out=0,in=180,-] but it's a straight line so that will do.
(B) edge[out=60,in=135,-] (D);
而且它得到了