Immagine nel punto sbagliato

  • Creatore
    Topic
  • #106474
    Up
    0
    Down
    ::


    Salve a tutti! Sto usando per la prima volta questo linguaggio per scrivere la tesi e sto avendo problemi nel mettere le immagini.
    Voglio mettere due immagini al centro della pagina, affiancate tra loro, ognuna con una sua didascalia e una didascalia principale che identifica le due immagini. Tipo “Immagine 1.1a” e “Immagine 1.1b”.
    Fino a qui ce l’ho fatta (più o meno) usando “subfigure”. Il problema è la posizione rispetto ai paragrafi.
    Voglio che queste due immagini stiano sotto il testo di
    `\section{Paragrafo 1}`
    mentre mi vanno in mezzo al paragrafo 2 e non capisco perchè.
    Questo è il codice che uso

    ` \begin{figure}[htp!]
    \centering
    \begin{subfigure}{.40 \textwidth}
    \includegraphics[height=6.85cm, width=7.26cm, keepaspectratio]{figure/breast_front_view}
    \caption{a}
    \end{subfigure}
    \hskip2em
    \begin{subfigure}{.4\linewidth}
    \includegraphics[height=6.85cm, width=7.26cm, keepaspectratio]{figure/breast_side_view}
    \caption{b}
    \end{subfigure}
    \caption{}
    \end{figure}
    `
    Avevo provato anche con minipage ma mi da lo stesso problema.
    `
    %\begin{figure}
    % \begin{minipage}[c]{.40 \textwidth}
    % \centering
    % \includegraphics[height=6.85cm, width=7.26cm,
    % keepaspectratio]{figure/breast_front_view}
    % \end{minipage}%
    % \hspace{10mm}%
    % \begin{minipage}[c]{.40 \textwidth}
    % \centering
    % \includegraphics[height=6.85cm, width=7.26cm,
    % keepaspectratio]{figure/breast_side_view}
    % \end{minipage}
    %\end{figure}`

    Perchè mi fa sta cosa?

