长度和 for 循环

长度和 for 循环

看起来 for 循环中长度没有更新。编译以下代码:

\documentclass{article}
\usepackage{tikz}
\newlength{\test}
\newcommand{\inc}{\addtolength{\test}{1cm}}
\newcommand{\incs}{\foreach \x in {1,2,3} {\addtolength{\test}{1cm}}}

\begin{document}

Test: .\hspace{\test}.

\inc

Test: .\hspace{\test}.

\setlength{\test}{0cm}

\incs

Test: .\hspace{\test}.

\end{document}

我们期待看到

测试:..
测试:.--.
测试:.------.

但最后一行显示

测试: ..

这有点烦人,因为每次我在 for 循环中调用一个函数时,我都想使用浮点数来记住 TikZ 图片。


编辑 我想编写分段函数的代码。以下是我所拥有的

\documentclass[12pt]{article}
\usepackage{tikz}

\newlength{\currX}
\setlength{\currX}{0mm}
\newlength{\currY}
\setlength{\currY}{0mm}
\newcommand{\drawbar}[2]{
  \draw (\currX,\currY) -- (\currX,\currY+{#2}) -- (\currX+{#1},\currY+{#2});
  \global\addtolength{\currX}{#1}
  \global\addtolength{\currY}{#2}
 }
\newcommand{\drawbars}[1]{
  \foreach \x/\y in {#1}{
   \drawbar{\x}{\y}
   }
  }

\begin{document}

\begin{figure}
  \begin{tikzpicture}
    \drawbar{2mm}{4mm}
    \drawbar{20mm}{40mm}
  \end{tikzpicture}
\end{figure}

\begin{figure}
  \begin{tikzpicture}
    \drawbars{2mm/4mm, 20mm/40mm}
  \end{tikzpicture}
\end{figure}

\end{document}

我收到一个编译错误:

You can't use a prefix with `\begingroup'.
<to be read again> 

\begingroup 

l.23     \drawbar{2mm}{4mm}

编辑2

第二个问题其实和 TikZ,foreach 和 sum

在我上面的更具体的例子中,按照建议使用 global 前缀无法编译,但上述解决方案效果很好。

答案1

这些命令\addtolength和相关长度宏调整器的设计目的是在本地运行。您可以将其设置为全局,但我不确定这是否是好方法。

\documentclass{article}
\usepackage{pgffor}

\newlength{\test}
\newcommand{\inc}{\addtolength{\test}{1cm}}
\newcommand{\incs}[1]{\foreach \x in {1,...,#1} {\global\addtolength{\test}{1cm}} }

\begin{document}
\the\test
\inc

\the\test
\setlength{\test}{0cm}

\the\test

\incs{5}
\the\test

\setlength{\test}{0cm}
\incs{3}
\the\test
\end{document}

在此处输入图片描述

您还可以检查这个问题进行类似的查询。


对于已编辑的问题

以下内容适用于您问题的编辑版本。

\documentclass[12pt]{article}
\usepackage{tikz}
\newlength{\currX}\setlength{\currX}{0mm}
\newlength{\currY}\setlength{\currY}{0mm}
\newcommand{\drawbar}[2]{
  \draw (\currX,\currY) -- (\currX,\currY+#2) -- (\currX + #1,\currY+ #2);
    \global\advance \currX by #1
    \global\advance \currY by #2
 }
\newcommand{\drawbars}[1]{\foreach \x/\y in #1{\drawbar{\x}{\y}}}
\begin{document}
\begin{figure}
  \begin{tikzpicture}
    \node at (0,0){O};
    \drawbar{2mm}{4mm}
    \drawbar{20mm}{40mm}
  \end{tikzpicture}
\end{figure}
\begin{figure}
  \begin{tikzpicture}
    \node at (0,0){O};
    \drawbars{{2mm/4mm, 10mm/20mm}}
  \end{tikzpicture}
\end{figure}
\end{document}

输出如下

在此处输入图片描述

相关内容