TikZ 线条虚线图案,自适应线条长度

TikZ 线条虚线图案,自适应线条长度

我正在用 TikZ 画一条弯曲的线,比如说使用

\draw (0,0) to[out=-45, in=-135] (0,5);

有没有办法定义虚线图案,使得该弧的前三分之一完全存在,后三分之一为虚线,最后三分之一不可见?换句话说,虚线图案是否可以以某种方式取决于线的长度?

对于直线,我可以想象一种解决方法,只需将线分成三部分,但在这种情况下这(至少对我来说)实际上是不可能的。

答案1

您可以使用装饰来获得所需的结果。

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{decorations.pathmorphing}
\tikzset{
  every curvepart/.style={},
  curvepart/.style n args={3}{
    postaction={black,every curvepart,#1, decorate,
      decoration={curveto,
        pre=moveto, pre length=#2*\pgfdecoratedinputsegmentlength,
        post=moveto, post length=(1-#3)*\pgfdecoratedinputsegmentlength
  }}}
}

\begin{document}
\begin{tikzpicture}
  \path[
    every curvepart/.style={draw,very thick},
    curvepart={solid}{0}{1/3},
    curvepart={dashed}{1/3}{2/3},
  ](0,0) to[out=-45, in=-135](0,5);
\end{tikzpicture}
%
\begin{tikzpicture}
  \path[draw,orange!25,line width=4pt,
    every curvepart/.style={draw,very thick},
    curvepart={solid,purple}{0}{1/3},
    curvepart={dashed,green}{1/3}{2/3},
    curvepart={dotted,blue}{2/3}{1}
  ](0,0) to[out=-45, in=-135](0,5);
\end{tikzpicture}
%
\begin{tikzpicture}
  \path[draw,orange!25,line width=4pt,
    every curvepart/.style={draw,dashed,very thick},
    curvepart={purple}{.1}{.2},
    curvepart={blue}{.5}{.6},
    curvepart={}{.9}{1},
    curvepart={green}{.3}{.4},
    curvepart={orange!80!black}{.7}{.8}
  ](0,0) to[out=-45, in=-135](0,5);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容