Re: Rientro e riga bianca

#94151
OldClaudio
Partecipante
    Up
    0
    Down
    ::


    Il problema dell’interlinea fra capoversi, prodotto dall’elasticità di \parskip, si rende visibile quando verso la fine dalla pagina c’è l’inizio di una nuova sezione di qualunque livello o una equazione, che è di grandi dimensioni, ma non è mobile, non è un oggetto flottante.

    Dunque il titolo del sezionamento deve andare nella pagina successiva perché non può avvenire un salto pagina a metà di un titolo (di più di una riga) né può avere luogo, per esempio, a metà di un sistema di equazioni racchiuso da una graffa a sinistra. Titolo o equazione devono andare nella pagina successiva e la pagina precedente risulterebbe mozza o con gli spazi verticali elastici adeguatamente allargati. Nelle tue immagini allegate mostri solo l’interlinea allargato, ma non mostri che cosa contiene l’inizio della pagina successiva. Quindi la mia è una delle possibili ipotesi. Non è detto che sia giusta. Il suggerimento di Enrico parte dal presupposto che la tua \textheight non corrisponda a un numero intero di righe, cioè di \baselineskip, sommato a \topskip, l’altezza della prima riga della pagina. Può darsi che il suo suggerimento risolva il tuo problema, ma può darsi quello che sto per darti non sia completamente fuori luogo; non lo è se la mia ipotesi è valida.

    Definisciti un comando \goodpagebreak così:`\newcommand*\goodpagebreak[1][4]{\par
    \unless\ifnum\numexpr(\pagegoal-\pagetotal)/\baselineskip >#1 \newpage\fi}`Inserisci questo comando prima di ogni comando di sezione che nella pagina precedente produca l’allargamento dell’interlinea e prima di ogni equazione di grandi dimensioni che produca lo stesso effetto, anche se in questo caso questo comando termina il capoverso corrente.

    Funziona così: \pagegoal è una lunghezza interna del programma di composizione che normalmente vale \textheight, ma via via viene diminuito dei valori di altezza legati a oggetti mobili di vario genere (per esempio anche le note); \pagetotal è il totale di questa altezza già usato dal testo che si trova nel buffer di uscita, nella famosa scatola 255 che l’utente può esaminare, ma che deve lasciare stare a tutti i costi e non può memorizzarci niente dentro per nessun motivo; questa scatola è al servizio esclusivo della routine di uscita. Il meccanismo di formazione dei capoversi ci mette dentro della roba alla fine di ogni capoverso. Bene: il comando \goodpagepreak interviene proprio alla fine di un capoverso, se si usa il comando prima che il capoverso sia terminato ci pensa \goodpagebreak a terminarlo, altrimenti il suo primo comando, \par, risulta inerte. Fatto questo, esso verifica quante righe alte \baselineskip misura (facendo i calcoli arrotondati, non troncati) la differenza fra \pagegoal e \pagetotal; se questo numero di righe è maggiore del numero di default 4, o del numero (intero) espresso come argomento facoltativo al comando \goodpagebreak, allora non fa niente ma se è minore o uguale emette un comando \newpage. In sostanza se mancano meno di 5 righe alla fine della pagina, produce un fine pagina lasciando la pagina corrente leggermente mozza, altrimenti non succede nulla.

    Ti garantisco che è decisamente meglio una pagina leggermente mozza piuttosto che una pagina con i capoversi spaziati.

    Se fosse vera la mia ipotesi, il tuo problema si presenterebbe più facilmente con pagine piccole rispetto a quando si usa carta di formato A4;, se usassi geometry e specificassi carta di formato A6, anche usando l’opzione heightrounded, il problema ti si presenterebbe spessissimo. Il problema si presenta anche con pagine grandi e capoversi lunghissimi; meno capoversi ci sono in una pagina, più visibili sono le spaziature fra capoversi nel caso che non si usi \goodpagebreak.

    Sono sicuro che Enrico saprebbe definire una macro equivalente più funzionale della mia usando il linguaggio L3.

    Vorrei sottolineare che la mia ipotesi potrebbe essere totalmente falsa, ma a me queste cose capitano spesso e quindi mi fido del mio fiuto; se oggi il mio fiuto non funziona, be’, pazienza.

    Claudio

    PS I gruppi espliciti sono delimitati da una coppia di graffe {…} o da una coppia di comandi \begingroup …\endgroup o da una coppia di comandi \bgroup …\egroup (hanno funzionalità diverse); i gruppi impliciti sono costituiti dagli ambienti [tt]\begin {ambiente}…\end {ambiente}[/tt], qualunque ambiente. Nella sezione ArsTeXnica di questo sito ci sono le varie edizioni della rivista del gruppo; cerca fra quelle annate della rivista; potresti trovarci un mio articolo intitolato “I gruppi, questi sconosciuti”, che forse fa al caso tuo, visto che ti sono sconosciuti.:wink:

    Go to top