为什么这里第一个虚线有效\draw
,而第二个却无效?
唯一的区别是坐标(-3
而不是-2
)。
\documentclass{article}
\usepackage{tikz}
\tikzset{
mynodeok/.style={draw, font=\large,
text height=1.75ex, text depth=.5ex,
minimum height=4.5ex}
}
\begin{document}
\begin{tikzpicture}
\node[mynodeok] {p};
\node[mynodeok] (vd1) at (1,0) {vd};
\draw[dashed] (vd1.base) -- +(-3,0) -- +(1,0);
\node[mynodeok] at (0,-1) {p};
\node[mynodeok] (vd2) at (1,-1) {vd};
\draw[dashed] (vd2.base) -- +(-2,0) -- +(1,0);
\end{tikzpicture}
\end{document}
答案1
正如 StefanH 所评论的,这纯属运气不好。
默认情况下,虚线路径定义为:on 3pt off 3pt
并且此模式应用于完整路径。开启或关闭的计数从路径原点开始,到路径末端结束,无论它如何定义都无关紧要。
一个简单的例子:
\draw[dashed] (0,0) rectangle ++(18pt,18pt);
\draw[dashed] (25pt,0) rectangle ++(13pt,13pt);
生产
在左边的矩形中,由于边长是 3 的倍数,所以虚线图案是均匀的,而在右边的矩形中,您可以看到on 3pt
碎片如何从一侧开始并转弯。
这就是您的代码中发生的情况。
您定义了虚线路径,这意味着从到一个相对坐标\draw[dashed] (vd1.base) -- +(-3,0) -- +(1,0);
绘制一条虚线,然后从那里继续绘制虚线图案直到另一个相对坐标,同样从 开始。vd1.base
(-3cm,0)
(1,0)
vd1.base
在这个特殊的例子中,最左边的破折号宽度为 1.5pt,当它向右转动时,所有on
片段都高于其他片段。
在第二条路径(\draw[dashed] (vd2.base) -- +(-2,0) -- +(1,0);
)上,你就没那么幸运了。最左边的片段几乎有 3pt 宽,因此当笔向右旋转时,它会绘制,off
并且后面的on
会覆盖前一个空间。
作为解决方案,您可以按照 StefanH 的建议并绘制连续路径 (vd2.base)+(-2,0) -- +(1,0)
(下图中的红线)
\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\tikzset{
mynodeok/.style={draw, font=\large,
text height=1.75ex, text depth=.5ex,
minimum height=4.5ex}
}
\begin{document}
\begin{tikzpicture}
\node[mynodeok] {p};
\node[mynodeok] (vd1) at (1,0) {vd};
\draw[dashed] (vd1.base) -- +(-3,0) -- +(1,0);
\draw[dashed, red] ([yshift=-2pt]vd1.base) +(-3,0) -- +(1,0);
\node[mynodeok] at (0,-1) {p};
\node[mynodeok] (vd2) at (1,-1) {vd};
\draw[dashed] (vd2.base) -- +(-2,0)--+(1,0);
\draw[dashed, red] ([yshift=-2pt]vd2.base) +(-2,0) -- +(1,0);
\end{tikzpicture}
\end{document}
答案2
在节点的左侧vd
,虚线重叠。第一种情况很幸运,线条和间隙匹配,但在第二种情况下,间隙被重叠的线段填充。
坐标计算结果为:
(1, y) -- (-1 or -2, y) -- (1, y) -- (2, y)