Gestione degli oggetti flottanti in latex

  • Questo topic ha 6 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 1 anno fa da OldClaudio.
  • Creatore
    Topic
  • #122477
    mattiaca
    Partecipante
      Up
      0
      Down
      ::


      Leggendo la documentazione, ho compreso che un oggetto flottante su una pagina di soli oggetti flottanti aspetta un altro oggetto per riempire la pagina solamente se riempie la pagina stessa per una frazione inferiore a floatpagefraction. Se il successivo oggetto ci sta, viene aggiunto alla pagina di oggetti flottanti, altrimenti si passa alla pagina successiva.
      Chiaramente, affinché sia possibile avere più oggetti flottanti nella stessa pagina di oggetti flottanti, è importante che tutti gli oggetti abbiano dimensione inferiore a floatpagefraction. Quindi, aumentando floatpagefraction, si aumenta la capacità di far stare più oggetti nella stessa pagina di oggetti flottanti.
      Ora però il problema che mi pongo è il seguente: se in certi casi volessi più oggetti sulla stessa pagina di oggetti flottanti, mentre altri volessi una figura sola, come potrei suggerire al compilatore se mettere un altro oggetto nella stessa pagina? Dovrei rifinire ogni volta floatpagefraction per forzare il posizionamento degli oggetti? C’è un modo per indicare al compilatore di non aspettare un’altro oggetto nella pagina degli oggetti flottanti?
      Grazie a chi vorrà rispondere a questa domanda.

    Visualizzazione 5 filoni di risposte
    • Autore
      Risposte
      • #122478
        Up
        0
        Down
        ::


        Ciao, la pagina di soli oggetti flottanti si raccomanda di solito per le figure abbastanza ingombranti, diversamente si cerca di inserirle insieme al testo. un metodo un po’ sporco a mio avviso, ma che ti permetterebbe di inserire solo una figura e quella di far seguire alla figura stessa il comando `\clearpage` che consente di scaricare le code. A suo tempo risolsi il problema con questo artificio.
        Suggerisco comunque di leggere bene le implicazioni che ha questo comando poiché non usandolo più da molto tempo, mi sono dimenticato tutti i risvolti che ha.

      • #122479
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Dunque, la domanda di @mattiaca non mi è chiara, ma mi pare che egli faccia un po di confusione sul significato fel fattore floatpagefraction; la definizione che appare nella guida tematica Le Figure Fisse e Mobili definisce questo fattore come:

          \floatpagefraction Per le pagine contenenti solo oggetti mobili è la
          minima frazione di pagina da riempire con oggetti mobili.

          Dunque per consentire ad una figura non tanto grande di occupare da sola una intera facciata con adeguati spazi sopra e sotto, basterebbe diminuire \floatpagefraction, dopo di che se c’è altra roba in coda questa viene messa nello spazio restante, sempre che sia inserita con l’opzione p nel comando \begin{figure}.
          Se si vuole lasciare quella sola figura non tanto grande da sola nela pagina, si potrebbe usare \clearpage, come suggerisce @schwarz89it, ma questa operazione funziona bene solo se la figura non tanto grande è da sola nella coda degli oggetti flottanti. se la coda non contiene solo quella figura, \clearpage svuota la coda e compaiono tutti gli oggetti in coda, comprese le eventuali tabelle e gli altri oggetti flottanti definiti mediante le funzionalità del pacchetto float.

          Se io mi trovassi in questa situazione, preferirei racchiudere il comando \includegraphics, che mi inserirebbe la figura non tanto grande, dentro una scatola verticale tale da riepire ben bene la pagina. Il comando di bassisimo livello sarebbe \vbox to \textheight{…}, ma penso che sarebbe più comaodo usare il comando esteso \parbox; la sintassi completa di questo comando è;`\parbox[allineamento][altezza][posizione]{giustezza}{testo}`
          Di solito si usa solo l’opzione allineamento che colloca la scatola con la sua prima riga, o la sua mezzeria verticale o la sua ultima riga allineate con la riga del testo circostante. Ma gli altri due parametri facoltativi, altezza e posizione specificano l’altezza della scatoa e in che posizione vine messo verticalmente il testo dentro la scatola. Quindi, indipendentemente da come è allineata l’intera scatola col testo che la circonda, il testo che essa contiene può essere in alto, al centro o in basso.

          Ecco allora che se la figura contiene un’immagine non tanto grande ma corredata dalla sua didascalia, basta mettere queste due cose dento la parbix alla quale sia stata assenato un allineamento qualsisi, che però deve essere specificato, altrimenti non si possono inserire gli altri due paramenti facoltativi: in sostanza, senza modificare \floatpagefraction, io userei il seguente codice`\begin{figure}[p]
          \parbox[c][0.9\textheight][c]{\textwidth}{\includegraphics{…}\caption{…}}
          \end{figure}`L’eventuale \label con la sua etichetta può stare dopo l’egomento di \caption, oppure dopo ;a chiusura dell’ultimo argomento di \parbox. Così facendo la figura non tanto grande viene fatta apparire alta quanto 0.9\textheight, quindi piuttosto grande, ma il tutto verrà composto con la figura al centro della pagina insieme alla sua didascalia.
          Complicato? forse un pochino, anche perché non siamo abituati ad usare \parbox in quel modo.
          Se non ti piace usare \parbox, \uoi usare al suo posto l’ambiente minipage con la sintassi `\begin{minipage}[allineamento][altezza][posizione]{giustezza}
          testo
          \end{minipage}`I parametri facoltativi e la giustezza hanno gli stessi significati che ho descritto per \parbox, ma ora il testo da inserire non costituisce l’oltimo argomento obbligatorio di \parbox, ma è solo il contenuto dell’ambiente quindi per esempio potresti usare`\begin[figure}[p]
          \begin{minipage}[c][0.9\textheight][c]{\textwidth}
          \includegraphics[opzioni]{file della figura}
          \caption[didascalia breve]{didascalia lunga}
          \label{fig:nome-della-figura}
          \end{minipage}
          `

          Non ho fatto delle prove, ma io userei la soluzione con minipage perché le cose sono più chiare e più facili da correggere se fosse eventualmente necessario; meno graffe, meno possibilità di dimenticarne qualcune.

        • #122480
          mattiaca
          Partecipante
            Up
            0
            Down
            ::


            Cerco di chiarire meglio il problema, con un EMC.
            Si consieri:
            `
            \documentclass[a4paper,11pt] {book}
            \usepackage{lipsum}
            \renewcommand\floatpagefraction{0.5}

            \begin{document}
            \begin{figure}[p]
            \centering
            \rule{11pt}{0.6\textheight}
            \end{figure}
            \lipsum
            \begin{figure}[p]
            \centering
            \rule{11pt}{0.3\textheight}
            \end{figure}
            \lipsum
            \end{document}
            `
            La seconda figura viene messa in una nuova pagina, anche se c’è spazio per riempire la prima pagina con un nuova figura.
            Se modifico floatpagefraction=0.7 ottengo il risultato di avere entrambe le figure nella stessa pagina:
            `
            \documentclass[a4paper,11pt] {book}
            \usepackage{lipsum}
            \renewcommand\floatpagefraction{0.7}

            \begin{document}
            \begin{figure}[p]
            \centering
            \rule{11pt}{0.6\textheight}
            \end{figure}
            \lipsum
            \begin{figure}[p]
            \centering
            \rule{11pt}{0.3\textheight}
            \end{figure}
            \lipsum
            \end{document}
            `

            Tuttavia, se voglio mettere la seconda figura in una pagina con parametro [t] nel primo caso ci riesco:
            `
            \documentclass[a4paper,11pt] {book}
            \usepackage{lipsum}
            \renewcommand\floatpagefraction{0.5}

            \begin{document}
            \begin{figure}[p]
            \centering
            \rule{11pt}{0.6\textheight}
            \end{figure}
            \lipsum
            \begin{figure}[t]
            \centering
            \rule{11pt}{0.3\textheight}
            \end{figure}
            \lipsum
            \end{document}
            `
            ma nel secondo (con floatpagefraction=0.7) no:
            `
            \documentclass[a4paper,11pt] {book}
            \usepackage{lipsum}
            \renewcommand\floatpagefraction{0.7}

            \begin{document}
            \begin{figure}[p]
            \centering
            \rule{11pt}{0.6\textheight}
            \end{figure}
            \lipsum
            \begin{figure}[t]
            \centering
            \rule{11pt}{0.3\textheight}
            \end{figure}
            \lipsum
            \end{document}
            `
            E la mia domanda è: come avere flessibilità per poter scegliere le due cose?

          • #122481
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Infatti.
              Nel primo caso il MINIMO spazio destinato alle figure da stare in una pagina di sole figure vale 0.5 e la figura è alta o.6, poi viene del testo nella pagina successiva, seguita prima o poi da una figura in testa (parametro t).
              Nel secondo caso il MINIMO spazio destinato alle figure vale 0.7 ma la figura da mettere in testa è alta solo 0.6, quindi resta in coda bloccandola fino alla fine del documento. Certo più piccolo è il valore di \floatpagefraction, più facilmenmte escono dalla coda le figure col solo parametro p. L’importate è che le gure col parametro p siano di altessa superiore a quel fattore dell’altezza della gabbia del testo, cioè altezza della figura >= \floatpagefraction*\textheight.

            • #122482
              mattiaca
              Partecipante
                Up
                0
                Down
                ::


                Dunque, se ho capito bene tutto il meccanismo, non serve aumentare floatpagefraction per avere due oggetti flottanti nella stessa pagina.
                Solo quando vi è spazio sufficiente per contenere oggetti nella stessa pagina e non vi sono opzioni di collocazione contrarie, questo sistema funziona, altrimenti, se le condizioni non lo consentono, floatpagefraction blocca in coda gli oggetti.
                Se voglio riempire la pagina con oggetti flottanti, devo metterli sempre vicini, in questo modo:
                `
                \documentclass[a4paper,11pt] {book}
                \usepackage{lipsum}
                \renewcommand\floatpagefraction{0.5}

                \begin{document}
                \lipsum
                \begin{figure}[p]
                \centering
                \rule{11pt}{0.6\textheight}
                \end{figure}
                \begin{figure}[p]
                \centering
                \rule{11pt}{0.3\textheight}
                \end{figure}
                \lipsum
                \end{document}
                `
                Questo è almeno quello che mi pare di concludere dai miei tentativi.

              • #122483
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Sì, non solo, ma se anche nella prima figura stabilisci un altezza della riga nera di solo 0.4\textheight, le due immagini vanno a finire nell’unica pagina ddi sole figure perché insieme superano il il valore minimo di 0.5\textheight.

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

              Go to top