回忆录 - 重新定义引用环境以避免分页符分裂

回忆录 - 重新定义引用环境以避免分页符分裂

我正在使用该类memoir,需要确保 quote 环境不会跨页拆分。在我使用该环境的其中一种情况下,它有两行,第一行位于页面底部,第二行位于下一页开头。

我环顾四周,看到一个线程\interlinepenalty声明直接在环境中设置可以解决问题:

\newenvironment{nbquote}
 {\quote\interlinepenalty=10000 }
 {\endquote}

但是,我希望重新定义quote环境而不是创建新环境。我不确定如何正确地重新定义它。在文件中memoir.dtx,环境定义如下:

\newenvironment{quote}%
               {\list{}{\rightmargin\leftmargin}%
                \item[]}%
               {\endlist}

\begin{document}我在编写文档之前曾尝试过以下操作:

\renewenvironment{quote}%
               {\list{}{\rightmargin\leftmargin}%
                \item[]}%
               {\endlist}
               {\quote\interlinepenalty=10000}{\endquote}

编译时会产生以下错误:

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.51                {\quote
                           \interlinepenalty=10000}

我并不确信正确的方法是将代码放在后面\begin{document},但如果我这样做,结果如下:

! LaTeX Error: Something's wrong--perhaps a missing \item.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.59                {\endquote
                              }
? 

我不确定如何进一步调试。如能得到任何帮助我将不胜感激。

答案1

你的 OP 中的代码\interlinepenalty=10000应用到了错误的位置。语法\renewenvironment

\renewenvironment{<environment name>}%
  {stuff to expand from \<environment name>}%
  {stuff to expand from \end<environment name>}

编辑\interlinepenalty是 TeX 在其分页算法中使用的众多参数之一。也许,在您的示例中,更好的命令是 \samepageLaTeX 提供的。该\samepage命令设置\interlinepenalty为 10000,但还设置其他相关参数以真正抑制分页。因此,让我们应用\interlinepenalty=10000 \samepage紧接着\item[]

\documentclass{memoir}
\usepackage[english]{babel}
\usepackage{blindtext}

\renewenvironment{quote}%
               {\list{}{\rightmargin\leftmargin}%
                \item[]\samepage}% <- The effect of \samepage is local!!!
               {\endlist}

\begin{document}
\blindtext[5]
\begin{quote}
\blindtext[2]
\end{quote}
\end{document}

在这个 MWE 中,的效果\samepage是局部的。但是,值得指出的是,在上面的 MWE 中,我在环境中使用了不合理的长文本quote。一个好的做法是将短引文放入 中 quote,将长引文放入 中 quotation

相关内容