Erro no cálculo do limite superior do intervalo foreach

Erro no cálculo do limite superior do intervalo foreach

Estou tentando desenhar uma seta tracejada em forma. Para fazer isso, estou trabalhando em uma macro tikz.

A rotina funciona desenhando a seta e, em seguida, desenhando alguns retângulos preenchidos em branco no topo da seta.

Quero ser capaz de lidar com setas de vários comprimentos, por isso quero calcular o número e o espaçamento dos retângulos brancos com base no comprimento.

O código funciona bem quando tenho um número para o limite superior. Mas quando faço um cálculo para o limite superior, recebo "Incomplete \iffalse; todo o texto foi ignorado".

Eu gostaria de receber qualquer ajuda que possa ser fornecida. Abaixo está o MWE.

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[x=1mm,y=1mm]
\def\w{2.5}
\def\d{.25}
\def\lt{12}
\def\la{6}
\def\s{.25}
\def\l{50}
\def\sw{1.5}
\def\dw{.65}
\def\sw{1.5}
\def\dw{.65}
\def\nd{int((\l-2*\la)/(\sw+\dw)) }
\def\intervals{\pgfmathparse{\nd}\pgfmathresult }
\def\offs{(\l-2*\la)/\nd}
\def\limit{\intervals-1}
%\def\limit{16}  % Uncomment this to see the picture I want


\draw [color=green,fill=green]
  (0,0) -- (\la+\d/2,\w/2)
  .. controls (\la+\d/4,3*\w/8) .. (\la,\s)
  .. controls (\l/2-\lt, \s) .. (\l/2,\w/2)
  .. controls (\l/2+\lt, \s) .. (\l-\la,\s)
  .. controls (\l-\la-\d/4,3*\w/8) ..(\l-\la-\d/2, \w/2)
  -- (\l,0)
  -- (\l-\la-\d/2, - \w/2)
   .. controls (\l-\la-\d/4,-3*\w/8) .. (\l-\la,-\s)
   .. controls (\l/2+\lt, -\s) .. (\l/2,-\w/2)
   .. controls (\l/2-\lt,  -\s) .. (\la,-\s)
   .. controls (\la+\d/4,-3*\w/8) .. (\la,-\w/2)
   -- cycle;

  \foreach \i in {0,1,...,\limit} {
    \fill[color=white] ( {\la+\offs*(.5+\i)-\dw/2}, {-\w/2} ) 
          rectangle ({\la+\offs*(.5+\i)+\dw/2} , \w/2 );
    }

\end{tikzpicture}
\end{document}

Responder1

Você deve usar \pgfmathsetmacro{<macro>}{<expression>}se quiser armazenar o resultado avaliado de an <expression>em a <macro>:

insira a descrição da imagem aqui

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[x=1mm,y=1mm]
\def\w{2.5}
\def\d{.25}
\def\lt{12}
\def\la{6}
\def\s{.25}
\def\l{50}
\def\sw{1.5}
\def\dw{.65}
\def\sw{1.5}
\def\dw{.65}
\def\nd{int((\l-2*\la)/(\sw+\dw)) }
\pgfmathsetmacro{\intervals}{\nd}
\pgfmathsetmacro{\offs}{(\l-2*\la)/\nd}
\pgfmathsetmacro{\limit}{\intervals-1}

\draw [color=green,fill=green]
  (0,0) -- (\la+\d/2,\w/2)
  .. controls (\la+\d/4,3*\w/8) .. (\la,\s)
  .. controls (\l/2-\lt, \s) .. (\l/2,\w/2)
  .. controls (\l/2+\lt, \s) .. (\l-\la,\s)
  .. controls (\l-\la-\d/4,3*\w/8) ..(\l-\la-\d/2, \w/2)
  -- (\l,0)
  -- (\l-\la-\d/2, - \w/2)
   .. controls (\l-\la-\d/4,-3*\w/8) .. (\l-\la,-\s)
   .. controls (\l/2+\lt, -\s) .. (\l/2,-\w/2)
   .. controls (\l/2-\lt,  -\s) .. (\la,-\s)
   .. controls (\la+\d/4,-3*\w/8) .. (\la,-\w/2)
   -- cycle;

  \foreach \i in {0,1,...,\limit} {
    \fill[color=white] ( {\la+\offs*(.5+\i)-\dw/2}, {-\w/2} ) 
          rectangle ({\la+\offs*(.5+\i)+\dw/2} , \w/2 );
    }

\end{tikzpicture}
\end{document}

informação relacionada