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
\egroup
necesarios ya que el fooquote
entorno ya es un grupo, también { \bgroup
introduce un carácter espacial.
La \end
redefinición (que en realidad es bastante peligrosa) parece demasiado pronto y afectará a \end
cualquier entorno anidado y, en particular, al quote
entorno. Solo desea activarlo después fooquote
(supongo), por lo que debería estar justo al final del código final de la definición.
flushright
está destinado a ser un formulario de entorno, siendo el formulario de declaración, \raggedleft
pero si es una línea, probablemente solo usaría \hspace{\fill}
.
\nopagebreak
debería ser suficiente para evitar saltos de página en ese punto, siempre que haya flexibilidad en otras partes de la página.
\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}