Assegnazione immagini a un gruppo

  • Creatore
    Topic
  • #116157
    Up
    0
    Down
    ::


    Buongiorno e grazie della disponibilità. Sono alle prime armi con LaTeX, ho letto il manule “l’Arte di scrivere con LaTeX” e il documento di “La classe TopTesi” in quanto mi sto approcciando a LaTeX proprio per la stesura della Tesi.
    Uso TeXLive 2019 su Windows 7.
    Ho cercato online e anche sul forum le domande riguardate le figure e gli oggetti multipli ma non sono riuscita a trovare una risposta a quello che cercavo. La mia domanda è:
    Esiste un modo per assegnare più immagine ad un gruppo/classe e definire le dimensione di questo gruppo/classe così da non doverle specificare manualmente per ogni immagine inserita?
    Mi spiego meglio, se per esempio voglio creare un ambiente multifigura con tutti gli elementi inseriti della stessa dimensione quello che devo fare è questo
    `\documentclass[a4paper]{report}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[italian]{babel}
    \usepackage{graphicx}
    \usepackage{caption}
    \captionsetup{tableposition=top,figureposition=bottom,font=small}
    \usepackage{subfig}
    \usepackage{float}

    \begin{document}
    \begin{figure}
    \subfloat[Prima]{\includegraphics[width=.45\textwidth]{Immagini/a}\label{a}} \quad
    \subfloat[Seconda]{\includegraphics[width=.45\textwidth]{Immagini/b}\label{b}} \\
    \subfloat[Terza]{\includegraphics[width=.45\textwidth]{Immagini/a}\label{c}} \quad
    \subfloat[quarta]{\includegraphics[width=.45\textwidth]{Immagini/b}\label{d}} \\
    \caption{Esempio: 4 figure}
    \label{fig:subfig}
    \end{figure}
    \end{document}
    `
    Come vedete ho dovuto impostare per ogni immagine le stesse dimensioni, ma se la volessi modificare dovrei farlo per tutte e 4 e visto che mi ritrovo a dover gestire più di 50 immaginimi sembra poco funzionale.
    Spero di essere stata chiara. Grazie per il vostro tempo

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #116158
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Dunque vuoi usare TOPtesi; non specifichi se hai letto la documentazione inglese o italiana; texdoc toptesi.pdf per quella inglese (che onstamente è lunga da leggere e dice relativamente poco all’utente finale) e texdoc toptesi-it per quella in italiano. Inoltre l’esempio minimo che porti usa la classe report (è usata anche da TOPtesi, che però vi aggiunge moltissimo di suo).

        Certo puoi usare il pacchetto subfig anche con TOPtesi; il tuo problema ha due risvolti: che corrispondono alle risposte sì o no alla seguente domanda: “le sotto figure da inserire a quaterne nella cinquantina di figure complessive da creare Sono tutte della stessa dimensione?

        1) Risposta sì:
        definisci nel preambolo una nuova lunghezza, diciamo con [tt]\newlength{\mysubfig}[/tt] e poi assegnale il suo valore con [tt]\selength{\mysubfig}{0.45\texwidth}[/tt]; poi all’interno del tuo file scriverai`\begin{figure}
        \subfloat[Prima]{\includegraphics[width=\mysubfig]{Immagini/a}\label{a}} \quad
        \subfloat[Seconda]{\includegraphics[width=\mysubfig]{Immagini/b}\label{b}} \\
        \subfloat[Terza]{\includegraphics[width=\mysubfig]{Immagini/a}\label{c}} \quad
        \subfloat[quarta]{\includegraphics[width=\mysubfig]{Immagini/b}\label{d}} \\
        \caption{Esempio: 4 figure}
        \label{fig:subfig}
        \end{figure}` Non risparmi molto in battitura, ma se decidi di cambiare la larghezze delle sottofigure, per esempio, 0.40\textwidth, lo fai semplicemente cambiando 0.45 con 0.40 in un posto solo,invece che in 50 X 4 = 200 posti diversi.
        1bis) per risparmiare qualcosa nella battitura puoi definirti nel preambolo una macro diciamo \MySuBFigMacro così:[tt]\newcommand\MySubFigMacro{width=0.45\textwidth} e cambi[tt][\width+\mysubfig][/tt] della soluzione precedente con [tt][\MySubFigMacro][/tt]; di nuovo se vuoi cambiare larghezza, lo fia in un posto solo, nella definizione dela macro, invece che in 200 punti diversi.

        2) La risposta è no.
        In questo caso puoi definire nel preambolo la solita lunghezza \mysubfig ma devi assegnarle un valore in ogni figura devi usare un comando di basso livello, peché [tt]\setlength[/tt] esegue una impostazione globale; quindi il codice è`\begin{figure}
        \mysubfig=0.45\textwidth
        \subfloat[Prima]{\includegraphics[width=\mysubfig]{Immagini/a}\label{a}} \quad
        \subfloat[Seconda]{\includegraphics[width=\mysubfig]{Immagini/b}\label{b}} \\
        \subfloat[Terza]{\includegraphics[width=\mysubfig]{Immagini/a}\label{c}} \quad
        \subfloat[quarta]{\includegraphics[width=\mysubfig]{Immagini/b}\label{d}} \\
        \caption{Esempio: 4 figure}
        \label{fig:subfig}
        \end{figure}`
        2bis) imposti la lunghezza di default di di 0.45\textwidth come nella soluzione 1) ma la reimposti localmente col metodo della soluzione 2) solo in quelle figure che hanno bisogno di un valore diverso
        2ter) come ulteriore variante definisci nel preambolo una macro con un argomento[tt]\newcomand\setMySubFigWidth[1]{\def\MySubFigWidth{width=#1\textwidth}[/tt]; poi assegni un valore di default sempre nel preambolo con [tt]\setMyFigWidth{0.45}[/tt]
        \poi crei le figure così:`\begin{figure}
        \setMyFigWidth{040}% da usare solo nelle figure che richiedono un coefficiente diverso da quello di default.
        \subfloat[Prima]{\includegraphics\MySubFigWidth]{Immagini/a}\label{a}} \quad
        \subfloat[Seconda]{\includegraphics[\MySubFigWidth]{Immagini/b}\label{b}} \\
        \subfloat[Terza]{\includegraphics[\MySubFigWidth]{Immagini/a}\label{c}} \quad
        \subfloat[quarta]{\includegraphics[\MySubFigWidth]{Immagini/b}\label{d}} \\
        \caption{Esempio: 4 figure}
        \label{fig:subfig}
        \end{figure}`

        Scusa la risposta chilometrica, ma il linguaggio LaTeX consente questi ed altri trucchi che consento di definire macro ancora più potenti. Non voglo esagerare, ma volendo potresti definire un nuovo ambiente figure che accetta un alro argomento facoltativo che contiene il valore del coefficiente specifico per la data figura, usando quello di default in mancanza di quello facoltativo; L’uso sarebbe ancora più semplice ma richiede delle definizioni un filino più complesse.

      • #116159
        Up
        0
        Down
        ::


        Innanzi tutto grazie per avermi risposto ed essere stato così esaustivo.

        Dunque vuoi usare TOPtesi; non specifichi se hai letto la documentazione inglese o italiana[\quote]
        Ho letto quella italiana anche se come dici tu le informazioni che ho raccolto dopo la lettura sono ben poche.
        Nell’esempio ho usato report perchè so che TOPtesi si basa sulla classe report e quindi pensavo valessero quasi gli stessi comandi per il problema che ho esposto.

        Ho testato entrambe le tue soluzioni. Le mie immagini sono all’incirca uguali quindi mi sono concentrata sui suggerimenti del punto uno.
        La prima funziona alla perfezione quindi grazie mille!
        Ho poi provato a implementare la macro perchè mi sembrava una soluzione ancora più comoda ma ho ottenuto il seguente errore: Missing \endcsname inserted

        Il codice usato è il seguente
        `\newcommand{\macroFig}{width=0,45\textwidth}

        \begin{document}

        \includegraphics[\macroFig]{Immagini/a}
        \end{document}`

        Stesso errore anche con la seconda macro che mi hai consigliato

      • #116160
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Già, forse ci vorrebbe qualche \expandafter per alterare l’ordine di sviluppo delle varie macro; mi scuso per non avere io stesso collaudato quello che ti consigliavo di fare.

        • #116161
          Up
          0
          Down
          ::

          OldClaudio” post=116585Già, forse ci vorrebbe qualche \expandafter per alterare l’ordine di sviluppo delle varie macro; mi scuso per non avere io stesso collaudato quello che ti consigliavo di fare.

          Ho cercato l’utilizzo del comando \expandafter e provato in vari modi, ma ottengo lo stesso risultato. Sai dirmi come usarlo nel modo corretto?

        • #116162
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Bè’ fra le guide nella sezione Documentazione di questo forum c’è un fascicoletto intitolato “Appunti di programmazione in TeX e LaTeX”. Non è aggiornatissimo agli ultimi sviluppi del linguaggio LaTeX3 (L3), ma è certamente un buon punto da cui cominciare. Mi pare di ricordare che contenga un intero paragrafo sull’uso si \expandafter. Quando uno conosce bene/benino TeX e LaTeX è il manualetto da consultare.

            Infatti, ti sorprenderà, ma usando due \expandafter due volte, così:`\expandafter\includegraphics\expandafter[\macroFig]{Immagini/a}` la cosa funziona perfettamente.
            Tuttavia qui ti metto un codice che ho collaudato e funziona come previsto con un’avvertenza.
            Ovviamente non dispongo delle tue figure, quindi ho caricato il pacchetto mwe (minmum working example) che mette a disposizione un certo numero di figure fasulle; tu ovviamente usa le tue figure vere. L’avvertenza è dopo il codice.
            `\documentclass[a4paper]{report}
            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage[italian]{babel}
            \usepackage{graphicx}
            \usepackage{caption}
            \captionsetup{tableposition=top,figureposition=bottom,font=small}
            \usepackage{subfig}
            \usepackage{mwe}

            \let\originalincludegraphics\includegraphics
            \renewcommand\includegraphics[2][0.45]{%
            \originalincludegraphics [width=#1\linewidth]{#2}}

            \begin{document}
            \begin{figure}\centering
            \subfloat[Prima]{\includegraphics{example-image-a}\label{a}} \quad
            \subfloat[Seconda]{\includegraphics{example-image-b}\label{b}}\\
            \subfloat[Terza]{\includegraphics{example-image-a}\label{c}} \quad
            \subfloat[Quarta]{\includegraphics{example-image-b}\label{d}}
            \caption{Primo esempio di 4 figure senza specificare il coefficiente}
            \label{fig:subfig1}
            \end{figure}

            \begin{figure}\centering
            \subfloat[Prima]{\includegraphics[0.40]{example-image-a}\label{a}} \quad
            \subfloat[Seconda]{\includegraphics[0.40]{example-image-b}\label{b}}\\
            \subfloat[Terza]{\includegraphics[0.40]{example-image-a}\label{c}} \quad
            \subfloat[Quarta]{\includegraphics[0.40]{example-image-b}\label{d}}
            \caption{Primo esempio di 4 figure specificando il fattore opzionale}
            \label{fig:subfig3}
            \end{figure}

            \end{document}`
            L’avvertenza consiste nell’usare o nell’evitare di usare il comando \let.
            Facendo come dice il codice sopra riportato, il comando \let attribuisce alla macro \originalincludegraphics, il significato originale di \includegraphics; subito dopo con \renewcommand ridefinisce la macro iniziale in modo che accetti un solo argomento facoltativo, con il valore di default pari al coefficiente 0.45. Poi lo usa all’interno delle figure come se fosse il buon vecchio \includegraphics, solo che imposta già la larghezza al 45% della giustezza corrente (\linewidth è il valore della giustezza corrente, mentre \textwidth è il valore della larghezza dello specchio di stampa — quasi sempre hanno lo stesso valore, ma è quel quasi che fa la differenza).

            Ora vedi la trappola: avendo ridefinito \includegraphics, non lo puoi usare più alla vecchia maniera; puoi usare però \originalincludegraphics al posto del vecchio comando.

            Alternativamente non assegnare l’alias \originalincludegraphics e non usarlo nella ridefinizione; definisci invece un altro comando, per esempio \myincludegraphics, e usa questo comando solo quando vuoi inserire le tue quaterne, usando, invece, il comando originale \includegraphics in ogni altro caso.

            A te la scelta.

          • #116163
            Up
            0
            Down
            ::

            OldClaudio” post=116587Bè’ fra le guide nella sezione Documentazione di questo forum c’è un fascicoletto intitolato “Appunti di programmazione in TeX e LaTeX”. Non è aggiornatissimo agli ultimi sviluppi del linguaggio LaTeX3 (L3), ma è certamente un buon punto da cui cominciare. Mi pare di ricordare che contenga un intero paragrafo sull’uso si \expandafter. Quando uno conosce bene/benino TeX e LaTeX è il manualetto da consultare.

            Infatti, ti sorprenderà, ma usando due \expandafter due volte, così:`\expandafter\includegraphics\expandafter[\macroFig]{Immagini/a}` la cosa funziona perfettamente.
            Tuttavia qui ti metto un codice che ho collaudato e funziona come previsto con un’avvertenza.
            Ovviamente non dispongo delle tue figure, quindi ho caricato il pacchetto mwe (minmum working example) che mette a disposizione un certo numero di figure fasulle; tu ovviamente usa le tue figure vere. L’avvertenza è dopo il codice.
            `\documentclass[a4paper]{report}
            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage[italian]{babel}
            \usepackage{graphicx}
            \usepackage{caption}
            \captionsetup{tableposition=top,figureposition=bottom,font=small}
            \usepackage{subfig}
            \usepackage{mwe}

            \let\originalincludegraphics\includegraphics
            \renewcommand\includegraphics[2][0.45]{%
            \originalincludegraphics [width=#1\linewidth]{#2}}

            \begin{document}
            \begin{figure}\centering
            \subfloat[Prima]{\includegraphics{example-image-a}\label{a}} \quad
            \subfloat[Seconda]{\includegraphics{example-image-b}\label{b}}\\
            \subfloat[Terza]{\includegraphics{example-image-a}\label{c}} \quad
            \subfloat[Quarta]{\includegraphics{example-image-b}\label{d}}
            \caption{Primo esempio di 4 figure senza specificare il coefficiente}
            \label{fig:subfig1}
            \end{figure}

            \begin{figure}\centering
            \subfloat[Prima]{\includegraphics[0.40]{example-image-a}\label{a}} \quad
            \subfloat[Seconda]{\includegraphics[0.40]{example-image-b}\label{b}}\\
            \subfloat[Terza]{\includegraphics[0.40]{example-image-a}\label{c}} \quad
            \subfloat[Quarta]{\includegraphics[0.40]{example-image-b}\label{d}}
            \caption{Primo esempio di 4 figure specificando il fattore opzionale}
            \label{fig:subfig3}
            \end{figure}

            \end{document}`
            L’avvertenza consiste nell’usare o nell’evitare di usare il comando \let.
            Facendo come dice il codice sopra riportato, il comando \let attribuisce alla macro \originalincludegraphics, il significato originale di \includegraphics; subito dopo con \renewcommand ridefinisce la macro iniziale in modo che accetti un solo argomento facoltativo, con il valore di default pari al coefficiente 0.45. Poi lo usa all’interno delle figure come se fosse il buon vecchio \includegraphics, solo che imposta già la larghezza al 45% della giustezza corrente (\linewidth è il valore della giustezza corrente, mentre \textwidth è il valore della larghezza dello specchio di stampa — quasi sempre hanno lo stesso valore, ma è quel quasi che fa la differenza).

            Ora vedi la trappola: avendo ridefinito \includegraphics, non lo puoi usare più alla vecchia maniera; puoi usare però \originalincludegraphics al posto del vecchio comando.

            Alternativamente non assegnare l’alias \originalincludegraphics e non usarlo nella ridefinizione; definisci invece un altro comando, per esempio \myincludegraphics, e usa questo comando solo quando vuoi inserire le tue quaterne, usando, invece, il comando originale \includegraphics in ogni altro caso.

            A te la scelta.

            Grazie per il tempo che hai dedicato al mio problema e per il codice. Funziona alla perfezione! Ora analizzerò con calma la questione del comando \let.

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

        Go to top