Cómo evitar un salto de página entre párrafos

Cómo evitar un salto de página entre párrafos

Me gustaría escribir algo así como una "cita más atribución", por ejemplo, al comienzo de un capítulo de un libro. Debe tener un aspecto como este:

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.

Para ello, tengo un entorno y un comando, que se usan así:

\section{Chapter Title}

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

Pregunta:¿Cómo puedo garantizar que no haya salto de página entre la atribución y el cuerpo de la cita? No me importa si hay un salto de páginadentrola cita, pero no debe haber ninguna entre la cita y la atribución.

Estaré feliz de cambiar toda mi configuración si es necesario. En mi caso es así:

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

Respuesta1

Realmente sería mucho más fácil responder si se proporcionara un documento de ejemplo, los fragmentos son mucho más difíciles de comentar, pero

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

no son \bgroup \egroupnecesarios ya que el fooquoteentorno ya es un grupo, también { \bgroupintroduce un carácter espacial.

La \endredefinición (que en realidad es bastante peligrosa) parece demasiado pronto y afectará a \endcualquier entorno anidado y, en particular, al quoteentorno. Solo desea activarlo después fooquote(supongo), por lo que debería estar justo al final del código final de la definición.

flushrightestá destinado a ser un formulario de entorno, siendo el formulario de declaración, \raggedleftpero si es una línea, probablemente solo usaría \hspace{\fill}. \nopagebreakdebería ser suficiente para evitar saltos de página en ese punto, siempre que haya flexibilidad en otras partes de la página.

ingrese la descripción de la imagen aquí

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

información relacionada