Как предотвратить разрыв страницы между абзацами

Как предотвратить разрыв страницы между абзацами

Я хотел бы набрать что-то вроде "цитата плюс атрибуция", например, в начале главы книги. Это должно выглядеть так:

CHAPTER TITLE

       This  is an  introductory quote.
       It's stylistically questionable,
       but it's a fun LaTeX exercise.

                         -- said by  me

Now starts the main body text, which is not rele-
vant to this question. It just goes on and on and
on and on.
    It just looks like ordinary text.  You do not
have to keep reading.

Для этой цели у меня есть среда и команда, используемые следующим образом:

\section{Chapter Title}

\begin{fooquote}
This is an introductory quote % etc. etc.
\quoteattribution{-- said by me}
\end{fooquote}

Вопрос:Как я могу гарантировать, что между указанием источника и текстом цитаты не будет разрыва страницы? Я не против, если будет разрыв страницыв пределахцитата, но между цитатой и указанием источника не должно быть ни одной.

Я с радостью изменю всю свою установку, если это необходимо. В моем случае это так:

\newenvironment{fooquote}%
{ \bgroup
  \let\oldend=\end
  \def\end##1{\oldend{##1}\csname @afterindentfalse\endcsname
                          \csname @afterheading\endcsname}
  \begin{quote}%
  \itshape%
}{%
  \end{quote}
  \egroup
}
\newcommand{\quoteattrib}[1]{\normalfont\flushright#1}

решение1

На самом деле было бы намного проще ответить, если бы был предоставлен пример документа, фрагменты гораздо сложнее комментировать, но

\newenvironment{fooquote}%
{ \bgroup
  \let\oldend=\end
  \def\end##1{\oldend{##1}\csname @afterindentfalse\endcsname
                          \csname @afterheading\endcsname}
  \begin{quote}%
  \itshape%
}{%
  \end{quote}
  \egroup
}
\newcommand{\quoteattrib}[1]{\normalfont\flushright#1}

не \bgroup \egroupнужны, так как fooquoteсреда уже является группой, также { \bgroupвводится символ пробела.

Переопределение \end(которое на самом деле довольно опасно) кажется слишком ранним, оно повлияет на \endлюбую вложенную среду и, в частности, на quoteсреду. Вы просто хотите активировать его после fooquote(я предполагаю), поэтому оно должно быть прямо в конце конечного кода определения.

flushrightпредполагается, что это будет форма окружения, форма объявления, \raggedleftно если это одна строка, я бы, вероятно, просто использовал \hspace{\fill}. \nopagebreakдолжно быть достаточно, чтобы предотвратить разрывы страниц в этой точке, при условии, что в других местах страницы сохраняется гибкость.

введите описание изображения здесь

\documentclass{book}

\makeatletter
\newenvironment{fooquote}{%
  \begin{quote}%
  \itshape
}{%
  \end{quote}%
\par
\aftergroup\@afterindentfalse
\aftergroup\@afterheading
\ignorespacesafterend
}
\newcommand{\quoteattrib}[1]{\par\nopagebreak\normalfont\hspace*{\fill}#1\par}

\makeatother

\begin{document}

\chapter{CCC}

\begin{fooquote}
red yellow blue
\quoteattrib{me}
\end{fooquote}

One two three. One two three. One two three. One two three.
One two three. One two three. One two three. One two three.
One two three. One two three. One two three. One two three.

One two three. One two three. One two three. One two three.
One two three. One two three. One two three. One two three.
One two three. One two three. One two three. One two three.

\end{document}

Связанный контент