PROBLEMA: includegraphics e caratteri speciali nel nome file

  • Creatore
    Topic
  • #25570
    Up
    0
    Down
    ::


    Buongiorno a tutti,
    sto lavorando su un progetto LaTeX da qualche settimana e l’altro giorno è emerso un problema che non riesco proprio a risolvere.

    Includere un’immagine nel documento sembra cosa semplice ma c’e’ sempre qualche ostacolo da superare, ad esempio le estensioni delle immagini, gli “\” dei percorsi, i “.” nel percorso e gli spazi nei nomi dei file (o cartelle del percorso).

    Questi ostacoli li ho risolti nel seguente modo:

    Supponiamo che l’immagine sia:
    c:\cartella 1\cartella.2\nome immagine.jpg
    Con un po di ricerche intervallate da momenti di delirio 😯 sono arrivato alla soluzione che vi presento qui di seguito:
    `
    \newcommand{\mydot}{.}

    \includegraphics{\string”c:/cartella 1/cartella\mydot 2/nome immagine\string”}
    `
    o eventualmente, se si vuole specificare anche l’estensione:
    `
    \newcommand{\mydot}{.}

    \includegraphics{\string”c:/cartella 1/cartella\mydot 2/nome immagine\string”.jpg}
    `
    (volendo è possibile evitare la ridefinizione del comando “.” poichè il carattere è all’interno di una stringa)

    Comunque tutto questo funziona alla perfezione ma…
    PROBLEMA:
    cosa succede se si incontrano caratteri speciali nel percorso (e/o nome immagine) come
    £, §, …
    ad esempio:
    c:\cartella 1\cartella.2\£.jpg

    Ho tentato con
    `
    \newcommand{\mydot}{.}

    \includegraphics{\string”c:/cartella 1/cartella\mydot 2/£\string”}
    `
    ma DA ERRORE!
    e anche con…
    `
    \newcommand{\mydot}{.}
    \newcommand{\mylira}{£}

    \includegraphics{\string”c:/cartella 1/cartella\mydot 2/\mylira \string”}
    `
    DA ERRORE!

    come mai non riesco ad utilizzare la stessa tecnica del “.”? ridefinendo il carattere con \newcommand{\mylira}{£} mi da comunque errore! 🙄
    come posso risolvere il problema?

    Non vorrei arrivare alla soluzione di ripiego di rinominare il nome del file o la cartella del percorso.
    Qualsiasi idea è ben accetta 🙂

    Grazie mille in anticipo a tutti

    __
    5Qu4L0

