TikZ中双线的两个问题

TikZ中双线的两个问题

使用 TikZ 几个星期以来,我仍然被其丰富的功能和完美的输出所折服。然而,我有两个与双线相关的问题,参见源代码和提供的图像:

\documentclass[tikz, border = 2mm]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
  \tikzset{myarrow/.style={
    arrows={-Implies},
    double,
    double distance = 0.3cm
  }}
  \begin{tikzpicture}
    \fill [orange!30] (2,0) rectangle (6,4);
    \draw [orange] (0,0) rectangle (6,4);
    \draw[myarrow] (1,1) -- (5,3);
    \draw[myarrow] (4,1) -- (1,3);
  \end{tikzpicture}
\end{document}

pdf 输出为 png 图像

(1)双线的输出实际上是一个矩形,其中有两条非常细的黑线或灰线(这显然是不可取的)。这可能是由于数值不稳定性造成的。

(2)双线之间的白色区域覆盖了其后面的所有内容。因此两条双线无法相交,因此所有黑线都保持完全可见。

奇怪的是,这种行为在整个网络上随处可见,但似乎没有人关心甚至提及这一点。

有没有办法只用一个“隐含”箭头和两条直线(中间没有任何中间线)来绘制“隐含”箭头?这样 (1) 数值稳定,并且 (2) 在相交方面表现得像纸上的墨水。

答案1

一种可能的不同方法是使用自定义的to path。下面的实现非常不灵活,依赖于硬编码值。因此,这可能不是一个很好的解决方案,尽管它可能很有趣。

所有坐标均使用以下语法找到calc,如第 13.5 节所述坐标计算TikZ 手册(针对版本 3.0.1a)。

代码输出

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
  Double/.style={
    to path={
      % left leg
      ($(\tikztostart)!2pt!90:($(\tikztotarget)!5pt!(\tikztostart)$)$) -- ($($(\tikztotarget)!3.5pt!(\tikztostart)$)!2pt!270:(\tikztostart)$)
      % right leg
      ($(\tikztostart)!2pt!270:($(\tikztotarget)!4pt!(\tikztostart)$)$) -- ($($(\tikztotarget)!3.5pt!(\tikztostart)$)!2pt!90:(\tikztostart)$)
      % arrow head
      ($($(\tikztotarget)!5pt!(\tikztostart)$)!4pt!90:(\tikztostart)$) 
       .. controls
          ($($(\tikztotarget)!3pt!(\tikztostart)$)!0.5pt!90:(\tikztostart)$) and
          ($(\tikztotarget)!1pt!(\tikztostart)$)
       .. (\tikztotarget) 
       .. controls
          ($(\tikztotarget)!0.5pt!(\tikztostart)$) and
          ($($(\tikztotarget)!3pt!(\tikztostart)$)!1pt!270:(\tikztostart)$) 
       ..
     ($($(\tikztotarget)!5pt!(\tikztostart)$)!4pt!270:(\tikztostart)$)
    }
  }
]

\fill [blue!10] (-1,-1) rectangle (2,2);
\draw [help lines] (-1,-1) grid (2,2);
\draw (0,0) to[Double] (1,1);
\draw (1,0) to[Double] (0,1);
\draw (0.5,1) to[Double] (0.5,0);
\draw (0,0.5) to[Double] (1,0.5);
\end{tikzpicture}
\end{document}

相关内容