这是我目前允许在对齐的方程式之间进行分页的方法
{\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) 选择,如果忽略情况,整个方程系统跨越两页以上。