\pgfdecoratedpathlength 如何工作?

\pgfdecoratedpathlength 如何工作?

我试图了解装饰 pgf 模块的工作原理,以解决悬而未决的问题光纤式装饰

例如,我在使用某些宏时遇到了困难\pgfdecoratedpathlength。查看以下 MWE,从我在 pgfmanual 版本 2.10 上阅读的内容来看,选项 (1)、(2) 和 (3) 应该是等效的,但只有 (2) 有效,而其他选项则出现 100 个错误。

\documentclass[a4paper]{article}

\usepackage{pgf,pgfsys,pgffor}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usepgfmodule{decorations}
\usetikzlibrary{intersections,arrows,decorations,snakes}


\pgfdeclaredecoration{fiber}{initial}
{
    \state{initial}[
        switch if less than=\pgfdecoratedpathlength/2 to final %% (1)
        %width=\pgfdecoratedpathlength/2 %% (2)
        %width=.5\pgfdecoratedpathlength %% (3)
        ]{
        \pgflineto{\pgfpoint{5pt}{15pt}}
        \pgflineto{\pgfpoint{5pt}{-15pt}}
    }
    \state{final}{
        \pgfpathlineto{\pgfpointdecoratedpathlast}
    }
}

\begin{document}
\begin{tikzpicture}[decoration={fiber, amplitude=1cm}, draw=red]
\draw[->,decorate] (3, 5mm) -- ++(4,0); %% ERROR! Undefined control sequence. <argument> \pgf@decorate@width
\draw[->,decorate] (3,0)    -- ++(3,0);
\draw[->,decorate] (3,-5mm) -- ++(2,0);
\draw[->,decorate] (3,-1cm) -- ++(1,0);
\draw[->,decorate] (3,-1.5cm) -- ++(0.5,0);
\end{tikzpicture}

\end{document}

第一个错误是Undefined control sequence. <argument> \pgf@decorate@width,在第一次抽签中。有什么想法吗?

答案1

你忘了后面的逗号final。所以width=\pgfdecoratedpathlength/2被删除了,TiZ质疑为什么宽度没有定义???

下面的代码运行良好。

\documentclass[border=9,tikz]{standalone}
\usetikzlibrary{decorations}
\pgfdeclaredecoration{fiber}{initial}{
    \state{initial}[
        switch if less than=\pgfdecoratedpathlength/2 to final, %% (1)
        width=\pgfdecoratedpathlength/2 %% (2)
        ]{
        \pgflineto{\pgfpoint{5pt}{15pt}}
        \pgflineto{\pgfpoint{5pt}{-15pt}}
    }
    \state{final}{
        \pgfpathlineto{\pgfpointdecoratedpathlast}
    }
}

\begin{document}
    \begin{tikzpicture}[decoration={fiber, amplitude=1cm}, draw=red]
        \draw[->,decorate] (3, 5mm) -- ++(4,0);
    \end{tikzpicture}
\end{document}

相关内容