编辑:

编辑:

该包的文档stanli可以在这里找到:/https://mirror.hmc.edu/ctan/graphics/pgf/contrib/stanli/stanli.pdf

弹簧设计的文档可以在这里找到:tikz:设置弹簧

我有一个直接的问题:

\support{5}{b}包中的命令:stanli可以引入带支撑的弹簧。我想要两个节点之间的弹簧。如何扩展stanli包来编码弹簧?

根据以下一个答案中的建议,我提出了:

%preamble definition 
\makeatletter 
\newcommandx{\nodespring}[2][]{%
    \begin{scope}[rotate around={#2:(#1)}]
        \draw [spring] (#1) -- (#2);
\end{scope}}
\makeatother 

但在实施过程中:

\begin{tikzpicture}
\point{a}{0}{0}
\point{b}{5}{0}
\nodespring{a}{b}
\end{tikzpicture}

我收到一个错误:

Package PGF Math Error: Unknown function `b' (in 'b'). \nodespring{a}{b}

答案1

编辑:

两个节点之间的弹簧

stanli包定义了一种具有装饰的线型zigzag,并将其称为。但是,除非重新定义宏、、和spring,否则此样式不可“自定义” 。\springPreLength\springPostLength\springSegmentLength\springAmplitude

如果我们重新定义样式并为其添加参数,这可能没有什么坏处:

\tikzstyle{spring} = [
  normalLine,
  decoration=
    {
      zigzag,
      pre length=\springPreLength,
      post length=\springPostLength,
      segment length=\springSegmentLength,
      amplitude=\springAmplitude,
      #1
    },
    decorate,
]

然后创建一个使用这种样式的命令:

\newcommandx{\spring}[3][3=]{%
  \begin{scope}
    \draw [spring={#3}] (#1) -- (#2);
  \end{scope}}

你只要把这些放在你的序言里你加载stanli

现在我们可以替换任何梁,例如,\beam{2}{g}{h};\spring{g}{h};。我们还可以向命令添加可选参数\spring来更改其外观:\spring{g}{h}[amplitude=1mm];

按照文档中的示例结构执行此操作:

在此处输入图片描述

上一个答案:

包中 spring 的定义是:

  \begin{scope}[rotate around={#3:(#2)}]
    \draw [spring] (#2) -- ++(0,-\springLength);
    \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\springLength)$) -- ++(-\supportBasicLength,0);
    \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\springLength)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\springLength)$);
    \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\springLength)$) -- ++(-\supportHatchingLength,0);
  \end{scope}

我们需要的“自由弹簧”部分只是第一行,因此我们可以创建一个命令:

\newcommandx{\freespring}[2][2=0]{%
  \begin{scope}[rotate around={#2:(#1)}]
    \draw [spring] (#1) -- ++(0,-\springLength);
  \end{scope}}

并使用 as \freespring{b};,或者我们可以修补\support命令以添加新类型:

\usepackage{etoolbox}
\expandafter\apptocmd\csname\string\support\endcsname
  {\ifthenelse{\equal{#1}{7}}{%
    \begin{scope}[rotate around={#3:(#2)}]
      \draw [spring] (#2) -- ++(0,-\springLength);
    \end{scope}
  }{}%
  }%
  {}{}

可用作\support{7}{b};。 两者都给出相同的结果。 文档封面中的图片变为:

在此处输入图片描述

相关内容