Seitenumbruch nach Ende der Umgebung verhindern (zB Vers)

Seitenumbruch nach Ende der Umgebung verhindern (zB Vers)

Sehr geehrte Damen und Herren,

Ich habe kürzlich Verse und Prosa gesetzt und habe Probleme mit Datumsangaben. Insbesondere möchte ich, dass das Datum unmittelbar auf den vorhergehenden Text folgt und dabei bleibt (also keinen Seitenumbruch). Dies scheint offensichtlich zu sein, wenn Prosa gesetzt wird – siehe diese Problemumgehung:

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

Bei Versen in verseder Umgebung wird dies jedoch praktisch unmöglich, da LaTeX davon ausgeht, dass ein Umbruch nach dem \end{verse}, dem Ende der Umgebung, immer vorteilhaft ist. Ich habe gegoogelt, konnte aber keinen Weg finden, um den Umbruch zu verhindern.nachdie Umgebung.

Bei Prosa klappt es wunderbar:

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

Richtiges Brechen

Bei Poesie ist das jedoch nicht so sehr der Fall:

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

Falsche Pause

Ich kann es nicht verwenden \needspace, da alle Verse dazwischen gehören \begin{verse}... \end{verse}, und es gibt mehrere Hundert Gedichte, sodass ich nicht \needspacefür jede letzte Verszeile einfügen kann.

Vielleicht ist es möglich, den Vers irgendwie neu zu definieren? Oder gibt es einen anderen Trick, damit es \nobreakdanach funktioniert \end{verse}?

Jede Hilfe ist willkommen!

Antwort1

Diese Lösung platziert das Datum INNERHALB der Versumgebung und hängt es an die letzte Zeile an. Zwar kann man \unskipoder verwenden \vskip-\lastskip, um einen Teil des Leerzeichens am Ende der Versumgebung zu entfernen, aber wenn Sie sich bereits auf der nächsten Seite befinden, nützt Ihnen das nichts.

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

Mir fiel auf, dass \raiseboxdas Datum in eine Unterlänge umgewandelt wurde, und LaTeX richtet nur Grundlinien am unteren Seitenrand aus, keine Unterlängen. Um die Grundlinie zu verschieben, muss man die vorherige Zeile in ein Kästchen einschließen.

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

verwandte Informationen