使用 \\ 時,使用 \filbreak 避免所有段落內的分頁符

使用 \\ 時,使用 \filbreak 避免所有段落內的分頁符

我正在寫一些歌詞。如果可能,應優先選擇部分空白頁面而不是段落內的分頁符號。使用\widowpenalties 1 10000\raggedbottom沒有效果。

到目前為止,我只能透過在\filbreak每個段落(=節)後面添加來實現所需的行為。

\documentclass[12pt]{article}
\usepackage[paperwidth=16cm, paperheight=9cm]{geometry}
\usepackage{nopageno}
\setlength\parindent{0pt}
\setlength\parskip{1em}

% Manually adding \filbreak at the end of stanza. This works as expected:
\begin{document}
\raggedright
Roads go ever ever on,\\
Over rock and under tree,\\
By caves where never sun has shone,\\
By streams that never find the sea;\\
Over snow by winter sown,\\
And through the merry flowers of June,\\
Over grass and over stone,\\
And under mountains in the moon.\filbreak

Roads go ever ever on\\
Under cloud and under star,\\
Yet feet that wandering have gone\\
Turn at last to home afar.\\
Eyes that fire and sword have seen\\
And horror in the halls of stone\\
Look at last on meadows green\\
And trees and hills they long have known.\filbreak
\end{document}

手動編譯\filbreak

但是,我不想在每個段落後手動輸入此內容。我嘗試使用方法回答。問題是我還必須使用它\\來實現詩句之間的正確換行。使用上述答案中的方法,我得到了\filbreak每個\\,所以它不起作用。

\documentclass[12pt]{article}
\usepackage[paperwidth=16cm, paperheight=9cm]{geometry}
\usepackage{nopageno}
\setlength\parindent{0pt}
\setlength\parskip{1em}

% Trying to add \filbreak after each paragraph automatically. Not working:
\makeatletter
    \def\filbreak{!\@@par\vfil\penalty-200\vfilneg}
    % Exclamation mark is there just to show, that \\ is also treated like \par.
\makeatother

\begin{document}
\raggedright
\let\par\filbreak
Roads go ever ever on,\\
Over rock and under tree,\\
By caves where never sun has shone,\\
By streams that never find the sea;\\
Over snow by winter sown,\\
And through the merry flowers of June,\\
Over grass and over stone,\\
And under mountains in the moon.

Roads go ever ever on\\
Under cloud and under star,\\
Yet feet that wandering have gone\\
Turn at last to home afar.\\
Eyes that fire and sword have seen\\
And horror in the halls of stone\\
Look at last on meadows green\\
And trees and hills they long have known.
\end{document}

使用重新定義的 \par 進行編譯

是否可以以某種方式將自訂命令 ( \filbreak) 放在每個段落之後而不是每個段落之後\\?是如何聯絡\par\\實際聯繫的?我不想使用其他詩歌包,因為我正在用一些其他特定行為編寫自己的詩歌包,與這個問題無關。

答案1

我建議更改\\為您設定的\newline內部環境,因此僅在段落之間允許分頁符號。poem\interlinepenalty=10000

\documentclass[12pt]{article}
\usepackage[paperwidth=16cm, paperheight=9cm]{geometry}
\usepackage{nopageno}
\setlength\parindent{0pt}
\setlength\parskip{1em}

\newenvironment{poem}{%
  \begin{flushleft}\let\\\newline
  \interlinepenalty=10000
}{\end{flushleft}}

\begin{document}

\begin{poem}
Roads go ever ever on,\\
Over rock and under tree,\\
By caves where never sun has shone,\\
By streams that never find the sea;\\
Over snow by winter sown,\\
And through the merry flowers of June,\\
Over grass and over stone,\\
And under mountains in the moon.

Roads go ever ever on\\
Under cloud and under star,\\
Yet feet that wandering have gone\\
Turn at last to home afar.\\
Eyes that fire and sword have seen\\
And horror in the halls of stone\\
Look at last on meadows green\\
And trees and hills they long have known.
\end{poem}

\end{document}

在此輸入影像描述

答案2

您可以使用para掛鉤來新增\filbreak並透過設定較高的值來阻止節內的分頁符\interlinepenalty

\documentclass[12pt]{article}
\usepackage[paperwidth=16cm, paperheight=9cm]{geometry}
\usepackage{nopageno}
\setlength\parindent{0pt}
\setlength\parskip{1em}
\AddToHook{para/after}{\filbreak}
\showoutput
% Manually adding \filbreak at the end of stanza. This works as expected:

\begin{document}

\interlinepenalty=9000

Roads go ever ever on,\\
Over rock and under tree,\\
By caves where never sun has shone,\\
By streams that never find the sea;\\
Over snow by winter sown,\\
And through the merry flowers of June,\\
Over grass and over stone,\\
And under mountains in the moon.

Roads go ever ever on\\
Under cloud and under star,\\
Yet feet that wandering have gone\\
Turn at last to home afar.\\
Eyes that fire and sword have seen\\
And horror in the halls of stone\\
Look at last on meadows green\\
And trees and hills they long have known.
\end{document}

相關內容