Rientro e riga bianca

  • Creatore
    Topic
  • #94145
    Up
    0
    Down
    ::


    Ciao,

    ho un problema che fino ad oggi non avevo mai avuto con latex, ovvero dopo la fine di un capoverso, quando vado a capo ed ho un rientro, la riga di testo viene posizionata con un interlinea più ampia rispetto a quella del corpo normale…(allego tre immagini)
    Non è un fenomeno che ho in tutto il corpo della tesi, ma solo da un certo punto in poi, al che commentando vari pezzi di tesi sono riuscito (credo) a circoscrivere il problema; in una pagina ho una formula matematica ed un grafico, da quel punto in poi si presenta il problema, se tolgo la formula matematica il problema aumenta (ovvero l’interlinea dopo il rientro è grandissimo tipo 3/4 righe), se tolgo l’immagine il problema scompare, se cambio l’immagine con un altra ho lo stesso problema; se li tolgo entrambi il testo è rientrato correttamente…

    ho provato a lasciare una riga vuota dopo \end{equation} e ad ometterla ma il problema si presenta compunque, poi (anche se so che non si dovrebbe fare) lasciando sia testo che immagine e provando a terminare il capoverso con \\ non ho rientro ma l’interlinea è corretto, solo che io il rientro lo vorrei perchè rende il testo più leggibile isolando i vari capoversi. (oltre a farlo anche più gradevole esteticamente).

    ho letto il capitoletto dell’Arte che tratta i capoversi (ho scoperto l’esistenza delle righe vedove ed orfane), ma le soluzioni proposte non mi sono d’aiuto; ho anche provato a cercare qua sul forum ed effettivamente ho trovato un topic di un ragazzo che aveva lo stesso problema, ma anche qua non ho avuto successo…. qualcuno ha qualche idea su come fare?

    Le figure inserite sono tutte messe a modo senza [!h] o [H], quindi non credo che sia un problema di oggetti flottanti.

    L’immagine è inserita così
    `
    \begin{figure}[ht]
    \centering
    {\resizebox{0.85\textwidth}{!}{\input{./figs/C_L.tex}}}
    \caption{Andamento di $C_L$ per una simulazione a quattro blocchi (IBPA=+\ang{90})}
    \label{check_final}
    \end{figure}
    `
    so che sembra strano, ma il fatto è che sono immagini derivanti dall’output di gnuplot, che usa come terminale epslatex, il quale produce un file tex che richiama un file eps, e l’inserimento si fa così, il problema rimane anche inserendo un immagine pdf classica (compilo con pdflatex).

    il mio layaout è dato da
    `
    \documentclass[12pt,b5paper,twoside,openright]{book}
    \usepackage[b5paper,layout=b5paper]{geometry}
    `

    Spero di avervi dato tutte le informazioni che vi servono, magari se riesco a creare un minimo minimo compilabile lo aggiungo…. Grazie a tutti!!

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #94146
      franen
      Partecipante
        Up
        0
        Down
        ::


        Ciao,
        il comportamento di LaTeX è quello di riempire la pagina nel modo più omogeneo possibile, quindi nel caso in cui fosse necessario lui proverà a aumentare l’interlinea (per quanto concesso) o a restringerla.
        Alla fine di ogni capoverso viene aggiunto uno spazio verticale pari a [tt]\parskip[/tt], che se guardi nel file latex.ltx vedrai essere definito come `\parskip=0pt plus 1pt` quindi è una lunghezza elastica che va da 0pt a 1pt. Per questo motivo terminando le righe con \\ ottieni l’interlinea giusta, perché \parskip non viene aggiunto.
        Se tu volessi eliminare l’elasticità potresti cambiare il valore di parskip, ad esempio `\setlength{\parskip}{0pt}`.
        Ma credo che così facendo peggioreresti solo le cose 🙂

        Discorso a parte va fatto nel caso di pagine in cui ci sono oggetti flottanti (figure o formule o tabelle), perché entrano in gioco altre dimensioni: \floatsep, \textfloatsep e \intextsep, definite semrpe in latex.ltx:`\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@}
        \setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
        \setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@}`

        Per concludere: LaTeX non compone testi con una griglia di testo ben fissa, né è facile farlo. Ci si può provare con un po’ di fatica, magari con l’aiuto del pacchetto grid, ma solitamente il risultato di default è ottimo e per migliorarlo può bastare spostare o ridimensionare una figura o cambiare una riga di testo.

        Fran

      • #94147
        Up
        0
        Down
        ::


        effettivamente con \setlength{\parskip}{0pt} la riga bianca scompare, ma nascono alcune brutture di righe orfane\vedove spesso nemmeno alla pagina successiva dato che ho delle immagini in subfig che mi prendono una pagina intera…
        Latex si conferma ancora una volta una bestia!!!

        purtoppo l’effetto ottico dell’elasticità non mi piace molto, e anche aumentando/riducendo a dimesione dell’immagine non scompare il problema… vedremo in fase di revisione come va… certo non volglio per un’inetrlinea un pò più grande pregiudcare la leggibilità della tesi, alla fine tra avere la fine del paragrafo due\tre pagine dopo o un interlinea un pò più grande decisamente meglio la seconda;
        sono comunque aperto ad altre proposte se qualcuno ne ha…

        ah poi io ho usato \setlength{\parskip}{0pt} nel preambolo, c’è la possibilità di dirgli di fare questa magia “localmente”?

      • #94148
        franen
        Partecipante
          Up
          0
          Down
          ::

          scroll86″ post=93737
          ah poi io ho usato \setlength{\parskip}{0pt} nel preambolo, c’è la possibilità di dirgli di fare questa magia “localmente”?

          Certo, basta che usi quel codice dentro a un gruppo e la modifica avrà effetto solo in quel gruppo. (Ma sii cauto ché è facile fare degli orrori dimenticandosi di definizioni date chissà dove. Come già scrivevi tu, lascia queste cose alla fine!)

          Fran

        • #94149
          Up
          0
          Down
          ::


          in che senso dentro ad un gruppo?

          tipo dentro ad una subsection? a livello di chapter? non ho capito scusami….

        • #94150
          Up
          0
          Down
          ::


          Dovresti risolvere quasi tutti i problemi di quel tipo con
          `
          \usepackage[b5paper,heightrounded]{geometry}
          `
          che aggiusta i parametri in modo che la gabbia contenga un numero intero di righe, modificando l’altezza del testo il meno possibile.

          Ciao
          Enrico

        • #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:

          • #94152
            Up
            0
            Down
            ::


            no vabbè ma io vi adoro 😛 … siete spaziali!!!

            funziona tutto!

            Claudio cercherò il tuo articolo sui gruppi e me lo leggerò!

        Visualizzazione 6 filoni di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top