makeindex e lettere accentate

  • Creatore
    Topic
  • #59257
    franen
    Partecipante
      Up
      0
      Down
      ::


      Ciao.
      Ho un problema nella generazione degli indici: se una voce inizia con una lettera accentata (nel mio caso È), nell’indice analitico viene inserita all’inizio, fra i simboli. Esiste un modo per rimediarvi?

      Descrizione estesa: sto scrivendo un canzoniere col pacchetto songs, che usa un programma separato per la generazione degli indici (non ho capito perché). Sta di fatto che questo programma genera un indice separato per ogni capitolo in cui è diviso il canzoniere.
      Io vorrei anche un indice alfabetico globale. Quindi ho modificato la classe in modo che per ogni canzone indicizzi il titolo. Ora, qualche canzone inizia con lettere accentate, da qui il problema.
      Avete un qualche altro approccio da suggerirmi?

      Fran

    Visualizzazione 20 filoni di risposte
    • Autore
      Risposte
      • #59258
        Up
        0
        Down
        ::

        Ciao.
        Ho un problema nella generazione degli indici: se una voce inizia con una lettera accentata (nel mio caso È), nell’indice analitico viene inserita all’inizio, fra i simboli. Esiste un modo per rimediarvi?

        Descrizione estesa: sto scrivendo un canzoniere col pacchetto songs, che usa un programma separato per la generazione degli indici (non ho capito perché). Sta di fatto che questo programma genera un indice separato per ogni capitolo in cui è diviso il canzoniere.
        Io vorrei anche un indice alfabetico globale. Quindi ho modificato la classe in modo che per ogni canzone indicizzi il titolo. Ora, qualche canzone inizia con lettere accentate, da qui il problema.
        Avete un qualche altro approccio da suggerirmi?

        Fran

        Non tanti.
        `\index{e gia tardi@È già tardi}`
        Ciao
        Enrico

      • #59259
        franen
        Partecipante
          Up
          0
          Down
          ::


          Grazie, funziona.
          Ardisco chiedere altro: questa soluzone è manuale, e io preferirei fosse automatizzata, perché il mio file idx viene creato automaticamente. Quando inizio una canzone (con un comando \beginsong{Titolo canzone}) il titolo della canzone viene inserito nell’indice.
          Non saprei come adattare il tuo suggerimento (\index{non accentato@accentato}). C’è un qualche modo per dire a TeX che negli indici le “È” valgono come “e”?

          Grazie.
          Francesco

        • #59260
          Up
          0
          Down
          ::

          Grazie, funziona.
          Ardisco chiedere altro: questa soluzone è manuale, e io preferirei fosse automatizzata, perché il mio file idx viene creato automaticamente. Quando inizio una canzone (con un comando \beginsong{Titolo canzone}) il titolo della canzone viene inserito nell’indice.
          Non saprei come adattare il tuo suggerimento (\index{non accentato@accentato}). C’è un qualche modo per dire a TeX che negli indici le “È” valgono come “e”?

          Grazie.
          Francesco

          Puoi provare sostituendo \index{#1} nella definizione di \beginsong con \noaccentindex{#1} dando le seguenti definizioni nel preambolo
          `\makeatletter
          \def\accents@list{\do\IeC\do\`\do\'}
          \def\letters@list{\do\i{i}}
          \newcommand{\noaccentindex}[1]{%
          \begingroup
          \protected@edef\next{#1}%
          \ifnum\pdfstrcmp{\detokenize\expandafter{\next}}{\detokenize{#1}}=\z@
          \endgroup\index{#1}%
          \else
          \def\do##1{\def##1####1{####1}}\accents@list
          \def\do##1##2{\def##1{##2}}\letters@list
          \edef\next{\endgroup\def\noexpand\next{\next}}\next
          \expandafter\index\expandafter{\next @\detokenize{#1}}%
          \fi}
          \makeatother`
          Carino, eh? 🙂

          Quando LaTeX incontra una lettera accentata come “È”, la trasforma in vari passi; uno di questi è importante, quando si giunge a “\protect\IeC {\protect\`E}”. La primitiva \edef definisce un comando eseguendo l’espansione completa nel testo di sostituzione; \protected@edef è analogo, ma si ferma ai comandi preceduti da \protect semplicemente eliminandolo. Perciò
          `\protected@edef\next{È bello lì}`
          equivale a
          `\def\next{\IeC{\`E} bello l\IeC{\`\i}}`
          Il codice di \noaccindex definisce prima di tutto \next come questa “espansione limitata” dell’argomento; poi la confronta con l’argomento stesso (\detokenize serve a evitare altre espansioni): \pdfstrcmp{X}{Y} ritorna 0 se le due liste di token X e Y sono uguali dopo l’espansione. Nel nostro caso sono uguali se l’argomento di \noaccindex non contiene lettere accentate e allora ci limitiamo a dare \index{#1}.

          Se \pdfstrcmp non ritorna 0, dobbiamo eliminare gli accenti. Per questo scopo abbiamo definito la lista degli accenti che useremo, compreso \IeC.
          Siamo già in un gruppo, quindi non è un problema ridefinire comandi; diamo un significato a \do ed eseguiamo la lista degli accenti, che equivale a dare i comandi
          `\def\IeC#1{#1}\def\`#1{#1}\def\'#1{#1}`
          in modo che l’espansione di “\IeC{\`E}” dia semplicemente “E”. Facciamo lo stesso con le lettere speciali, in questo caso solo ‘\i”: il codice che viene eseguito equivale a
          `\def\i{i}`
          Il vantaggio di usare liste è che ci basta agire su \accents@list e \letters@list per aggiungere accenti o lettere che ci servano.

          Ora viene il bello:
          `\edef\next{\endgroup\def\noexpand\next{\next}}\next`
          Sappiamo che \edef espande il testo di sostituzione; nel nostro esempio \noaccindex{È bello lì}, \next ora vale “\IeC{\`E} bello l\IeC{\`\i}”. Perciò l’espansione completa di \next è, con le ridefinizioni date poco prima, “E bello li” e dunque la nostra \edef equivale a
          `\def\next{\endgroup\def\next{E bello li}}`
          A questo punto eseguiamo la macro \next che per prima cosa chiude il gruppo (dimenticandosi la sua definizione, ma ormai la sostituzione è già stata fatta! :)) ed esegue
          `\def\next{E bello li}`
          Quindi eseguiamo
          `\expandafter\index\expandafter{\next @\detokenize{#1}}`
          che equivale, dopo le espansioni indicate, a scrivere
          `\index{E bello li@È bello lì}`
          Et voilà. 😀

          Nota: nella riga \edef\next…, la sequenza \next compare quattro volte con quattro significati diversi. 8)

          Ciao
          Enrico

        • #59261
          franen
          Partecipante
            Up
            0
            Down
            ::


            Affascinante.
            Questa sera non riesco a provarlo, domani mattina mi cimento (nell’applicazione del codice, ma soprattutto nel provare a capirlo, cosa ben più ardua).

            Intanto grazie ancora.

            Fran

          • #59262
            franen
            Partecipante
              Up
              0
              Down
              ::


              Buongiorno.
              Ho fatto delle prove. La modifica funziona perfettamente con un testo standard.
              Il file .idx risulta:`\indexentry{casa}{1}
              \indexentry{e bello@è bello}{2}`
              Se la introduco invece nel mio documento ho un problema:
              Il file .idx risulta così:
              `\indexentry{Alleluia Passeranno i cieli@\songtitle }{2}
              \indexentry{E santo@\songtitle }{2}`
              Cioè lui legge la macro \songtitle perché riesce a “trasformare” le lettere accentate in non accentate, però dopo l’@ non scrive il testo giusto. Inoltre “lavora” anche le parole non accentate.
              Il file .ind risulta quindi così:`\begin{theindex}
              \item \songtitle , 2
              \indexspace
              \item \songtitle , 2
              \end{theindex}` e l’indice alla fine ha solo dei numeri di pagina, senza nulla prima.
              Se serve posso riportare il pezzo di codice che modifico, anche se da solo dice poco.`\newcommand\SB@@@beginsong{%
              \global\SB@stanzafalse%
              \setbox\SB@chorusbox\box\voidb@x%
              \SB@gotchorusfalse%
              \setbox\SB@songbox\vbox\bgroup\begingroup%
              \ifnum\SB@numcols>\z@\hsize\SB@colwidth\fi%
              \leftskip\z@skip\rightskip\z@skip%
              \parfillskip\@flushglue\parskip\z@skip%
              \SB@raggedright%
              \global\SB@transposefactor\z@%
              \global\SB@cr@{\\}%
              \protected@edef\@currentlabel{\p@songnum\thesongnum}%
              \setcounter{versenum}{1}%
              \SB@prevversetrue%
              \meter44%
              \resettitles%
              \SB@addtoindexes\songtitle\SB@rawrefs\songauthors%
              \noaccentindex{\songtitle} %MODIFICATO
              \nexttitle%
              \foreachtitle{\expandafter\SB@addtotitles\expandafter{\songtitle}}%
              \resettitles%
              \lyricfont%
              \SB@setbaselineskip%
              }`
              Ci studio su un po’.
              Grazie!
              Francesco

              EDIT: modificando la riga:`\expandafter\index\expandafter{\next @\detokenize{#1}}% ` in `\expandafter\index\expandafter{\next @#1}% ` tutto funziona.
              Il file .idx risulta:
              `\indexentry{Alleluia Passeranno i cieli@Alleluia Passeranno i cieli}{2}
              \indexentry{E santo@\IeC {\`E} santo}{2}` quindi non lavora ancora perfettamente.
              Possono esserci problemi?

            • #59263
              Up
              0
              Down
              ::

              Buongiorno.
              Ho fatto delle prove. La modifica funziona perfettamente con un testo standard.

              EDIT: modificando la riga:`\expandafter\index\expandafter{\next @\detokenize{#1}}% ` in `\expandafter\index\expandafter{\next @#1}% ` tutto funziona.
              Il file .idx risulta:
              `\indexentry{Alleluia Passeranno i cieli@Alleluia Passeranno i cieli}{2}
              \indexentry{E santo@\IeC {\`E} santo}{2}` quindi non lavora ancora perfettamente.
              Possono esserci problemi?

              Sì. Voglio appunto evitare che nel file .idx ci siano scritte schifezze. La modifica da eseguire è
              trasformare
              `\noaccindex{\songtitle}`
              in
              `\expandafter\noaccindex\expandafter{\songtitle}`
              Ciao
              Enrico

            • #59264
              franen
              Partecipante
                Up
                0
                Down
                ::

                Sì. Voglio appunto evitare che nel file .idx ci siano scritte schifezze. La modifica da eseguire è
                trasformare
                `\noaccentindex{\songtitle}`
                in
                `\expandafter\noaccentindex\expandafter{\songtitle}`
                Ciao
                Enrico

                Purtroppo non funziona, dà qualche problema con altre macro (\endsong, quella di chiusura dell’ambiente song).
                `! Extra }, or forgotten \endgroup.
                \SB@endsong …}\fi \fi \fi \fi \endgroup \egroup
                \setbox \SB@songbox \vbox …
                l.66 \endsong`

                Quali sono gli inconvenient dell’eliminare il \detokenize dal tuo codice?

                Fran

              • #59265
                Up
                0
                Down
                ::

                Sì. Voglio appunto evitare che nel file .idx ci siano scritte schifezze. La modifica da eseguire è
                trasformare
                `\noaccentindex{\songtitle}`
                in
                `\expandafter\noaccentindex\expandafter{\songtitle}`
                Ciao
                Enrico

                Purtroppo non funziona, dà qualche problema con altre macro (\endsong, quella di chiusura dell’ambiente song).
                `! Extra }, or forgotten \endgroup.
                \SB@endsong …}\fi \fi \fi \fi \endgroup \egroup
                \setbox \SB@songbox \vbox …
                l.66 \endsong`

                Quali sono gli inconvenient dell’eliminare il \detokenize dal tuo codice?

                Fran

                L’inconveniente è appunto che nel file .idx trovi un sacco di schifezze. Bisognerebbe sapere che cosa c’è in \songtitle.

                NOTA: l’errore avviene anche se si toglie la riga \noaccindex{\songtitle}. Direi che quella ridefinizione del comando non è propriamente corretta.

                Ciao
                Enrico

              • #59266
                franen
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Ti presento la mia casistica, partendo da questo codice:`\documentclass[a4paper,12pt]{book}
                  \usepackage[T1]{fontenc}
                  \usepackage[utf8]{inputenc}
                  \usepackage[italian]{babel}
                  \usepackage{makeidx}
                  \makeindex
                  \usepackage{songs}
                  \newindex{ind}{ind} % per gli indici di songs, da generare a parte
                  \makeatletter
                  \def\accents@list{\do\IeC\do\`\do\'}
                  \def\letters@list{\do\i{i}}
                  \newcommand{\noaccentindex}[1]{%
                  \begingroup
                  \protected@edef\next{#1}%
                  \ifnum\pdfstrcmp{\detokenize\expandafter{\next}}{\detokenize{#1}}=\z@
                  \index{#1}%
                  \else
                  \def\do##1{\def##1####1{####1}}\accents@list
                  \def\do##1##2{\def##1{##2}}\letters@list
                  \edef\next{\endgroup\def\noexpand\next{\next}}\next
                  \expandafter\index\expandafter{\next @\detokenize{#1}}%
                  \fi}
                  \renewcommand\SB@@@beginsong{%
                  \global\SB@stanzafalse%
                  \setbox\SB@chorusbox\box\voidb@x%
                  \SB@gotchorusfalse%
                  \setbox\SB@songbox\vbox\bgroup\begingroup%
                  \ifnum\SB@numcols>\z@\hsize\SB@colwidth\fi%
                  \leftskip\z@skip\rightskip\z@skip%
                  \parfillskip\@flushglue\parskip\z@skip%
                  \SB@raggedright%
                  \global\SB@transposefactor\z@%
                  \global\SB@cr@{\\}%
                  \protected@edef\@currentlabel{\p@songnum\thesongnum}%
                  \setcounter{versenum}{1}%
                  \SB@prevversetrue%
                  \meter44%
                  \resettitles%
                  \SB@addtoindexes\songtitle\SB@rawrefs\songauthors%
                  \expandafter\noaccentindex\expandafter{\songtitle} %MODIFICATO
                  \nexttitle%
                  \foreachtitle{\expandafter\SB@addtotitles\expandafter{\songtitle}
                  }%
                  \resettitles%
                  \lyricfont%
                  \SB@setbaselineskip%
                  }
                  \makeatother
                  \begin{document}
                  \printindex
                  \begin{songs}{ind}
                  \beginsong{Alleluia Passeranno i cieli}
                  \beginchorus
                  \[D]Alle\[A]luia, \[Bm]alleluia, \[F#m]alleluia,
                  \endchorus
                  \beginverse
                  \[D]Passeranno i \[A]cieli e \[Bm]passerà la \[F#m]terra,
                  \endverse
                  \endsong
                  \beginsong{È santo}[by={Daniele Ricci}]
                  \beginverse
                  \[E]\\[A]\[E]\\[A]\[E]\
                  È \[E]san\to, santo \[A]san\[E]to,
                  \endverse
                  \endsong
                  \end{songs}
                  \end{document}`

                  1. Così come scritto sopra, mi dà l’errore del messagio precedente.
                  2. togliendo gli \ezpandafter non dà errore, ma genera l’indice vuoto (resta \songtitle del file idx)
                  3. togliendo gli \expandafter e il \detokenize funzinona bene, salvo le “schifezze” nell’indice.

                  Fran

                • #59267
                  Up
                  0
                  Down
                  ::

                  Ti presento la mia casistica, partendo da questo codice:

                  1. Così come scritto sopra, mi dà l’errore del messagio precedente.
                  2. togliendo gli \ezpandafter non dà errore, ma genera l’indice vuoto (resta \songtitle del file idx)
                  3. togliendo gli \expandafter e il \detokenize funzinona bene, salvo le “schifezze” nell’indice.

                  Fran

                  Nel caso 1 ottengo l’errore.

                  Nel caso 2 ottengo l’errore.

                  Nel caso 3 ottengo l’errore.

                  Sempre lo stesso che ottengo anche se ometto la riga con “% modificato”.

                  Ciao
                  Enrico

                • #59268
                  franen
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    È vero, con la versione di songs.sty che si trova su CTAN.
                    Non so per quale motivo non sia aggiornato.
                    Su http://songs.sourceforge.net/downloads.html si trova la versinoe aggiornata.
                    Grazie della pazienza.

                    Fran

                  • #59269
                    Up
                    0
                    Down
                    ::

                    È vero, con la versione di songs.sty che si trova su CTAN.
                    Non so per quale motivo non sia aggiornato.
                    Su http://songs.sourceforge.net/downloads.html si trova la versinoe aggiornata.
                    Grazie della pazienza.

                    Fran

                    Aggiungi \endgroup prima di \index{#1}; correggo anche nel messaggio precedente; inoltre sposta
                    `\expandafter\noaccentindex\expandafter{\songtitle}%`
                    subito dopo \SB@setbaselineskip, appena prima della graffa di chiusura finale.

                    Ciao
                    Enrico

                  • #59270
                    franen
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      😀
                      Stupendo, davvero stupendo!
                      Infinite grazie.

                      Fran

                    • #59271
                      franen
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        Buongiorno! Sono un po’ arrugginito in fatto di programmazione LaTeX e non riesco a capire come mai ora il codice di Enrico non funziona più. Un emc senza usare il pacchetto songs:
                        `\documentclass[10pt]{book}
                        \usepackage[T1]{fontenc}
                        \usepackage[utf8]{inputenc}
                        \usepackage{imakeidx}
                        \makeindex

                        \makeatletter
                        \def\accents@list{\do\IeC\do\`\do\'}
                        \def\letters@list{\do\i{i}}
                        \newcommand{\noaccentindex}[1]{%
                        \begingroup
                        \protected@edef\next{#1}%
                        \ifnum\pdfstrcmp{\detokenize\expandafter{\next}}{\detokenize{#1}}=\z@
                        \endgroup\index{#1}%
                        \else
                        \def\do##1{\def##1####1{####1}}\accents@list
                        \def\do##1##2{\def##1{##2}}\letters@list
                        \edef\next{\endgroup\def\noexpand\next{\next}}\next
                        \expandafter\index\expandafter{\next @\detokenize{#1}}%
                        \fi}
                        \makeatother

                        \begin{document}
                        ciao\noaccentindex{arto}

                        rete\noaccentindex{èna}

                        remo\noaccentindex{era}
                        \printindex
                        \end{document}`

                        nel file .idx trovo`\indexentry{arto}{1}
                        \indexentry{èna}{1}
                        \indexentry{era}{1}`

                        anziché `\indexentry{arto}{1}
                        \indexentry{ena@èna}{1}
                        \indexentry{era}{1}`


                        @Enrico
                        , sai aiutarmi? in questi 10 anni è stato sviluppato qualche altro modo per ovviare al problema delle lettere accentate in makeindex?

                      • #59272
                        Up
                        0
                        Down
                        ::

                        franen” post=120863Buongiorno! Sono un po’ arrugginito in fatto di programmazione LaTeX e non riesco a capire come mai ora il codice di Enrico non funziona più. Un emc senza usare il pacchetto songs:
                        `\documentclass[10pt]{book}
                        \usepackage[T1]{fontenc}
                        \usepackage[utf8]{inputenc}
                        \usepackage{imakeidx}
                        \makeindex

                        \makeatletter
                        \def\accents@list{\do\IeC\do\`\do\'}
                        \def\letters@list{\do\i{i}}
                        \newcommand{\noaccentindex}[1]{%
                        \begingroup
                        \protected@edef\next{#1}%
                        \ifnum\pdfstrcmp{\detokenize\expandafter{\next}}{\detokenize{#1}}=\z@
                        \endgroup\index{#1}%
                        \else
                        \def\do##1{\def##1####1{####1}}\accents@list
                        \def\do##1##2{\def##1{##2}}\letters@list
                        \edef\next{\endgroup\def\noexpand\next{\next}}\next
                        \expandafter\index\expandafter{\next @\detokenize{#1}}%
                        \fi}
                        \makeatother

                        \begin{document}
                        ciao\noaccentindex{arto}

                        rete\noaccentindex{èna}

                        remo\noaccentindex{era}
                        \printindex
                        \end{document}`

                        nel file .idx trovo`\indexentry{arto}{1}
                        \indexentry{èna}{1}
                        \indexentry{era}{1}`

                        anziché `\indexentry{arto}{1}
                        \indexentry{ena@èna}{1}
                        \indexentry{era}{1}`


                        @Enrico
                        , sai aiutarmi? in questi 10 anni è stato sviluppato qualche altro modo per ovviare al problema delle lettere accentate in makeindex?

                        No, nessun modo. Il codice non funziona più perché i caratteri multibyte in [tt]\protected@edef[/tt] ora producono sé stessi. Modifica:
                        `
                        \newcommand{\noaccentindex}[1]{%
                        \begingroup
                        \let\UTF@two@octets@noexpand\@empty
                        \let\UTF@three@octets@noexpand\@empty
                        \let\UTF@four@octets@noexpand\@empty
                        \protected@edef\next{#1}%
                        \ifnum\pdfstrcmp{\detokenize\expandafter{\next}}{\detokenize{#1}}=\z@
                        \endgroup\index{#1}%
                        \else
                        \def\do##1{\def##1####1{####1}}\accents@list
                        \def\do##1##2{\def##1{##2}}\letters@list
                        \edef\next{\endgroup\def\noexpand\next{\next}}\next
                        \expandafter\index\expandafter{\next @\detokenize{#1}}%
                        \fi}
                        `

                        Ciao
                        Enrico

                      • #59273
                        franen
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          Grazie mille.
                          A cosa è dovuto questo nuovo comportamento?

                        • #59274
                          franen
                          Partecipante
                            Up
                            0
                            Down
                            ::


                            Ogni tanto ritorno. Texlive 2022 aggiornata a oggi, il codice
                            `\documentclass[10pt]{book}
                            \usepackage[T1]{fontenc}
                            \usepackage[utf8]{inputenc}
                            \usepackage{imakeidx}
                            \makeindex

                            \makeatletter
                            \def\accents@list{\do\IeC\do\`\do\'}
                            \def\letters@list{\do\i{i}}
                            \newcommand{\noaccentindex}[1]{%
                            \begingroup
                            \let\UTF@two@octets@noexpand\@empty
                            \let\UTF@three@octets@noexpand\@empty
                            \let\UTF@four@octets@noexpand\@empty
                            \protected@edef\next{#1}%
                            \ifnum\pdfstrcmp{\detokenize\expandafter{\next}}{\detokenize{#1}}=\z@
                            \endgroup\index{#1}%
                            \else
                            \def\do##1{\def##1####1{####1}}\accents@list
                            \def\do##1##2{\def##1{##2}}\letters@list
                            \edef\next{\endgroup\def\noexpand\next{\next}}\next
                            \expandafter\index\expandafter{\next @\detokenize{#1}}%
                            \fi}
                            \makeatother

                            \begin{document}
                            ciao\noaccentindex{arto}

                            rete\noaccentindex{èna}

                            remo\noaccentindex{era}
                            \printindex
                            \end{document}`
                            dà ancora il problema di non creare la struttura `\indexentry{ena@èna}{1}` nell’idx.

                            @egreg9
                            hai qualche altra magia da tirare fuori?

                          • #59275
                            OldClaudio
                            Partecipante
                              Up
                              0
                              Down
                              ::



                              @franen
                              , il codice di Enrico funzionava quando aceci scritto il Canzoniere. Credo che allora andasse bene perché la codifica utf8 era ancora poco usata e forse i font OpenType ono esistevano ancora.
                              Oggi con la codifica utef8 ogni carattere accentato è un glifo a sé quindi quando salvi éra in \next e quando ne confronti il testo detokenizzato con la stringa originale attraverso il comando primitivo di pdftex \pdfstrcmp, esso trova sempre le due stringhe uguali, proprio perché non si sono usati i comandi per gli accenti, ma attraverso la codifica utf8 ogni carattere accentato è un carattere a se stante quindi éra rimane éra e non \’era. quindi non viene creata la stringa era@éra come ti saresti aspettato.

                              Che cosa tu voglia fare con era ed éra nel tuo esempio non mi è chiaro; infatti col tuo esempio l’indice viene cmposto correttamente cona la voce era prima della voce éra. Forse vorresti che éra comparisse dopo era anche se le voci dell’indice contenessero anche , che so, cera? In quel caso esse verrebbero in quest’ordine, perché é viene dopo la c.

                              Se questa mia interpretazione è giusta, bisognerebbe eseguire i test proprio con un contenuto dalla macro \next che non contenga assolutamente lettere accentate, quindi bisognerebbe eseguire un test molto complesso che sostituisca in una lista di token, limitandosi all’italiano, le lettere à, è, é, ì, ò, ó, ù, con le corrispondenti lettere (minuscole) non accentate (ó è rarissima ma non impossibile; confronta cólto con còlto). Non sarebbe una macro impossibile, ma sicuramente richiede molta pazienza, a meno che Enrico, ricorrendo a LaTeX3, con una sua magia crei la sostituzione che ti ho indicato.

                            • #59276
                              franen
                              Partecipante
                                Up
                                0
                                Down
                                ::

                                l’indice viene cmposto correttamente cona la voce era prima della voce éra.

                                Il risultato non è corretto perché “èna” viene dopo di “era” e io vorrei che una e accentata fosse considerata come una e non accentata in fase di creazione dell’indice.

                                Sul fatto della digitazione diretta in UFT8 o con simboli, io ho sempre e solo usato UTF8, anche 10 anni fa.
                                Già lo scorso anno c’era stato un problema simile che Enrico aveva attribuito a un nuovo modo di espandere i caratteri.
                                Ora non so che succeda

                              • #59277
                                OldClaudio
                                Partecipante
                                  Up
                                  0
                                  Down
                                  ::


                                  Francesco, io col tuo esempio ho fatto solo ipotesi e ho tracciato le singole operazioni ditro le quinte mediante l’uso del pacchetto trace (bisogna stare attenti a tracciare brevi pezzi di codice, altrimenti vengono decine di migliaia di righe e ci si perde). Quindi le analisi fatte con trace sono corrette, e il resto sono mie ipotesi. Potei provare a scrivere una macro in LatEx3 per vedere se le mie ipotesi funzionano. Nel caso te lo scrivo. Purtroppo non lo posso fare subito, perché ho problemi con il 730 e devo interagire con il CAF che mi assiste.
                                  Comune il tuo problema è molto delicato e va affrontato come si deve.

                                • #59278
                                  Up
                                  0
                                  Down
                                  ::


                                  Usa Xindy

                                  `
                                  \documentclass[10pt]{book}
                                  \usepackage[T1]{fontenc}
                                  \usepackage[xindy]{imakeidx}
                                  \makeindex[columns=1,options=-C utf8 -L italian]

                                  \begin{document}

                                  ciao\index{arto}

                                  rete\index{èna}

                                  remo\index{era}
                                  \printindex
                                  \end{document}
                                  `

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

                              Go to top