Visualizzazione 8 filoni di risposte
  • Autore
    Risposte
    • #106475
      Up
      0
      Down
      ::


      Vecchissima storia, e domanda posta letteralmente migliaia di volte. 😉 «‘Sta cosa» succede perché LaTeX è progettato per dare risultati tipografici di alta qualità: quando decide di non onorare uno specificatore [tt]h[/tt] dato nell’argomento opzionale dell’ambiente [tt]figure[/tt], vuol dire che ha un buon motivo per farlo, e di solito è meglio lasciare la figura, o la tabella, là dove LaTeX decide di metterla.

      Se assolutamente si vuole che la tabella rimanga ancorata alla posizione nella quale si trova nel codice sorgente, ci sono essenzialmente due soluzioni, proposte da altrettante “scuole di pensiero”. Nel caso in esame, propenderei per quella che suggerisce di caricare il pacchetto [tt]float[/tt] e poi sostituire`\begin{figure}[htp!]`con`\begin{figure}[H]`(notare la maiuscola). Lo specificatore [tt]H[/tt], introdotto appunto dal pacchetto [tt]float[/tt], va usato sempre da solo e serve proprio a ordinare a LaTeX di piazzare la figura esattamente dove essa compare nel sorgente e in nessun altro posto.

      Ma, ripeto, è meglio non farlo.

      Ciao.


      Gustavo

    • #106476
      Up
      0
      Down
      ::


      Ti ringrazio per la risposta. Devo farlo per forza perchè ha un senso con quello che sto facendo. Se sapevo che andava a finire così mi sarei adattato prima.
      Per curiosità, qual è il motivo per cui è meglio evitare?

    • #106477
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Il motivo è semplice: non è facile piazzare un oggetto di grandi dimensioni in una pagina dove non c’è abbastanza posto; quindi l’ambiente figure (e l’ambiente table) fanno “flottare” il loro contenuto in pagine successive dove ci sia abbastanza posto per metterle.

        D’altra parte LaTeX oltre al comando \caption per creare una didascalia, permette di riferirsi in modo simbolico ad oggetti numeriti che non si trovino di seguito nel discorso; per cui avendo usato il comando \label{fig:duefigure} dopo il comando \caption con il suo argomento, nel testo scriverai “…la figura~[tt]\ref[/tt]{fig:duefigure}…” e non “…la figura seguente…”. Dovunque sia la figura il riferimento incrociato eseguito con i comandi \label e \ref (e anche \pageref se vuoi indicare la pagina dove si trova l’oggetto) il riferimento simbolico eseguito mediante l’etichetta “fig:duefigure” permette di trovare al figura anche se non si trova immediatamente adiacente al testo che vi fa riferimento.
        Tra l’altro mi pare di ricordare che se anche il titolo della sezione fosse a inizio pagina, LaTeX non metterebbe al figura lì se non è preceduta da qualche riga di testo; perché? Perché tipograficamente sarebbe un errore.

        Fidati: se LaTeX non lo fa spontaneamente, è perché le regole tipografiche lo considerano un errore. Come dice la guida L’Arte di scrivere con LaTeX, “LaTeX non è Word”. Con Word lo puoi fare,ma Word non ha nessuna pretesa di fare le cose tipograficamente corrette. (Word di Office è solo un esempio, perché la stessa affermazione di applica a Writer di OpenOffice e di LibreOffice, e a Pages del Mac; tutti ottimi programmi, ma non adatti da soli a produrre stampati tipograficamente corretti).

        Non usare mai il codice [tt]H[/tt] fatto apposta per bloccare la figura o la tabella in una data posizione nel flusso del tuo discorso; ti potrebbe andare bene con delle figurine piccole piccole che consumano poche righe di testo (se le due figure appaiate fossero alte l’equivalente di 5 righe di testo, l’ingombro complessivo dalla figura con la o le didascalie e gli spazi verticali di separazione non sarebbe inferiore a 9 righe, quindi se ti capita questo “mattone” verso la fine della pagina, è facile che non ci stia e che venga riportato alla pagina successiva con conseguente allargamanto degli spazi fra i capoversi o in modo da lasciare mozza la pagina precedente.

        Un metodo alternativo a quello suggeritoti da Gustavo potrebe essere quello di non usare il pacchetto float e i posizionatore [tt]H[/tt], ma di usare l’ambiente center e il comando \captionof del pacchetto caption che stai già usando. Il risultato sarebbe ugualmente aleatorio e generalmente di pessima qualità tipografica.

        Per sincerartene prova entrambi i metodi aggiungendo un po’ di testo (anche solo una sfilza di bla bla) prima della tua figura in modo da mandarla verso il fondo della pagina; e ti rendi conto da solo della porcheria tipografica che ne viene fuori.

      • #106478
        Up
        0
        Down
        ::


        Ah ho capito. A dire il vero è la prima volta che uso questo linguaggio (e per scopi di puro autolesionismo) perchè l’avevo già scritta su Word e nessuno mi ha imposto di usare LaTeX però dato che tutti lo usano, ho voluto cimentarmi pure io, andandomi a cercare nella guida le cosa che non capisco o i codici che mi servono.
        Ho “risolto” imponendo il parametro H e usando
        `\newpage`
        dato che ogni paragrafo è lungo più o meno una pagina o poco più, riesco a gestire bene le immagini in questo modo.

        Ho giusto un altro problema. Dato che ho letto che il pacchetto subfigure è obsoleto, mi sono buttato sul subfig e quindi ho riscritto il codice che ho messo sopra con questo
        `\begin{figure}[H]
        \subfloat[\textit{bla bla bla}]
        {\includegraphics[height=6.85cm, width=7.26cm, keepaspectratio]{file1}}
        \hfill
        \subfloat[\textit{bla bla bla}]
        {\includegraphics[height=6.85cm, width=7.26cm, keepaspectratio]{file2}}
        \hfill
        \caption{}
        \end{figure}`
        che mi affianca le due immagini su una riga unica della pagina, con la didascalia per la singola immagine e la didascalia globale che identifica il gruppo di immagini. Nell’ultima immagine (quella di destra file2) mi si forma una riga spessa nera, come se il codice stesse riempiendo quella riga con quello che vuole per far occupare tutta la pagina. E’ colpa di \hfill?
        Sembra però che succeda solo con le immagini “più grosse”, perchè con quelle più piccole usando lo stesso codice, non succede.
        Ho notato che la stessa cosa viene fuori anche sopra la pagina, nella riga del nome del paragrafo (un po’ lungo) accanto alla numerazione della pagina. Allego alcune immagini per capirci
        [attachment=1617]Immagine.png[/attachment]

        [attachment=1618]Immagine2.png[/attachment]

        Inoltre ho notato che usando keepaspectratio se le dimensioni che impongo io non mantengono le proporzioni, me le ridimensiona in modo da farle mantenere (cosa che mi piace), ma non capisco perchè non mi mantenga la linea guida della pagina in modo da avere immagini e testo allineati sui margini destro e sinistro. Su Word l’ho fatto a mano utilizzando i quadretti che si possono far vedere e quindi ho ridimensionato le immagini che sforano (o quelle affiancate) in modo da avere il margine uniforme. Il testo è giustificato, mentre le immagini non mantengono la giustificazione del testo.

        Edit: stessa cosa con le tabelle

        Attachments:
        You must be logged in to view attached files.
      • #106479
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Quelle barre nere dicono che hai impostato l’opzione draft e che quegli oggetti sporgono nel margine; cioè sono troppo grandi.

          Come con word hai ridimensionato le immagini con l’aiuto dei quadretti, così con LaTeX devi ridimensionare le immagini non facendo riferimento ai millimetri ma a frazioni della giustezza; se la immagine di sinistra è larga 0.5\textwidth, quella di destra non può essere anche lei di 0.5\textwidth, perché le due immagini occuperebbero tutto lo spazio disponibile e non si potrebbe mettere nessun distanziatore in mezzo; lo spazio distanziatore che ci vuole, quindi la somma delle due larghezze deve essere inferiore a \textwidth; con le frazioni di \textwidth la loro somma deve essere inferiore ad 1.

        • #106480
          Up
          0
          Down
          ::


          Perfetto. Sistemato con un \hspace{2mm} e 0.49\textwidth

          Per la tabella come glielo dico? Ho provato ad imporle la larghezza ma mi da errore.
          `\begin{tabular}{l*{6}{cc} 1.0\textwidth}
          \toprule
          & Invasivo & Non Invasivo & Desmoplastico & Espansivo & Infiltrativo & Lobulare \\
          \midrule
          $\epsilon_s$ & 54.25 & 54.75 & 54.25 & 54.5 & 55 & 53 \\
          $\epsilon_{\infty}$ & 5.25 & 5 & 4.75 & 5.5 & 6 & 5.5\\
          $\tau (ps)$ & 9 & 9 &9 & 9 & 9 & 10 \\
          $\alpha$ & 0.07 & 0.08 &0.07 & 0.07 & 0.04 & 0.08 \\
          $\sigma$ & 0.9 & 0.9 & 0.9 & 0.9 & 0.9 & 0.8 \\
          \bottomrule
          \end{tabular}`

          Tra l’altro, è possibile fare una tabella unica ma visualizzarne due separate? Vorrei avere in una riga la tabella con le prime due colonne. una separazione e la tabella accanto con le altre due colonne. Su Word l’ho risolta facendo una colonna che fa la separazione che volevo io e le ho nascosto i bordi che mi davano fastidio. In questo modo ho una tabella unica ma la visualizzo come se fossero 2. Si può fare la stessa cosa qui o devo per forza fare due tabelle separate? In questo modo ma che venga identificata come tabella 1.1 (ad esempio), non come due tabelle 1.1a e 1.1b o 1.1 e 1.2

          `————————————- ————————-
          invasivo non invasivo esp lob inf etc
          ————————————- ————————-`

        • #106481
          lorenzo.pantieri
          Partecipante
            Up
            0
            Down
            ::

            Shika93″ post=106567Per la tabella come glielo dico?

            Leggiti il paragrafo sulle tabelle del’Arte. In particolare, colonne di tipo p e pacchetto tabularx.

          • #106482
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Ci credo bene che ti dia errore: non puoi inventarti al sintassi di un linguaggio di programmazione; o lo impari, o lasci perdere.
              La sintassi del comando tabula prevede che il suo argomento contenga la descrizione delle colonne e dei loro separatori; Ora tu lo useresti per metterci anche la larghezza. Errorissimo!
              Per comporre una tabella di larghezza specificata ci sono diversi metodi;
              1) l’ambiente tabular* che vole la seguente sintassi [tt]\begin{tabular*}{}{}[/tt]; ovvimante devi terminare la tabella con [tt]\end{tabular*}[/tt]. Almeno un separatore di colonna deve contenere una lunghezza espandibile; Vedere dettagli nella guida tematica Il LaTeX Reference Manual commentato nella sezione Documentazione di questo forum.
              2) usare l’ambiente tabularx; se ne legge la documentazione aprendo un terminale o finestra comandi, scrivendoci dentro texdoc tabularx, battendo il tasto “invio” e leggendo la documentazione nella finestrs che si apre.
              3) Usando il pacchetto widetable; la documentazione di legge con texdoc widetable.
              4) altri pacchetti che però non cito perché quelli citati sono più che sufficienti.

              Ma ti stai inventando anche la sintassi dei descrittori delle colonne: [tt]l*{6}{cc}[/tt] vuol dire: fammi una tabella di 13 colonne di cui la prima ha i contenuti delle celle allineati a sinistra, e le altre 12 sono formata da 6 coppie di celle col contenuto centrato. È questo quello che vuoi fare? Non credo, anche perché se fosse stato questo sarebbe stato molto più chiaro scriverlo nella forma [tt]l*{12}{c}[/tt].

              Fra i responsabili del forum e del gruppo è in atto una discussione per obbligare i frequentatori del forum a leggere le guide messe loro a disposizione gratuitamente e con un lavoro di volontariato non indifferente; ognuna delle guide nella sezione Documentazione di questo forum ha richiesto da un minimo di 4 settimane a un periodo lunghissimo, di diversi anni, per scriverle ed aggiornarle; a cosa serve scrivere le guide se non vengono lette? Perché fare domande su cose che sono spiegate in ogni guida, in diversi modi a seconda del modo di esprimersi dell’autore, con e senza esempi. Per favore, non abusare del forum e dei volontari che vi si dedicano. Siamo qui tutti per aiutare, ma non vorremmo rispondere sempre o spesso: vai nella pagina xx della guida yy dove trovi la risposta al tuo quesito.

              Una risposta che non trovi è quella alla tua ultima domanda; se si può comporre un’unica tabella da mostrare come tabelle distinte.
              Quello che hai fatto con Word si può fare anche con LaTeX; ma devi sempre domandarti se la cosa ha senso e se ci sta nella pagina; ricorda che per Word una tabella è un oggetto grafico fatto di tanti riquadri giustapposti, separabili a fine riga e a fine pagina, con il contenuto sempre testuale; per LaTeX una tabella è un unico oggetto che forma una matrice; in matematica l’ambiente si chiama, appunto, [tt]array[/tt]; nel testo si chiama [tt]tabular[/tt]; la differenza sta solo nella impostazione predefinita dei contenuti delle celle, fermo restando il fatto che la stessa matrice può contenere celle con contenuti matematici in un [tt]tabula[/tt] e contenuti testuali un un [tt]array[/tt]; Word in generale non distingue fra contenuto matematici e testuali, e infatti per scrivere matematica in modo decente con Word/Writer/Pages si sudano più camicie di quelle che occorrono per imparare ad usare LaTeX.

            • #106483
              Up
              0
              Down
              ::


              Con un po’ di ritardo, per la tabella ti propongo una variante leggermente diversa, che impiega la colonna [tt]S[/tt] del pacchetto [tt]siunitx[/tt]. Ho invertito le colonne e le righe, ma con uno scopo ben preciso: in questo modo si può osservare a colpo d’occhio le differenze tra i vari parametri dei i vari oggetti che elenchi nella tabella. Questo è ulteriormente facilitato dalla colonna [tt]S[/tt] che allinea i valori rispetto al punto decimale.
              `
              \documentclass[12pt,a4paper,twoside,openright]{book}
              \usepackage{siunitx}
              \usepackage{booktabs}
              \begin{document}
              \begin{tabular}{lS[table-format=2.2]S[table-format=1.2]S[table-format=2.1]S[table-format=1.2]S[table-format=1.1]}
              \toprule
              & {$\epsilon_s$} & {$\epsilon_{\infty}$} & {$\tau (ps)$} & {$\alpha$} & {$\sigma$} \\
              \midrule
              Invasivo & 54.25 & 5.25 & 9 & 0.07 & 0.8 \\
              Non Invasivo & 54.75 & 5 & 9 & 0.08 & 0.9 \\
              Desmoplastico & 54.25 & 4.75 & 9 & 0.07 & 0.9 \\
              Espansivo & 54.5 & 5.5 & 9 & 0.07 & 0.9 \\
              Infiltrativo & 55 & 6 & 9 & 0.04 & 0.9 \\
              Lobulare & 53 & 5.5 & 10 & 0.08 & 0.9 \\
              \bottomrule
              \end{tabular}
              \end{document}
              `

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

          Go to top