避免使用寡妇签名行

避免使用寡妇签名行

我在 XeLaTeX 中创建了文档,文档末尾有签名行。有时这些签名会单独出现在页面上,即没有前面的内容。我希望避免出现这些“寡妇”签名,特别是签名前面至少有两行文本(即,可以识别签名可能附加到的文档的内容)。

文件的内容和签名的数量是可变的,所以我希望有一个尽可能自动化的解决方案。

下面是使用该类的文档示例memoir

\documentclass{memoir}
\usepackage{lipsum}

% signature
% ~~~~~~~~~
%                _____________
%                *Name* (1)
%                Address (2)
%
\newcommand{\signature}[2]{%
 \bigskip\par{}%
 \begin{SingleSpace}%
 \begin{tabular}{ p{6cm} p{8cm} }
     & \rule{6cm}{0.5pt}\newline{}%
       \textbf{#1}\\%
     & #2 %
 \end{tabular}%
 \end{SingleSpace}%
 \medskip%
}

\begin{document}

% some arbitrary number of lipsum
\lipsum[1-5]

% an arbitrary number of signatures
\signature{John Doe}{42 Wallaby Way, Sydney} 
\signature{Jane Smith}{Bates Motel, California}

\end{document}

我考虑的是使用以下方法的组合来自动实现最佳结果(只要它们是可行的):

  1. 使页面尺寸稍微大一些,特别是当只有一页时;

  2. 增加段落之间的间距;

  3. 防止在签名列表之前分页。

我相信#1可以通过使用来实现\sloppybottom

我不确定如何实现#2,或者它是否在审美上可以接受。

\noprelistbreak也许#3可以通过或来实现\nopagebreak- 尽管我可能必须将签名转换为先前的列表环境。

我对这个有趣问题的想法非常感兴趣。

答案1

在签名代码真正开始之前,段落文本中就会形成寡妇线,因此您需要在该级别阻止它们(我只是在这里将 widowpenalty 设置为无限大)签名代码发出了过满框警告所以我修改了它一点,与问题无关。

在此处输入图片描述

\documentclass{memoir}
\usepackage{lipsum}

% signature
% ~~~~~~~~~
%                _____________
%                *Name* (1)
%                Address (2)
%
\newcommand{\signature}[2]{%
 \par\nobreak\bigskip
 \begin{SingleSpace}%
 \mbox{}\hfill\begin{tabular}{p{8cm} }
     \rule{8cm}{0.5pt}\newline{}%
       \textbf{#1}\\%
      #2 %
 \end{tabular}%
 \end{SingleSpace}%
 \medskip%
}

\begin{document}
\raggedbottom
% some arbitrary number of lipsum
\widowpenalty10000
\lipsum[1-5]


% an arbitrary number of signatures
\signature{John Doe}{42 Wallaby Way, Sydney} 
\signature{Jane Smith}{Bates Motel, California}

\end{document}

相关内容