对齐方程式内更复杂的分页符

对齐方程式内更复杂的分页符

这是我目前允许在对齐的方程式之间进行分页的方法

{\allowdisplaybreaks
\begin{align*}
left &= right1 \\
     &= right2.
\end{align*}}

它可以工作,但是它的行为并不像我希望的那样。

假设上述示例在页面之间换行。第一行(在第一页)将正确显示,因为它基于“left = right1”的整体居中。

然而,我希望第二行(第二页)仅相对于“= right2”居中。(默认情况下,它是居中放置的,考虑到上一页的“左边=”,这看起来不自然——这条线看起来比它应该的位置更靠右。)

我怎样才能做到这一点?

答案1

当然,David 是对的。分页是在稍后完成的,此时有关数学对齐和段落构建的决定已经完成。

以下示例可能为问题中的简化示例提供解决方案。它包含两个方程式和两个选项。方程式要么在同一页上,要么分散在两页上。此信息提供了一个参考系统。我使用的是abspage包的模块zref,因为页码应该始终是唯一的,而且它们是数字,\thepage可能是其他东西。

但标签不能立即设置。amsmath程序包设置了两次方程。在第一次运行中,它测量了方程,并在第二次运行中以正确的方程编号位置设置了方程。因此,我们需要在第二次运行中设置标签。

如果我们知道方程式的页码,我们就可以对其进行不同的设置。

\documentclass{article}
\usepackage{amsmath}
\usepackage{zref-abspage}

\makeatletter
\newcommand*{\amspagelabel}[1]{%
  \ifmeasuring@
  \else
    \zref@labelbyprops{amspg:#1}{abspage}%
  \fi
}
\newcommand*{\ifamspageequals}[2]{%
  \zref@refused{amspg:#1}%
  \zref@refused{amspg:#2}%
  \ifnum\zref@extract{amspg:#1}{abspage}=%
        \zref@extract{amspg:#2}{abspage}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}

\setlength{\textheight}{2.5\baselineskip}% for testing

\begin{document}

\allowdisplaybreaks

\ifamspageequals{A}{B}{%
  \begin{align*}
    \amspagelabel{A}
    \text{left} &= \text{right1}\\
    \amspagelabel{B}
    &= \text{right2}
  \end{align*}
}{
  \begin{gather*}   
    \amspagelabel{A}
    \text{left} = \text{right1}\\
    \amspagelabel{B}
    = \text{right2}
  \end{gather*}
}

\end{document}

然而缺点是,源代码中方程式要写两次。这不利于扩展。每增加一个方程式,选择就会增加一倍。方程式可以与前一个方程式在同一页上,也可以在新的页面上。因此 n方程需要(n-1)2个选择。

至少可以减少到(n- 1) 选择,如果忽略情况,整个方程系统跨越两页以上。

相关内容