Evitar saltos de página después del final del entorno (por ejemplo, verso)

Evitar saltos de página después del final del entorno (por ejemplo, verso)

Queridas damas y caballeros,

He estado escribiendo versos y prosa recientemente y tengo problemas con las fechas. Específicamente, quiero que la fecha siga inmediatamente al texto anterior y se ciña a él (por ejemplo, sin saltos de página). Esto parece ser obvio cada vez que se escribe prosa; consulte esta solución alternativa:

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

Sin embargo, con el verso en verseel entorno, esto se vuelve prácticamente imposible ya que LaTeX piensa que una ruptura siempre es favorable después del \end{verse}fin del entorno. He estado buscando en Google, pero no encuentro la manera de evitar que se rompa.despuésel entorno.

Con prosa, funciona a las mil maravillas:

\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}

Rotura correcta

Sin embargo, con la poesía, no tanto:

\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}

descanso incorrecto

No puedo usarlo \needspaceporque todos los versos van entre esos \begin{verse}... \end{verse}, y hay varios cientos de poemas, por lo que no puedo pegar \needspacecada último verso.

¿Quizás sea posible redefinir el verso de alguna manera? ¿O algún otro truco para que \nobreakfuncione después \end{verse}?

¡Cualquier ayuda es apreciada!

Respuesta1

Esta solución coloca la fecha DENTRO del entorno del verso y la adjunta a la última línea. Si bien se puede usar \unskipo \vskip-\lastskipeliminar parte del espacio al final del entorno del verso, si ya estás en la página siguiente, no te servirá de nada.

\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}

Se me ocurrió que \raiseboxestaba convirtiendo la fecha en un descendente, y LaTeX solo alinea las líneas de base en la parte inferior de la página, no los descendentes. Para mover la línea base, se debe incluir la línea anterior dentro de un cuadro.

\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}

información relacionada