如何保留一个环境和前一个环境的最后一行?

如何保留一个环境和前一个环境的最后一行?

我经常在我的文档中引用引用,例如:

\begin{quote}
    Now I am become Death, the destroyer of worlds.
    Also, I like bananas!

    I like bananas so much that my quotes about them run to \emph{multiple paragraphs}!
\end{quote}
\begin{flushright}Ronald MacDonald\end{flushright}

我希望我的flushright环境与我的环境的最后一行保持在同一页面上quote

我的想法是编写一个新的环境,如果需要的话,该环境会强制分页符出现在我引用的最后一行或之前。


我可以从其他问题中看到(特别是这个)我应该使用widowpenalties,但我不知道如何应用惩罚仅有的到最后一行。

另一个问题上的例子似乎表明将对行 -1 和所有其他行\windowpenalties 3 x y 0应用惩罚。xy

具体来说,它表明

{\widowpenalties 4 10000 10000 -10000 0 \brokenpenalty 0 \par}

用于在段落倒数第三行之前断行。


然而,我不知道该如何写newenvironment程序来应用惩罚,使得 LaTeX 在段落的最后一行之前中断,但是只适用于我引文的最后一段

答案1

您不应该将这两个部分分成两个环境:

\documentclass{article}
\usepackage{xparse}

\NewDocumentEnvironment{mquote}{m}
 {\begin{quote}}
 {{\interlinepenalty 10000 \brokenpenalty 0 \par}% <--- change to \par, if you like
  \nopagebreak\makebox[\linewidth][r]{#1}\end{quote}}

\setlength\textheight{2cm}

\begin{document}
\noindent X\hrulefill X

\begin{mquote}{Ronald MacDonald}
Now I am become Death, the destroyer of worlds.
Also, I like bananas!

I like bananas so much that my quotes about them run to \emph{multiple paragraphs}!
\end{mquote}
\end{document}

使用此代码,整个最后一段将与归属一起出现在下一页;如果您更改

{\interlinepenalty 10000 \brokenpenalty 0 \par}

进入\par,只有最后一行会移动到下一页。

{\widowpenalties 3 10000 10000 0 \brokenpenalty 0 \par}

你要确保最后最后一段的每一行都将伴随下一页的归属。

答案2

对于这样的引用,我通常会将引用内容包含在引用环境中,并将其与\hfill

\begin{quote}
    Now I am become Death, the destroyer of worlds.
    Also, I like bananas!

    I like bananas so much that my quotes about them run to \emph{multiple paragraphs}!\hfill Ronald MacDonald
\end{quote}

MWE 会有所帮助。答案可能取决于我们的“引用”格式。

在此处输入图片描述

相关内容