foreach 循环中的语句顺序

foreach 循环中的语句顺序

当我在循环中处理多个语句时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}

相关内容