防止環境結束後分頁(例如詩句)

防止環境結束後分頁(例如詩句)

親愛的女士們,先生們,

我最近一直在排版詩歌和散文,但我在日期方面遇到了麻煩。具體來說,我想讓日期立即跟在前面的文字後面,並堅持下去(例如,沒有分頁符號)。每當排版散文時,這似乎都是顯而易見的——請參閱此解決方法:

\newcommand{\dated}[1]{\nobreak\par\noindent\null\hfill\textit{#1}}

然而,對於環境中的詩句來說verse,這幾乎是不可能的,因為 LaTeX 認為在詩句之後休息總是有利的。\end{verse},這實際上變得不可能,因為 LaTeX 認為在環境結束。我一直在谷歌搜索,但找不到防止它損壞的方法環境。

對散文來說,它就像一種魅力:

\documentclass[12pt, oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[papersize={11cm, 15cm}, textwidth=10cm, textheight=11.2cm]{geometry}
\usepackage{lipsum}
\newcommand{\dated}[1]{\nobreak\par\noindent\null\hfill\textit{#1}}

\begin{document}
\null\vspace{2.3cm}
\lipsum[1]
\dated{30.01.2018}
\end{document}

正確斷裂

然而,對於詩歌來說,就不那麼重要了:

\documentclass[12pt, oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[papersize={11cm, 15cm}, textwidth=10cm, textheight=11.2cm]{geometry}
\usepackage{lipsum}
\newcommand{\dated}[1]{\nobreak\par\noindent\null\hfill\textit{#1}}

\begin{document}
\lipsum[1]

\begin{verse}
    THERE was a young lady of Niger \\
    Who smiled as she rode on a Tiger; \\   
    They came back from the ride    \\
    With the lady inside,   \\
    And the smile on the face of the Tiger.
\end{verse}
\dated{30.01.2018}
\end{document}

不正確的中斷

我無法使用,\needspace因為所有詩句都在這些\begin{verse}...之間\end{verse},並且有數百首詩,所以我無法粘貼\needspace每一行詩句的最後一行。

也許有可能以某種方式重新定義詩?或者還有什麼其他技巧可以讓\nobreak工作之後\end{verse}

任何幫助表示讚賞!

答案1

此解決方案將日期放入 verse 環境中並將其附加到最後一行。雖然人們可以使用\unskip\vskip-\lastskip刪除詩句環境末尾的一些空格,但如果您已經在下一頁,那麼這對您沒有任何好處。

\documentclass[12pt, oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[papersize={11cm, 15cm}, textwidth=10cm, textheight=11.2cm, showframe]{geometry}
\usepackage{lipsum}
\newcommand{\dateverse}[1]{\hfill\rlap{\hspace{\rightmargin}%
  \llap{\raisebox{-\baselineskip}{\textit{#1}}}}}
\begin{document}
\lipsum[1]

\begin{verse}
    THERE was a young lady of Niger \\
    Who smiled as she rode on a Tiger; \\   
    They came back from the ride    \\
    With the lady inside,   \\
    And the smile on the face of the Tiger.
    \dateverse{30.01.2018}
\end{verse}
\end{document}

我想到\raisebox將日期變成下行字母,而 LaTeX 只在頁面底部對齊基線,而不是下行字母。若要移動基線,必須將前一行包含在方塊中。

\documentclass[12pt, oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[papersize={11cm, 15cm}, textwidth=10cm, textheight=11.2cm, showframe]{geometry}
\usepackage{lipsum}
\newcommand{\dated}[1]{\ifvmode\else\newline\fi
  \null\hfill\rlap{\hspace{\rightmargin}\llap{\textit{#1}}}}
\begin{document}
\lipsum[1]

\begin{verse}
    THERE was a young lady of Niger \\
    Who smiled as she rode on a Tiger; \\   
    They came back from the ride    \\
    With the lady inside,   \\
    \parbox[b]{\dimexpr \linewidth-\itemindent}%
    {And the smile on the face of the Tiger.
    \dated{30.01.2018}}
\end{verse}
\end{document}

相關內容