带有 +(coord) 的虚线的奇怪行为

带有 +(coord) 的虚线的奇怪行为

为什么这里第一个虚线有效\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)

相关内容