letter in \hyphenation

  • Creatore
    Topic
  • #81965
    Up
    0
    Down
    ::


    Salve.

    In un file ‘hyphenation.lst’ mantengo una lista di eccezioni di sillabazione:

    `% file hyphenation.lst

    \hyphenation{%
    del-l'in-ter-vento
    nel-l'a-sper-rima
    del-l'in-ter-vallo}`

    Compilando un documento XeTeX restituisce l’errore

    `(./hyphenation.lst
    ! Not a letter.
    l.3 del-l'
    in-ter-vento`

    Provo a correggere nel modo seguente

    `% file hyphenation.lst

    \chardef\apcatcode=\the\catcode`' \catcode`'=11

    \hyphenation{%
    del-l'in-ter-vento
    nel-l'a-sper-rima
    del-l'in-ter-vallo}

    \catcode`'=\apcatcode`

    Ma XeTeX restituisce lo stesso errore di prima.

    Come si può correggere?

    Grazie, ciao.

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #81966
      Up
      0
      Down
      ::

      Sam Qasbah” post=81252Salve.

      In un file ‘hyphenation.lst’ mantengo una lista di eccezioni di sillabazione:

      `% file hyphenation.lst

      \hyphenation{%
      del-l'in-ter-vento
      nel-l'a-sper-rima
      del-l'in-ter-vallo}`

      Compilando un documento XeTeX restituisce l’errore

      `(./hyphenation.lst
      ! Not a letter.
      l.3 del-l'
      in-ter-vento`

      Provo a correggere nel modo seguente

      `% file hyphenation.lst

      \chardef\apcatcode=\the\catcode`' \catcode`'=11

      \hyphenation{%
      del-l'in-ter-vento
      nel-l'a-sper-rima
      del-l'in-ter-vallo}

      \catcode`'=\apcatcode`

      Ma XeTeX restituisce lo stesso errore di prima.

      Come si può correggere?

      Grazie, ciao.

      (Xe)TeX mantiene una lista di eccezioni di sillabazione per ogni lingua. Ovviamente non c’è alcun bisogno di dare quelle eccezioni per l’italiano, visto che ottengo
      `del-l'in-ter-ven-to nel-l'a-sper-ri-ma del-l'in-ter-val-lo`
      cioè esattamente gli stessi punti di sillabazione tuoi più un paio che non davi.

      Puoi essere un pochino più preciso su quello che vuoi fare? Preambolo minimo?

      Ciao
      Enrico

    • #81967
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Perché vuoi quelle sillabazioni?
        Se usi XeLaTeX che richiede obbligatoriamente la codifica utf8, l’apostrofo inserito da tastiera non è l’apostrofo che lui si aspetta; Infatti uno dei tre file di sillabazione per XeLaTeX riguarda proprio gli apostrofi codificati UNICODE (utf8).

        Voi forse che l’ultima sillaba sia più lunga di due lettere? Enrico ti ha mostrato che senza lista delle eccezioni vengono sillabati anche gli ultimi monconi delle parole che hai indicato. Per ottenere quel risultato devi fare cose un po’ magiche che riguardano l’impostazione generale della sillabazione per l’italiano.

        Comincia a leggerti l’appendice sulla sillabazione nella Guida GuIT, tanto per farti un’idea e tieni presente che quell’appendice dice solo mezza verità, perché non ho voluto scendere in troppi dettagli; in quell’appendice appare che i file di sillabazione siano uno solo; dall’avvento di XeLaTeX e della codifica utf8 necessaria per XeLaTeX i file sono 3. La cosa è appena accennata, ma il loro uso è decisamente delicato e quindi non ho voluto scendere nei dettagli.

      • #81968
        Up
        0
        Down
        ::


        Grazie per le risposte.

        A Enrico:
        Non uso XeLaTeX, ma plain e XeTeX. Nel formato c’è l’istruzione \uselanguage{italian}, e tutto funziona perfettamente tranne con le parole con l’apostrofo che non vengono sillabate da TeX, come nel seguente file di esempio
        `\def\a{intervento asperrima intervallo incontrario evasione ugello\ }
        \def\aa{\a\a\a\a\a\a\a\a\a\a}
        \def\aaa{\aa\aa\aa\aa\aa\aa\aa\aa\aa\aa}

        \def\b{dell'intervento nell'asperrima dell'intervallo all'incontrario dell'evasione nell'ugello\ }
        \def\bb{\b\b\b\b\b\b\b\b\b\b}
        \def\bbb{\bb\bb\bb\bb\bb\bb\bb\bb\bb\bb}

        \hsize 4in
        \uselanguage{italian}

        \aaa % correttamente sillabate

        \bbb % non sillabate
        \bye
        `

        Questo è il motivo per cui mantengo un file di eccezioni

        A Claudio:
        Non uso XeLaTeX, ma lo stesso so quanto sia complesso l’intero sistema (Xe)LaTeX. Uso plain infatti perchè è più semplice da capire e da gestire. L’idea di un file esterno contenente le eccezioni di sillabazione mi sembra sia conforme a quanto spiegato da Knuth nel capitolo sull’algoritmo di sillabazione. Certo resta poco comprensibile (per me) il motivo per il quale XeTeX compili un intero documento insieme a tutti i suoi apostrofi, tranne non riconoscerli più come lettera all’interno di un comando \hyphenation.

        Ciao.

      • #81969
        Up
        0
        Down
        ::

        Sam Qasbah” post=81264Grazie per le risposte.

        A Enrico:
        Non uso XeLaTeX, ma plain e XeTeX. Nel formato c’è l’istruzione \uselanguage{italian}, e tutto funziona perfettamente tranne con le parole con l’apostrofo che non vengono sillabate da TeX, come nel seguente file di esempio
        `\def\a{intervento asperrima intervallo incontrario evasione ugello\ }
        \def\aa{\a\a\a\a\a\a\a\a\a\a}
        \def\aaa{\aa\aa\aa\aa\aa\aa\aa\aa\aa\aa}

        \def\b{dell'intervento nell'asperrima dell'intervallo all'incontrario dell'evasione nell'ugello\ }
        \def\bb{\b\b\b\b\b\b\b\b\b\b}
        \def\bbb{\bb\bb\bb\bb\bb\bb\bb\bb\bb\bb}

        \hsize 4in
        \uselanguage{italian}

        \aaa % correttamente sillabate

        \bbb % non sillabate
        \bye
        `

        Questo è il motivo per cui mantengo un file di eccezioni

        `\catcode`@=11
        \def\addtolanguage#1#2{%
        \ifcsname language@hook@#1\endcsname
        \expandafter\def\csname language@hook@#1%
        \expandafter\expandafter\expandafter\endcsname
        \expandafter\expandafter\expandafter
        {\csname language@hook@#1\endcsname#2}
        \else
        \expandafter\def\csname language@hook@#1\endcsname{#2}
        \fi}
        \def\uselanguage@hook#1{\csname language@hook@#1\endcsname}
        \catcode`@=12

        \addtolanguage{italian}{\lccode`'=`' \lccode”2019=”2019 }

        \def\a{intervento asperrima intervallo incontrario evasione ugello\ }
        \def\aa{\a\a\a\a\a\a\a\a\a\a}
        \def\aaa{\aa\aa\aa\aa\aa\aa\aa\aa\aa\aa}

        \def\b{dell'intervento nell'asperrima dell'intervallo all'incontrario dell'evasione nell'ugello\ }
        \def\bb{\b\b\b\b\b\b\b\b\b\b}
        \def\bbb{\bb\bb\bb\bb\bb\bb\bb\bb\bb\bb}

        \hsize 4in
        \uselanguage{italian}

        \aaa % correttamente sillabate

        \bbb % non sillabate
        \bye`

        Il formato riconosce [tt]\uselanguage[/tt] e, se è definito [tt]\uselanguage@hook[/tt] lo esegue, ma non lo definisce. Quindi sei libero di farlo tu; un carattere che ha [tt]\lccode[/tt] zero interrompe il processo di sillabazione. Quindi devi cambiare il codice dell’apostrofo, meglio nelle sue “due incarnazioni” (il carattere U+2109 è quello usato se usi [tt]tex-text[/tt] come “mapping” con un font OpenType).

        Ciao
        Enrico

      • #81970
        Up
        0
        Down
        ::

        egreg9″ post=81265
        `\catcode`@=11
        \def\addtolanguage#1#2{%
        \ifcsname language@hook@#1\endcsname
        \expandafter\def\csname language@hook@#1\endcsname{#2}
        \else
        \expandafter\def\csname language@hook@#1%
        \expandafter\expandafter\expandafter\endcsname
        \expandafter\expandafter\expandafter{%
        \csname language@hook#1\endcsname#2}
        \fi}
        \def\uselanguage@hook#1{\csname language@hook@#1\endcsname}
        \catcode`@=12

        \addtolanguage{italian}{\lccode`'=`' \lccode”2019=”2019 }

        `

        Ciao
        Enrico

        Cazzarola! non era per niente una questione banale.

        Toglimi una curiosità, se non la ritieni impertinente: questa macro la tenevi nel “cassetto degli attrezzi” o l’hai scritta al momento di redigere la risposta?

        Comunque grazie infinite, e ciao.

      • #81971
        Up
        0
        Down
        ::

        Sam Qasbah” post=81268Cazzarola! non era per niente una questione banale.

        Toglimi una curiosità, se non la ritieni impertinente: questa macro la tenevi nel “cassetto degli attrezzi” o l’hai scritta al momento di redigere la risposta?

        Comunque grazie infinite, e ciao.

        La questione di [tt]\lccode[/tt] è ben spiegata sia negli articoli di Claudio Beccari sulla sillabazione italiana che trovi su TUGboat, e anche qui nella Guida GuIT della sezione Documentazione c’è una apposita appendice sulla sillabazione. L’aggiunta di U+2019 è un mio suggerimento a François Charette quando sviluppava Polyglossia.

        Usare [tt]\uselanguage@hook[/tt] per impostare il cambio di [tt]\lccode[/tt] con la scelta della lingua è stato suggerito dalla lettura di [tt]etex.src[/tt], file che viene letto alla creazione del formato [tt]xetex.fmt[/tt].

        Prima o poi, se trovo il tempo e la voglia, metterò in ordine la versione Unicode di hyplain.

        Ciao
        Enrico

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

    Go to top