我试图了解装饰 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
被删除了,Ti钾Z质疑为什么宽度没有定义???
下面的代码运行良好。
\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}