解释
命令\poemtitle
和poem
环境(均来自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}
渲染
如您所见,标题“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}