当我在循环中处理多个语句时foreach
,LaTeX 处理语句的顺序似乎与我想象的不同。
梅威瑟:
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\pgfmathtruncatemacro{\b}{1}
\foreach \i in {1,2} {
\pgfmathtruncatemacro{\a}{\b+1}
\pgfmathtruncatemacro{\b}{\a}
\a
}
\end{document}
输出应该是 ,2 3
但是却是2 2
。该怎么做呢?
答案1
循环内的更改\foreach
是局部的,在结束时会丢失。因此\b
每次迭代开始时的值为 1。
解决这个问题的 tikz 方法是使用密钥remember
。
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\pgfmathtruncatemacro{\b}{1}
\foreach \i [remember=\b as \b] in {1,2} {
\pgfmathtruncatemacro{\a}{\b+1}
\pgfmathtruncatemacro{\b}{\a}
\a
}
\end{document}
使用键的所有选项,remember
你可以更简洁地编写代码
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\foreach \i [remember=\a as \b (initially 1)] in {1,2} {
\pgfmathtruncatemacro{\a}{\b+1}
\a
}
\end{document}
有关详细信息,请参阅 tikz 手册。
您可以绕过 tikz 并进行全局分配。请注意,\b
已在使用中,因此全局重新定义它可能会产生意想不到的副作用。
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\renewcommand\b{1}
\foreach \i in {1,2} {
\pgfmathtruncatemacro{\a}{\b+1}
\xdef\b{\a}
\a
}
\end{document}