看起来 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}
输出如下