[RISOLTO] Codifica errata per la sillaba “fi”

  • Creatore
    Topic
  • #90422
    Up
    0
    Down
    ::


    Buongiorno a tutti,
    sto scrivendo un documento in latex che per semplicità ho ridotto ai minimi termini.
    Questo è il codice del documento principale:
    `\documentclass[12pt,a4paper,twoside,openright]{book}

    \usepackage[italian]{babel}
    \usepackage[utf8]{inputenc}

    \begin{document}
    \include{ringraziamenti}

    \end{document}
    `
    Mentre il capitolo “ringraziamenti” incluso è questo:
    `\chapter*{Ringraziamenti}
    fi fi fi`

    Il pdf (in allegato) risultante codifica le sillabe “fi” in modo incomprensibile, cioè se provo a copiare i vari “fi fi fi” dal pdf in un documento qualsiasi mi da dei caratteri sconosciuti.

    Secondo voi cosa può essere? Ho provato anche a cambiare font usando `\renewcommand{\familydefault}{\sfdefault}` ma l’errore si presenta comunque.

    Grazie in anticipo

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


        Ciao, benvenuto!
        se aggiungi anche i comandi relativi alla codifica del font risolvi il problema:`\usepackage[T1]{fontenc}`. Così facendo se fai un copia-incolla dal tuo pdf la legatura viene gestita come due lettere separate. (e qella riga di codice andrebbe sempre usata!) La lettura della documentazione di fontenc è certamente istruttiva…

        Fran

      • #90424
        Up
        0
        Down
        ::


        Purtroppo non ha risolto.
        La cosa strana è che tutte gli altri caratteri li copia correttamente, la “f” e la “i” prese separatamente sono codificate normalmente, il problema è solo per “fi”. 😥

        Altre idee?

      • #90425
        franen
        Partecipante
          Up
          0
          Down
          ::


          Strano, perché qui da me il tuo esempio riproduceva l’errore e l’aggiunta di fontenc permetteva di fare un corretto copia-incolla dal pdf.
          Il fatto che il problema si ponga solo quando la f e la i sono vicine dipende dal fatto le LaTeX genera una “legatura”, cioè usa un altro carattere per stampare “fi”.
          A questo punto non so come altro aiutarti, qui se ne è parlato: http://tex.stackexchange.com/questions/33476/why-cant-fi-be-separated-when-being-copied-from-a-compiled-pdf , forse dipende dal tuo visualizzatore (io ho usato un vecchio adobe reader 9)

          Fran

        • #90426
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Il problema si ripresenta regolarmente nonostante la specifica della codifica utf8 per il file sorgente e la codifica T1 epr il file di uscita; e la causa è la legatura.

            Allora può darsi che il rpoblmea si semplifichi con la codifica T1 per l’uscita, ma ne ho seri dubbi; il problema si risolve stando attenti che nel file sorgente non compaia la legatura.

            Mi spiego meglio: quando si usa la codifca utf8 questa non viene immediatamante seguita dalla lettura del file *enc.def come per le altre codifiche a 8 bit; essa viene dilaziona al momneto del \begin{document} quanto tutto ciò che riguarda i font è già stato specificato; a quel momento sono note tutte le codifiche da usare per le uscite; OT1, T1, LY1, eventualmente LGR, T2A, eccetera. A quel punto vengono ricodificati tutti i caratteri utf8 codificati con più di un byte e che sono presenti nei font di uscita; quindi, se vogliamo, anche la legatura fi, o ffi, o fl, o ffl possono venire codificate correttamnte, in quanto non appartengono alla serie di font a aASCII codificati a 7 bit, che formano al prima mezza pagina dei font UNICODE.
            Quando però copi da un file PDF avendo composto con un font che non è UNICODE, come succede per i fotn Type1 che si usano con la codifica T!, meno che mai con i font LGR ecc., vengono copiate delle legature che erano presenti in quei font, ma che non corrispondono a codici né unicode né a nessun’altra codifica. Se incolli questi caratteri in una finestra di un editor che per sua natura no usa di default le legature, probabilmente nella finestra di editing il carattere appare correttamante, ma successivamente il pacchetto inputenc con l’opzione utf8 non riesce a convertirlo nella sequenza dei due o più byte che corrispondono alla legatura T1, e quindi componendo appaiono caratteri strani. Oppure appare il warning che il carattere fi (legato) non ha un corrispondente e non può essere codificato. risultato restano nel flusso di caratteri da inviare all’uscita nel documento composto due o più bite che non hanno nessuna significato epr gli umani.

            Se si esamina con molta attenzione il file dove si è copiata la legatura, la si cancelli sostituendola con i due caratteri slegati, e tutto file liscio; questa operazione può venire eseguira con un find&replace globale, cosicché non si sostituisce una sola istanza, ma si sostituiscono tutte le istanze dei caratteri legati.

            Non è tutto esatto quello che ho scritto, ma rende l’idea. Il fatto che a @franen sia andato tutto a posto esplicitando la codifica T!, secondo me è un caso, mentre non sarebbe, anzi non è un caso se la cosa si è aggiustata da sola perché usa un editor diverso con un diverso font’d’entrata e quindi salva i caratteri immessi i modo diverso.

            Capisco che questa spiegazione sia complessa e volutamente imprecisa, perché sarebbe troppo complicato verificare quello che ho detto andando a leggere i codici dei vari pacchetti nominati e i file .def o .dfu coinvolti nelle specificazioni di codifica, ma sostanzialmente la cosa dovrebbe essere chiara: quando succedono queste cose, si eseguano delle sostituzioni globali dei glifi legati con i corrispondenti caratteri slegati.

            PS: dopo aver inviato il messaggio precedente, sono andato ad aprire il file t1enc.dfu che viene usato da input enc per mappare i caratteri UNICODE in entrata nei comandi interni di LaTeX per gestire quei glifi; il file si trova (con Texlive) in texlive/2013,texmf-distr/tex/latex/base/
            Se si scorrono le varie mappature non ce ne è nessuna per gestire le legature, perché in effetti non dovrebbe essercene bisogno; le legature sono una proprietà del font, non una proprietà della codifica.

          • #90427
            franen
            Partecipante
              Up
              0
              Down
              ::


              Grazie Claudio della spiegazione.
              per chiarezza aggiungo che nel sorgente tex io non ho inserito legature, e suppongo non lo abbia fatto nemmeno @nedyar.

            • #90428
              Up
              0
              Down
              ::


              Grazie ad entrambi.

              Non avevo mai sentito prima il concetto di legatura, detto ciò non ho inserito la legatura nel file sorgente, forse però il mio editor lo fa in automatico, uso TeXstudio 2.4.
              Ho provato a usare il pacchetto `\usepackage{cmap}` come suggerito dal link di Fran ma senza alcun risultato.

              Cosa posso fare?

            • #90429
              Up
              0
              Down
              ::

              nedyar” post=89946Grazie ad entrambi.

              Non avevo mai sentito prima il concetto di legatura, detto ciò non ho inserito la legatura nel file sorgente, forse però il mio editor lo fa in automatico, uso TeXstudio 2.4.
              Ho provato a usare il pacchetto `\usepackage{cmap}` come suggerito dal link di Fran ma senza alcun risultato.

              Cosa posso fare?

              Se modifico il tuo file facendolo diventare
              `\documentclass[12pt,a4paper,twoside,openright]{book}
              \usepackage[T1]{fontenc}
              \usepackage[utf8]{inputenc}

              \usepackage[italian]{babel}

              \begin{document}
              \chapter*{Ringraziamenti}
              fi fi fi

              \end{document}`
              ([tt]\include[/tt] è del tutto irrilevante) e guardo il PDF con Adobe Reader, copio la riga con le tre legature e incollo sulla finestrella a sfondo verde in http://rishida.net/tools/conversion/ ottengo, nella riga delle conversioni in esadecimale
              `0066 0069 0020 0066 0069 0020 0066 0069`
              che significa una corretta interpretazione come [tt]f+i+spazio+f+i+spazio+f+i[/tt].

              Se proprio insisti a usare la codifica OT1 (cioè a non caricare fontenc con l’opzione T1), puoi ugualmente ottenere l’interpretazione corretta con cmap devi chiamarlo con
              `\usepackage[resetfonts]{cmap}`
              Ma gli svantaggi di OT1 rispetto a T1 per l’italiano sono talmente tanti che non vale proprio la pena.

              Dov’è il problema? Semplice, i font Type1 che vengono usati quando T1 è la codifica di output possiedono la risorsa CMAP al loro interno, quelli corrispondenti alla codifica OT1 no (del resto sono stati prodotti molto tempo prima che il formato PDF prendesse piede).

              Ciao
              Enrico

            • #90430
              Up
              0
              Down
              ::


              Grazie per il suggerimento, ho provato e non funziona 🙁
              Incollando i caratteri nel link che mi hai postato inserisce uno spazio come quello della barra spaziatrice.

              Nemmeno Foxit Reader lo interpreta correttamente 😥

            • #90431
              alegenn
              Partecipante
                Up
                0
                Down
                ::

                nedyar” post=89955Grazie per il suggerimento, ho provato e non funziona 🙁
                Incollando i caratteri nel link che mi hai postato inserisce uno spazio come quello della barra spaziatrice.

                Nemmeno Foxit Reader lo interpreta correttamente 😥

                Che distribuzione TeX usi?

              • #90432
                Up
                0
                Down
                ::

                alegenn” post=89956

                Che distribuzione TeX usi?

                Miktex 2.9

              • #90433
                Up
                0
                Down
                ::


                Ho risolto!!!

                È bastato aggiungere la riga
                `\usepackage{lmodern}`
                Non so da cosa dipendeva l’errore, forse il problema era che usavo font errati, BOH.

                L’importante è aver risolto, grazie a tutti.

              • #90434
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Mi fa piacere che lmodern ti abbia risolto il problema, ma la soluzione vera sta specialmente nell’aver specificato la codifica T!, l’hai fatto vero? se non l’hia fatto e hai risolto ugualmente il tuo problema, allora sei fortunato (cioè il risultato è frutto della fortuna).

                  Le legature fi ffi, fl e ffl sono presenti sia nei font CM (codificati OT1, la codifica di default e font di default), sia nel font CM-Super (codificati (T1, e usati di default quando specifichi la codifica T1), sia nei font Latin Modern (usati se specifichi l’uso di questa collezione di font sia in codifica OT1, sia in codifica T1 sia in altre codifiche). Quindi non è la questione se i font contengano quelle legature (tutti i font che ti ho indicato le contengono); dipende da come interagiscono la specifica della codifica utf8 a inputenc, con la codifica specificata all pacchetto fontenc; e dipendono dal fatto che copiando e incollando si copi e incolli anche la legatura oppure si incollino i caratteri slegati.

                • #90435
                  Up
                  0
                  Down
                  ::

                  OldClaudio” post=89995Mi fa piacere che lmodern ti abbia risolto il problema, ma la soluzione vera sta specialmente nell’aver specificato la codifica T!, l’hai fatto vero? se non l’hia fatto e hai risolto ugualmente il tuo problema, allora sei fortunato (cioè il risultato è frutto della fortuna).

                  Le legature fi ffi, fl e ffl sono presenti sia nei font CM (codificati OT1, la codifica di default e font di default), sia nel font CM-Super (codificati (T1, e usati di default quando specifichi la codifica T1), sia nei font Latin Modern (usati se specifichi l’uso di questa collezione di font sia in codifica OT1, sia in codifica T1 sia in altre codifiche). Quindi non è la questione se i font contengano quelle legature (tutti i font che ti ho indicato le contengono); dipende da come interagiscono la specifica della codifica utf8 a inputenc, con la codifica specificata all pacchetto fontenc; e dipendono dal fatto che copiando e incollando si copi e incolli anche la legatura oppure si incollino i caratteri slegati.

                  Mi sa che per una volta sono stato fortunato, ho sì usato la codifica T1 ma per sfizio ho provato a commentare quella riga e il problema non si presenta più. Sicuramente è più corretto il suggerimento che mi avete dato, cioè che il problema era nella codifica, infatti d’ora in avanti continuerò ad usarlo, ma, per qualche strano motivo, non ha risolto.
                  Sono arrivato a questa soluzione per caso notando che il font utilizzato con la codifica T1 era di tipo bitmap, cercando un po’ in rete ho risolto aggiungendo lmodern che casualmente ha risolto il mio problema originario. 😎

                • #90436
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::

                    nedyar” post=89996

                    Mi fa piacere che lmodern ti abbia risolto il problema, ma la soluzione vera sta specialmente nell’aver specificato la codifica T!, l’hai fatto vero? se non l’hia fatto e hai risolto ugualmente il tuo problema, allora sei fortunato (cioè il risultato è frutto della fortuna).

                    Le legature fi ffi, fl e ffl sono presenti sia nei font CM (codificati OT1, la codifica di default e font di default), sia nel font CM-Super (codificati (T1, e usati di default quando specifichi la codifica T1), sia nei font Latin Modern (usati se specifichi l’uso di questa collezione di font sia in codifica OT1, sia in codifica T1 sia in altre codifiche). Quindi non è la questione se i font contengano quelle legature (tutti i font che ti ho indicato le contengono); dipende da come interagiscono la specifica della codifica utf8 a inputenc, con la codifica specificata all pacchetto fontenc; e dipendono dal fatto che copiando e incollando si copi e incolli anche la legatura oppure si incollino i caratteri slegati.

                    Mi sa che per una volta sono stato fortunato, ho sì usato la codifica T1 ma per sfizio ho provato a commentare quella riga e il problema non si presenta più. Sicuramente è più corretto il suggerimento che mi avete dato, cioè che il problema era nella codifica, infatti d’ora in avanti continuerò ad usarlo, ma, per qualche strano motivo, non ha risolto.
                    Sono arrivato a questa soluzione per caso notando che il font utilizzato con la codifica T1 era di tipo bitmap, cercando un po’ in rete ho risolto aggiungendo lmodern che casualmente ha risolto il mio problema originario. 😎

                    Per carità non voglio insistere, ma guarda il file che ti allego; spero che compaia come compare da me, visto che uso font aprticolari e editor specifici; leggi i commenti e dopo \end document guarda i messaggi d’errore. Tieni presente come ho agito, puoi provare a ripetere l’esperimento compilando solo la prima riga di testo commentando le righe successive e togliendo i commenti dai pacchetti usati secondo quanto dicono le righe di commento; poi copia dal file appena prodotto l’ultima riga e ricopilala sotta alla riga appena compilata, mdifica la situazione dei pacchetti da usare, e ricompila; via avanti così; Noterai che finché uso il font Monaco nell’editor TeXshop (e potrei usare lo stesso font con TeXstudio configurando l’editor in modo adatto, così come potrei scegliere per TeXShop il font Arial–la differenza fra Monaco e Arial è che il primo e monospaziato, mentre il secondo è proporzionale; il primo non ha le legature, il secondo sì)`% !TEX TS-program = pdflatex
                    % !TEX encoding = UTF-8 Unicode
                    \documentclass[12pt]{article}
                    \usepackage[utf8]{inputenc}
                    %\usepackage[T1]{fontenc}
                    %\usepackage{lmodern}
                    \begin{document}

                    % % % % % % % % % % % % % % % % % % % TEXSHOP % % % % % % % % % % % % % % % % % % % % % %

                    % Nei quattro esempi qui sotto TeXShop usa il font monospaziato Monaco

                    affine afflato difficile finale fluido

                    % Ora copio dal file PDF e incollo qui sotto, avendo composto con LatinModern e T1

                    affine afflato difficile finale fluido %Si noti che le lettere sono state copiate slegate

                    % Ora copio dal file PDF e incollo qui sotto, avendo composto senza LatinModern ma con T1

                    affine afflato difficile finale fluido %Si noti che le lettere sono state copiate slegate

                    % Ora copio dal file PDF e incollo qui sotto, avendo composto senza LatinModern ma con OT1

                    affine afflato difficile finale fluido %Si noti che le lettere sono state copiate slegate

                    % % % % % % % % % % % % % % % % % % % % % TEXSTUDIO % % % % % % % % % % % % % % % % % %
                    % Nei quattro esempi qui sotto ho usato Texstudio con il font Arial

                    % Ora copio dal file PDF e incollo qui sotto, avendo composto senza LatinModern ma con OT1
                    % come si vedem ho copiato da Adobe Reader le legature non compaiono nemmeno nella schemrata, ma ci sono.

                    ane aato dicile nale
                    uido

                    I messaggi d'errore sono

                    \end{document}
                    I messaggi d'errore sono

                    ! Package inputenc Error: Keyboard character used is undefined
                    (inputenc) in inputencoding `utf8'.

                    See the inputenc package documentation for explanation.
                    Type H for immediate help.

                    l.29 a^^N
                    ne a^^Oato di^^Ncile ^^Lnale
                    You need to provide a definition with \DeclareInputText
                    or \DeclareInputMath before using this key.

                    ! Package inputenc Error: Keyboard character used is undefined
                    (inputenc) in inputencoding `utf8'.

                    See the inputenc package documentation for explanation.
                    Type H for immediate help.

                    l.29 a^^Nne a^^O
                    ato di^^Ncile ^^Lnale
                    You need to provide a definition with \DeclareInputText
                    or \DeclareInputMath before using this key.

                    ! Package inputenc Error: Keyboard character used is undefined
                    (inputenc) in inputencoding `utf8'.

                    See the inputenc package documentation for explanation.
                    Type H for immediate help.

                    l.29 a^^Nne a^^Oato di^^N
                    cile ^^Lnale
                    You need to provide a definition with \DeclareInputText
                    or \DeclareInputMath before using this key.
                    `Hai seguito i messaggi d’errore? Il file è sempre lo stesso, quello che si copia lo si incolia nella finestra dell’editor configurato per usare font diversi; e il risultato è diverso.

                    Ripeto quindi quello che ho detto; le legature nel file d’entrata .tex NON devono essere presenti; le lettere accentate non sono legature, sono semplici glifi; le legature che si producono nel font di uscita sono il risultato delle proprietà del font; se le copi e incolli in un altro file sorgente, sempre codificato utf8, quei particolari glifi non sono presi in considerazione né da \inputenc con l’opzione utf8, nè da fontenc con l’opzione T1, Sembra che il pacchetto cmap possa mettere a posto le cose, ma è certo che usando font Type 1 a 256 glifi, i glifi delle legature hanno indirizzi numerici inferiori a 32 (il codice dello spazio) e non hanno quindi un indirizzo unicode valido. Usando i nomi dei glifi, invece che gli indirizzi numerici, è possibile superare questa “incongruenza” e cmap svolge questo delicato incarico di rimappare gli indirizzi ai nomi.

                    Sempre per approfondire, ma ritenendo il tuo problema risolto per scienza o per fortuna, dai un’occhiata alla guida tematica sui font; la figura 1.1 rappresenta la tabella dei fon codificati OT1, e vedi che le legature della lettera f sono tutte nella prima riga della tabella verso destra con indirizzi esadecimali che vanno da “0B a “0F; i font in codifica T sono rappresentati nella tabella 1.3, dove le legature della lettera f sono alla fine della seconda riga con indirizzi esadecimali che vanno da “1B a “1F; questi indirizzi esadecimali inferiori a “20 sono tutti vuoti nella tabella unicode (che non è riportata perché conterrebbe centinai di miglia di glifi); la prima pagina unicode negli indirizzi da “20 a “FF contiene i caratteri ASCII’, invece nelle prime 32 posizioni, da “00 a “1F, la tabella ASCII contiene i caratteri di controllo per le trasmissioni in telescrivente (ormai quasi del tutto abbandonate) e quelle posizioni nella tabella UNICODE sono vuote. Ecco perché i messaggi d;errore fanno riferimento a caratteri indicati, per esempio, con ^^N, che vuol dire “l’indirizzo di N diminuito di “20 esadecimale: se guardi la tabella l’indirizzo esadecimale di N, esso è “4E e se gli togli “20, ottieni “1e, cioè l’indirizzo della legatura ffi. A me la cosa non disturba più di tanto, nel senso che l’ho capita e l’ho usata a mio beneficio tante volte, ma capisco che sia un problema per chi non si occupa degli indirizzi dei glifi; e non dovrebbe preoccupare affatto perché le tabelle t1enc.def e t1enc.dfu dovrebbero essere fatte diversamente, ma purtroppo questo è quanto ci lega al passato quando in font Type1 non esistevano e meno che mai esisteva la codifica UNICODE, ma TeX e LaTeX esistevano già.

                  • #90437
                    Up
                    0
                    Down
                    ::

                    nedyar” post=89996Mi sa che per una volta sono stato fortunato, ho sì usato la codifica T1 ma per sfizio ho provato a commentare quella riga e il problema non si presenta più. Sicuramente è più corretto il suggerimento che mi avete dato, cioè che il problema era nella codifica, infatti d’ora in avanti continuerò ad usarlo, ma, per qualche strano motivo, non ha risolto.
                    Sono arrivato a questa soluzione per caso notando che il font utilizzato con la codifica T1 era di tipo bitmap, cercando un po’ in rete ho risolto aggiungendo lmodern che casualmente ha risolto il mio problema originario. 😎

                    Ah! Quelli che non installano i font CM-Super! 😉 Sinceramente non ho mai capito perché MiKTeX non li fornisce nella versione base, ma nemmeno perché la gente non installi la distribuzione completa e non ci pensi più (tranne che per aggiornare di tanto in tanto).

                    Ciao
                    Enrico

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

                Go to top