Evitar quebra de página após o final do ambiente (por exemplo, verso)

Evitar quebra de página após o final do ambiente (por exemplo, verso)

Senhoras e senhores,

Tenho escrito versos e prosa recentemente e estou tendo problemas com datas. Especificamente, quero que a data siga imediatamente o texto anterior e cumpra-a (por exemplo, sem quebra de página). Isso parece ser óbvio sempre que a prosa está sendo composta --- veja esta solução alternativa:

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

Porém, com o verso no verseambiente, isso se torna virtualmente impossível, pois o LaTeX pensa que uma pausa é sempre favorável após o \end{verse}fim do ambiente. Estive pesquisando no Google, mas não consegui encontrar uma maneira de evitar que ele quebrassedepoiso ambiente.

Com prosa, funciona perfeitamente:

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

Quebra correta

Porém, com a poesia, nem 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}

Pausa incorreta

Não posso usar \needspaceporque todos os versos ficam entre eles \begin{verse}... \end{verse}e há várias centenas de poemas, então não posso colar \needspacecada última linha do verso.

Talvez seja possível redefinir o versículo de alguma forma? Ou algum outro truque para fazer \nobreako trabalho depois \end{verse}?

Qualquer ajuda é apreciada!

Responder1

Esta solução coloca a data DENTRO do ambiente do verso e anexa-a à última linha. Embora seja possível usar \unskipou \vskip-\lastskipremover parte do espaço no final do ambiente do versículo, se você já estiver na próxima página, isso não lhe 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}

Ocorreu-me que \raiseboxestava transformando a data em um descendente, e o LaTeX apenas alinha as linhas de base na parte inferior da página, não nos descendentes. Para mover a linha de base, deve-se incluir a linha anterior dentro de uma caixa.

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

informação relacionada