当然,如果您想非常精确地处理这个问题,仅避免在 q1 和 q2 之间分页(例如允许在 q2 和 q2 之间分页),那么问题就会变得稍微复杂一些:
\catcode`\@=11
\addtoparstylehooks{\xdef\lastmarker{\m@rker}}
\m@kedigitsletters
\def\@qone{q1}
\m@kedigitsother
\sethook{before}{q2}{\ifx\lastmarker\@qone\relax\nobreak\fi}
这里我们在每个段落末尾获取前一个段落的标记,然后在 q2 之前测试上一个段落的标记是否为 q1,如果是,则插入 nobreak。请注意,为了将标记与 q1 进行比较,我们将 q1 存储为用于比较的内容,但 q1 中的 1 是字母而不是数字,因此我们在执行该 def 时必须将数字重新分类为字母,然后再恢复。sethook 很智能,它会自动为我们进行重新分类,无需手动执行此类操作。