今天我决定尝试排版一个幽默列表,列举所有 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}