避免诗歌标题和诗歌之间分页

避免诗歌标题和诗歌之间分页

解释

命令\poemtitlepoem环境(均来自poemscol) 当它发生在页面末尾时,会发生分页符。所以它看起来像一个丑陋的寡妇。

平均能量损失

\documentclass{article}

\usepackage{fancyhdr}
\usepackage{poemscol}

\begin{document}

aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa

aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa

aa\\aa\\aa\\aa\\aa\\aa\\aa

\poemtitle{Foo}
\begin{poem}
lorem\\
ipsum\\
dolor\\
sit\\
amet\\
et\\
consectetur
\end{poem}
\end{document}

渲染

诗歌标题“troubleshooting”的渲染

如您所见,标题“Foo”出现在页面底部,后面是诗歌。

我的尝试

尝试 1:重新定义命令\poemtitle

我在序言中添加了这个重新定义\poemtitle(我从包中取出原始定义)

\makeatletter
\renewcommand{\poemtitle}[1]{\nobreak%
\set@p@emtitle{#1}{\poemtitlepenalty}{\poemtitlefont}%
{\relax}{\nobreak\par\nobreak\afterpoemtitleskip\nobreak}{\z@}%
\c@ntentsinfo{#1}{\contentsindentone}{\contentspoemtitlefont}%
{\contentsindenttwoamount}\nobreak%
\t@xtnotesinfo{#1}\nobreak%
}
\makeatother

但并没有任何效果。

尝试 2:更改\poemtitlepenalty

包裹提及\newcommand{\poemtitlepenalty}{\penalty-1000}

因此,我重新定义了该命令,将其作为值,,,,,看看\penalty-4000它是否改变了一些东西,但它什么也没改变。\penalty-300\penalty-20\penalty+1000

尝试 3:重新定义poem环境

我将poem环境重新定义为最简约的形式:

\renewenvironment{poem}[1][\linewidth]
{\nobreak%
     \nobreak\begin{pmclverse}[#1]\nobreak%
     }{\end{pmclverse}%
     }

但它并不影响渲染。

尝试 4:重新定义pmclverse环境

poemscol环境中poem调用pmclverse一个。所以,我也重新定义了它。我评论了很多东西,我把\nobreak所有东西都白白浪费了:

\makeatletter
\renewenvironment{pmclverse}[1][\linewidth]{%
%\let\\=\@centercr%
\nobreak\list{}{\itemsep\z@
%\itemindent -\runoverindentvalue
\nobreak\listparindent \itemindent
%        \ifdim #1 < \linewidth
%           \rightmargin        \z@
%           \setlength{\leftmargin}{\linewidth}%
%           \addtolength{\leftmargin}{-#1}%
%           \addtolength{\leftmargin}{-0.5\leftmargin}%
%         \else
%           \rightmargin        \leftmargin
%         \fi
%\advance\leftmargin\runoverindentvalue
}
\nobreak\item[]\nobreak}
{\endlist}
\makeatother

尝试摘要

当然,我将所有这些尝试结合在一起,但对分页符没有任何影响。

结论

\poemtitle最后只是禁止和环境之间的分页符poem

答案1

使用包?如果我添加此包并创建一个我要求其保留一些空间的needspace环境,则您的 MWE 对我有用。mypoem

\documentclass{article}

\usepackage{fancyhdr}
\usepackage{poemscol}

\usepackage{needspace}
\newenvironment{mypoem}[1]%   #1 = Title
{%
  \needspace{3\baselineskip}% <-- We need at least 3 more lines before...
  \poemtitle{#1}
  \begin{poem}
}
{\end{poem}}

\begin{document}

aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa

aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa\\aa

aa\\aa\\aa\\aa\\aa\\aa\\aa

\begin{mypoem}{Foo}
lorem\\
ipsum\\
dolor\\
sit\\
amet\\
et\\
consectetur
\end{mypoem}
\end{document}

在此处输入图片描述

相关内容