TikZ 虚线图案与封闭路径

TikZ 虚线图案与封闭路径

我有一个简单的问题,希望得到一个简单的答案:如果虚线长度超过了路径的长度,为什么用虚线图案关闭路径不起作用?

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
 \begin{tikzpicture}
  \draw[dash pattern=on 5cm off 16cm,blue,ultra thick]
   (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
  \begin{scope}[xshift=2cm]
  \draw[blue,ultra thick]
   (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
  \end{scope}
 \end{tikzpicture} 
\end{document}

在此处输入图片描述

如果仔细观察,您会发现左侧轮廓没有闭合,即左下角“扭曲”了。尽管虚线超出了5cm路径的长度() ,但情况4cm仍然如此。为什么会这样?如何修复?

请注意,我对这种手动修复不感兴趣\draw[blue,ultra thick] (0,0) -- (1,0) -- (1,1) -- (0,1) -- (0,-\pgflinewidth/2);。不过,我也对使用装饰的解决方案感兴趣。这是因为当前的问题与这个问题很好以及下面的讨论。如果你想出一个基于装饰的解决方案,不同于这个帖子因为它不那么黑客化,更透明,而且不会把decorations 和meta decorations 以复杂的方式混合在一起,这会非常有趣,但也许更适合回答合作伙伴问题. (但是,我对纯粹的 s 解决方案不感兴趣,decoration在该解决方案中,必须以重新绘制正方形的方式“量化”步骤。)也就是说,我更喜欢对这个问题不加修饰的答案。

答案1

一种解决方案是尝试复制封闭路径,以使末端只是中间的一个普通点:(灵感来自Qrrbrbirlbel 的使用路径 TikZ 键

\documentclass[tikz,border=3.14mm]{standalone}
\makeatletter
% This assumes that every closed path starts and ends with these tokens.
% That would make sense, but I do not know if it is true
\def\helpdoublepath\pgfsyssoftpath@movetotoken#1#2#3\pgfsyssoftpath@closepathtoken#4#5{%
  \unexpanded{\pgfsyssoftpath@movetotoken{#1}{#2}#3\pgfsyssoftpath@linetotoken{#1}{#2}#3\pgfsyssoftpath@closepathtoken{#4}{#5}}%
}
\def\doublepath#1{%
  \edef#1{\expandafter\helpdoublepath#1}%
}
\tikzset{double path/.code=\tikz@addmode{\pgfsyssoftpath@getcurrentpath\temp\doublepath\temp\pgfsyssoftpath@setcurrentpath\temp}}
\makeatother
\begin{document}
 \begin{tikzpicture}
   \draw[double path,dash pattern=on 5cm off 100cm,blue,ultra thick]
   (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
  \begin{scope}[xshift=2cm]
  \draw[blue,ultra thick]
   (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
  \end{scope}
 \end{tikzpicture} 
\end{document}

在此处输入图片描述

答案2

我编写 PDF 解释器已经有一段时间了,但我相信您需要指定行上限:

  \draw[line cap = rect, dash pattern=on 5cm off 16cm,blue,ultra thick]

在此处输入图片描述

相关内容