foreach範圍上限計算錯誤

foreach範圍上限計算錯誤

我正在嘗試繪製一個虛線形狀的箭頭。為了做到這一點,我正在開發 tikz 巨集。

例程的工作原理是繪製箭頭,然後在箭頭頂部繪製一些白色填充的矩形。

我希望能夠處理各種長度的箭頭,所以我想根據長度計算白色矩形的數量和間距。

當我有一個上限數字時,程式碼運作得很好。但是當我計算上限時,我得到“不完整\iffalse;所有文字都被忽略”。

我歡迎您提供任何幫助。下面是 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}

答案1

\pgfmathsetmacro{<macro>}{<expression>}如果您想將 an 的評估結果儲存<expression>在 a 中,則應該使用<macro>

在此輸入影像描述

\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}

相關內容