環境の終了後に改ページしないようにする(例:詩)

環境の終了後に改ページしないようにする(例:詩)

親愛なる皆様、

最近、詩や散文をタイプセットしているのですが、日付に問題があります。具体的には、日付を前のテキストの直後に表示し、それに固執したいのです (たとえば、改ページは不要)。散文をタイプセットするときはいつでも、このことは明らかです。次の回避策を参照してください。

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

しかし、環境にverseがある場合verse、LaTeXは環境の終わりの後には常にbreakが望ましいと考えるため、事実上不可能になります\end{verse}。私はグーグルで調べましたが、breakを防ぐ方法を見つけることができませんでした。環境。

散文の場合、それは魔法のように機能します。

\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 環境内に配置し、最後の行に添付します。 または を使用して 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}

関連情報