使用 while observinglines 避免段落内分页

使用 while observinglines 避免段落内分页

有没有办法阻止文档段落内的分页符\obeylines?我发现了这个问题:如何避免段落内分页?,但那里建议的解决方案似乎都不能适用于\obeylines。 的替代方案\obeylines也会有所帮助,但我需要一个全局命令,而不是\\在每一行文本之后。(我正在制作一本歌本,其中每一行都有硬换行符,因此\\非常不切实际)

以下是我尝试过的一个例子:

\documentclass[a6paper]{article}

\usepackage[margin=100pt]{geometry}
%\usepackage[defaultlines=100]{nowidow}

\widowpenalties 1 10000
\raggedbottom

%\clubpenalties 1 10000

%\interlinepenalty 10000

\begin{document}

\obeylines

TITLE
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
~\par
bar
bar
bar
bar
bar
bar
bar
bar
\end{document}

照这样,这些条形图被分割在文档的两页之间。当我尝试在每一行上\obeylines用替换时,该命令有效,但用 则无效。\\\widowpenalties\obeylines

答案1

通常允许在之后进行分页\par,但这就是\obeylines问题所在。

您可以使用(新的)钩子机制:

\documentclass{article}

\usepackage[a6paper,margin=100pt]{geometry}

\newcommand{\normalpar}{\par\allowbreak}

\begin{document}

\obeylines\AddToHook{para/after}[obey]{\nobreak}

TITLE
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
~\normalpar
bar
bar
bar
bar
bar
bar
bar
bar

\RemoveFromHook{para/after}[obey]

\clearpage

\obeylines

TITLE
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
~\par
bar
bar
bar
bar
bar
bar
bar
bar

\end{document}

第二个例子表明它\par恢复了其标准属性。

在此处输入图片描述

更好地定义一个环境。

\documentclass{article}

\usepackage[a6paper,margin=100pt]{geometry}

\newenvironment{obeynobreak}
 {%
  \par % ensure vertical mode
  \AddToHook{para/after}[obey]{\nobreak}
  \obeylines
 }
 {\RemoveFromHook{para/after}[obey]}
\newcommand{\normalpar}{\par\allowbreak}

\begin{document}

\begin{obeynobreak}
TITLE
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
~\normalpar
bar
bar
bar
bar
bar
bar
bar
bar
\end{obeynobreak}

\clearpage

\obeylines

TITLE
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
~\par
bar
bar
bar
bar
bar
bar
bar
bar

\end{document}

相关内容