Visualizzazione 4 filoni di risposte
  • Autore
    Risposte
    • #25571
      DMW
        Up
        0
        Down
        ::


        Puoi definirti un comando apposito
        `\newcommand{\cartellaimg}{“c:/cartella 1/cartella.2/”}`

        e poi
        `\includegraphics{\cartellaimg £}`

        Ciao

        Andrea

      • #25572
        Up
        0
        Down
        ::

        Buongiorno a tutti,
        sto lavorando su un progetto LaTeX da qualche settimana e l’altro giorno è emerso un problema che non riesco proprio a risolvere.

        Includere un’immagine nel documento sembra cosa semplice ma c’e’ sempre qualche ostacolo da superare, ad esempio le estensioni delle immagini, gli “\” dei percorsi, i “.” nel percorso e gli spazi nei nomi dei file (o cartelle del percorso).

        Questi ostacoli li ho risolti nel seguente modo:

        Supponiamo che l’immagine sia:
        c:\cartella 1\cartella.2\nome immagine.jpg
        Con un po di ricerche intervallate da momenti di delirio 😯 sono arrivato alla soluzione che vi presento qui di seguito:
        `
        \newcommand{\mydot}{.}

        \includegraphics{\string”c:/cartella 1/cartella\mydot 2/nome immagine\string”}
        `
        o eventualmente, se si vuole specificare anche l’estensione:
        `
        \newcommand{\mydot}{.}

        \includegraphics{\string”c:/cartella 1/cartella\mydot 2/nome immagine\string”.jpg}
        `
        (volendo è possibile evitare la ridefinizione del comando “.” poichè il carattere è all’interno di una stringa)

        Comunque tutto questo funziona alla perfezione ma…
        PROBLEMA:
        cosa succede se si incontrano caratteri speciali nel percorso (e/o nome immagine) come
        £, §, …
        ad esempio:
        c:\cartella 1\cartella.2\£.jpg

        Ho tentato con
        `
        \newcommand{\mydot}{.}

        \includegraphics{\string”c:/cartella 1/cartella\mydot 2/£\string”}
        `
        ma DA ERRORE!
        e anche con…
        `
        \newcommand{\mydot}{.}
        \newcommand{\mylira}{£}

        \includegraphics{\string”c:/cartella 1/cartella\mydot 2/\mylira \string”}
        `
        DA ERRORE!

        come mai non riesco ad utilizzare la stessa tecnica del “.”? ridefinendo il carattere con \newcommand{\mylira}{£} mi da comunque errore! 🙄
        come posso risolvere il problema?

        Non vorrei arrivare alla soluzione di ripiego di rinominare il nome del file o la cartella del percorso.
        Qualsiasi idea è ben accetta 🙂

        Dovrebbe essere ovvio riportare il sistema operativo in uso (dai c: si deduce qualche varietà di Windoze), la codifica di input usata (ansinew, latin1 o utf8?) e almeno la prima riga del messaggio di errore.

        Se non usi utf8, \string£ dovrebbe andare bene. Se usi utf8, direi che non c’è soluzione se non quella di evitare caratteri speciali nei nomi di file. Segui anche il consiglio di Andrea e non sottovalutare anche l’uso di \graphicspath (se cerchi nel forum trovi sicuramente qualcosa al riguardo).

        Ciao
        Enrico

      • #25573
        Up
        0
        Down
        ::


        Ciao,

        Per Andrea:
        grazie per la risposta.
        Purtroppo \graphicspath avevo già tentato di utilizzarlo, ma avevo abbandonato l’idea poichè la tipologia del progetto non permette di sapere tutti i percrorsi delle immagini, quindi devo dare la possibilità di specificare il percorso completo al momento dell’inclusione dell’immagine. Inoltre il problema del carattere non lo risolve 🙁

        Per Enrico:
        ovviamente…grazie anche a te per la risposta.
        Scusa per le informazioni incomplete.
        Comunque è esatto, il sistema operativo è Win e la codifica è latin1.
        Il tipo di errore è:
        `
        ! LaTeX Error: File '”c:/cartella 1/cartella.2/\IeC {\pounds }”' not found.
        `

        Ho provato con \string£ e…era proprio quello che cercavo! Adesso funziona tutto!! Forse non avevo ben compreso il significato di \string…quindi in LaTeX \string permette di fare l’escape sequence del carattere che lo segue?

        Grazie mille a tutti.
        __
        5Qu4L0

      • #25574
        Up
        0
        Down
        ::

        Scusa per le informazioni incomplete.
        Comunque è esatto, il sistema operativo è Win e la codifica è latin1.
        Il tipo di errore è:
        `
        ! LaTeX Error: File '”c:/cartella 1/cartella.2/\IeC {\pounds }”' not found.
        `

        Ho provato con \string£ e…era proprio quello che cercavo! Adesso funziona tutto!! Forse non avevo ben compreso il significato di \string…quindi in LaTeX \string permette di fare l’escape sequence del carattere che lo segue?

        Esattamente. Forse è il caso di ripetere quanto già scritto altre volte su come funziona inputenc. Ogni codifica a 8 bit (escludendo però utf8, per motivi che dirò dopo) fa scelte diverse su come interpretare i byte dell’intervallo 128-255.

        Un editor interpreta i byte secondo la codifica che gli viene detto di usare (se ne è capace), mostrando i caratteri appropriati; TeX invece vede semplicemente i byte. Perciò inputenc rende attivi i byte della metà superiore, definendone il significato tramite una tabella che rispecchia la codifica richiesta. Ricordo che un carattere attivo è del tutto simile a un comando espandibile; nel caso di latin1, l’espansione del carattere che appare nell’editor come il simbolo della sterlina è “\IeC{\pound}”; a parte \IeC che serve per compiti amministrativi, il risultato è quello richiesto.

        Il comando \string agisce sul token che segue; se è un token complesso (un comando con la barra rovescia, per semplificare), emette il nome del comando preceduto da una barra rovescia, ma con tutti i caratteri di categoria 12; non è il caso che ci interessa. Se il token che segue è semplice (cioè un byte), il risultato è quel byte con codice di categoria 12: bingo! Il comando \includegraphics è contento.

        A questo punto, però, se il sistema operativo non legge i nomi dei file secondo la stessa codifica, siamo nei pasticci: il nome del file potrebbe non corrispondere. Per esempio, Mac OS X usa utf8 per i nomi dei file, quindi la soluzione non funzionerebbe. Ignoro quale codifica usi la tua versione di Windoze; se è la solita ANSI modificata, non differisce troppo da ISO-8859-1 (alias latin1), ma non c’è da farci conto per tutti i caratteri.

        Per concludere: usare, per i nomi di file, solo caratteri ASCII stampabili a 7 bit è sempre la strategia migliore.

        Ciao
        Enrico

      • #25575
        Up
        0
        Down
        ::


        Perfetto. Ora ho le idee un po più chiare (anche se non ho ben chiaro il concetto di categoria 12)

        Purtoppo però l’idea di rinominare i file o i percorsi devo scartarla (ordini dall’alto). Ovviamente questa era una delle prime soluzioni che avevo proposto.

        La mia scelta probabilmente rimarrà quindi quella dell’utilizzo di \string£ (rinunciando cosi alla portabilità), sperando di non trovare altri caratteri speciali da dover affrontare 😀

        Buona giornata e grazie ancora 😉
        __
        5Qu4L0

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

    Go to top