Re: [Risolto] legare quote al testo precedente

#56117
Up
0
Down
::

Purtroppo \nopagebreak non funziona. Viene spezzata la pagina ugualmente.

Non può funzionare (come egreg9 sa molto meglio di me, ma concediamogli almeno una piccola distrazione ogni 1000 messaggi 😉 ), perché l’ambiente quote, che richiama \trivlist, inserisce per suo conto un punto di cesura, con penalità \@beginparpenalty (be’, a rigore ciò dipende dalla classe di documento: l’ambiente quote non è definito nel nucleo del LaTeX); tipicamente, \@beginparpenalty ha un valore che addirittura incoraggia, seppur blandamente, l’interruzione di pagina. Un’alternativa al taglio manuale della pagina potrebbe essere una modifica locale a tale parametro:
`
\begin{quote}
\makeatletter
\@beginparpenalty = \@M
\makeatother
Mettete qui la vostra citazione.
(\textsl{B.~Stroustrup})
\end{quote}
`
Eppoi, c’è sempre il comando \samepage del LaTeX 2.09 (che fa la stessa cosa, più altre)…

Giusto. Ma il rimedio che proponi non può funzionare, perché quando cambi il valore di \@beginparpenalty la penalità di trivlist è già stata emessa. Quindi il cambiamento va dato prima:
`\makeatletter
\newenvironment{quote*}
{\@beginparpenalty\@M\quote}
{\endquote}
\makeatother`
definisce un ambiente quote* che non permette un cambio pagina prima di sé.

L’uso di samepage è scoraggiato: le famose altre cose che fa non sono tanto piacevoli.

C’è un’altra soluzione che funziona se il capoverso precedente la citazione è di almeno quattro righe (se il capoverso precedente è di tre righe o meno il problema non si pone: tutto di là).
`\newenvironment{specialpar}[1]{\par#1}{\par}

\begin{specialpar}{\widowpenalties 3 10000 -10000 0\relax}
Testo del capoverso precedente la citazione, lungo almeno quattro righe
\end{specialpar}
\begin{quote}
Citazione che si porterà dietro esattamente due righe del capoverso precedente.
\end{quote}`
Carino, vero?

Ciao
Enrico

Go to top