.png)
Дамы и господа,
Недавно я занимался набором стихов и прозы, и у меня возникли проблемы с датами. В частности, я хочу, чтобы дата следовала сразу за предыдущим текстом и придерживалась его (например, без разрыва страницы). Это, кажется, очевидно, когда набирается проза --- см. этот обходной путь:
\newcommand{\dated}[1]{\nobreak\par\noindent\null\hfill\textit{#1}}
Однако, со стихом вverse
окружении, это становится практически невозможным, так как LaTeX считает, что разрыв всегда благоприятен после \end{verse}
, конца окружения. Я гуглил, но не смог найти способ предотвратить его разрывпослеокружающая среда.
С прозой это работает просто чудесно:
\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
Это решение помещает дату ВНУТРИ среды стиха и прикрепляет ее к последней строке. Хотя можно использовать \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}