在数学环境中使用 pgffor 和换行符

在数学环境中使用 pgffor 和换行符

今天我决定尝试排版一个幽默列表,列举所有 7 个!7 维积分的有效迭代积分(在编译版本中需要 361 页)但当我尝试添加最后一点润色时,我遇到了非常无用的错误。我学会了如何使用 pgffor 来生成排列,但尝试运行具有良好对齐的代码会破坏它。

由于 7 个变量的代码有点难以处理,我在这里重现了两个变量的情况。这是有效的:

\documentclass{article}
\usepackage{pgffor}
\usepackage{amsmath}

\newcommand*\diff{\mathop{}\!d}
\begin{document}
\begin{equation}
  \iint_B f(x, y)
  \foreach \a/\b/\x in {a/b/x, c/d/y}
  \foreach \c/\d/\y in {a/b/x, c/d/y}
           {
             \ifx \y \x \else
             = \int_\a^\b \int_\c^\d f(x, y) \diff\x \diff\y
             \fi
           }
\end{equation}
\end{document}

但当然,它们都在一行上。如果我\\在 的末尾添加\int_\a^\b \int_\c^\d f(x, y) \diff\x \diff\y,它实际上并没有换行,因为equation不支持多行方程。以下是让我感到困惑的地方:

如果我将环境更改为,multline我会收到一堆错误,以

! Missing \endgroup inserted.

如果我将环境更改为 AMSMath,align那么我会得到相当相似的

! Extra }, or forgotten \endgroup.

如果我添加&不带换行符的对齐(以防止其他错误)则会出现以下错误:

! Incomplete \ifx; all text was ignored after line 16.

我该如何结合使用 pgffor、amsmath 的align环境和对齐/换行命令?更一般地说,为什么 pgffor 不能与这些宏很好地配合使用?

答案1

在有表格环境和 for 结构的情况下,扩展顺序比较难控制。不过可以先将内容写入单独的文件,然后立即输入。这样扩展顺序就比较明确了。

\documentclass{article}
\usepackage{pgffor,newfile}
\usepackage{amsmath}
\begin{document}

\newcommand*\diff{\mathop{}\!d}
\newoutputstream{factorial}
\openoutputfile{\jobname.factorial}{factorial}
    \addtostream{factorial}{
        \iint_B f(x, y)
    }
    \foreach \a/\b/\x in {a/b/x, c/d/y}{
        \foreach \c/\d/\y in {a/b/x, c/d/y}{
            \ifx \y \x \else
                \addtostream{factorial}{
                    = \protect\int_\a^\b \protect\int_\c^\d f(x, y) \diff\x \diff\y \\
                }
            \fi
        }
    }
\closeoutputstream{factorial}

\begin{align*}
    \input{\jobname.factorial}
\end{align*}

\end{document}

相关内容