Fncychap e lingua italiana

  • Creatore
    Topic
  • #11490
    Up
    0
    Down
    ::


    Ciao a tutti!
    Oggi ho deciso di cambiare lo stile del titolo del capitolo, mi ero assuefatto a “Lenny”. Cercando sul manuale del pacchetto ho scelto di utilizzare “Bjarne” e con estrema sorpresa ho scoperto che tutte le scritte apparivano in inglese (forse potevo aspettarmelo 😯 ).
    Molto artigianalmente ho modificato il file .sty sostituendo a “one, two three…” i corrispondenti “uno, due ,tre…”. Il rimedio ha funzionato, ma non esiste una soluzione più fine?
    La cosa che mi ha sorpreso è che proprio nel file originale erano elencati uno alla volta tutti i numeri da uno a venti. Questa soluzione limita lo stile a soli venti capitoli, che ovviamente sono molto spesso o quasi sempre sufficienti. Non esiste una soluzione, magari legata a babel che permetta una scrittura in qualsiasi lingua e per un numero, se non infinito, molto elevato di capitoli?

    Grazie a tutti per l’attenzione.
    Davide

Visualizzazione 19 filoni di risposte
  • Autore
    Risposte
    • #11491
      Up
      0
      Down
      ::


      Babel non può farlo ma mi pare che ci sia un pacchetto apposito.

    • #11492
      Up
      0
      Down
      ::

      Babel non può farlo ma mi pare che ci sia un pacchetto apposito.

      No, che io sappia. Ce n’è uno per i numeri in inglese o tedesco, ma adattarlo all’italiano è piuttosto complicato. Ci sono problemi TeXnici piuttosto intricati. Ho provato a dare una soluzione sufficientemente robusta, ma ci ho rinunciato. L’approccio “manuale” è il più semplice.

      Ciao
      Enrico

    • #11493
      Up
      0
      Down
      ::


      Il pacchetto a cui mi riferivo è fmtcount. Per il momento esiste il supporto multilingua solo per inglese, francese, spagnolo e portoghese. Ho guardato un po’ il pacchetto e per aggiungere l’italiano è sufficiente creare un file di definizioni fc-italian.def sulla falsariga di fc-english.def. Non dovrebbe essere un lavoro né lungo né difficile ma temo di non avere tempo per lo meno fino al 2007. Se qualcuno è interessato, lo invito per lo meno ad iniziare il lavoro. Sarebbe un bel contributo della comunità di GuIT agli utenti LaTeX italiani.

    • #11494
      Up
      0
      Down
      ::

      Ciao a tutti!
      La cosa che mi ha sorpreso è che proprio nel file originale erano elencati uno alla volta tutti i numeri da uno a venti. Questa soluzione limita lo stile a soli venti capitoli, che ovviamente sono molto spesso o quasi sempre sufficienti. Non esiste una soluzione, magari legata a babel che permetta una scrittura in qualsiasi lingua e per un numero, se non infinito, molto elevato di capitoli?

      Grazie a tutti per l’attenzione.
      Davide

      Oltre alla soluzione suggerita da Lapo, che sarebbe la migliore, per capitoli superiori ai venti dai un’occhiata a questo topic.

      Ciao,
      Roberto.

    • #11495
      Up
      0
      Down
      ::


      ottimo il suggerimento di modificare lo sty. non c’ero arrivato quando un paio di giorni fa mi si era presentato lo stesso problema.

      pongo un altro problema però. va bene che in inglese c’è scritto one, two, three, ma non sarebbe più corretto modificare lo sty con primo, secondo, terzo e via dicendo?
      ho preso in mano i tre quattro libri che avevo sotto mano e tutti riportano i capitoli in questa maniera. voi che ne dite?

    • #11496
      Up
      0
      Down
      ::

      ottimo il suggerimento di modificare lo sty. non c’ero arrivato quando un paio di giorni fa mi si era presentato lo stesso problema.

      pongo un altro problema però. va bene che in inglese c’è scritto one, two, three, ma non sarebbe più corretto modificare lo sty con primo, secondo, terzo e via dicendo?
      ho preso in mano i tre quattro libri che avevo sotto mano e tutti riportano i capitoli in questa maniera. voi che ne dite?

      Questione di gusti. Magari invertendo il numero e il chaptername (e.g. Primo Capitolo ecc.).

      Per altre formattazioni dei capitoli dai un’occhiata a questo documento e alla classe memoir (che consiglio praticamente ad ogni mio topic).

      Ciao,
      Roberto.

    • #11497
      Up
      0
      Down
      ::

      Il pacchetto a cui mi riferivo è fmtcount. Per il momento esiste il supporto multilingua solo per inglese, francese, spagnolo e portoghese. Ho guardato un po’ il pacchetto e per aggiungere l’italiano è sufficiente creare un file di definizioni fc-italian.def sulla falsariga di fc-english.def. Non dovrebbe essere un lavoro né lungo né difficile ma temo di non avere tempo per lo meno fino al 2007. Se qualcuno è interessato, lo invito per lo meno ad iniziare il lavoro. Sarebbe un bel contributo della comunità di GuIT agli utenti LaTeX italiani.

      Me lo segno e appena ho un po’ di tempo (temo le vacanze di natale 🙁 ) provo a ritoccarlo io, magari scopro di essere in grado di fare qualcosa di decente nonostante sia decisamente un principiante.

      Per altre formattazioni dei capitoli dai un’occhiata a questo documento e alla classe memoir (che consiglio praticamente ad ogni mio topic).

      Non ho ancora analizzato le potenzialità della classe memoir, la studierò i prossimi giorni.

      Grazie mille per i moltissimi consigli!

      A presto
      Davide

    • #11498
      Up
      0
      Down
      ::


      Ho appena scoperto un pacchetto che scrive i numeri in portoghese: ordinalpt. Modificarlo per l’italiano non dovrebbe essere troppo difficile.

    • #11499
      Up
      0
      Down
      ::

      Ho appena scoperto un pacchetto che scrive i numeri in portoghese: ordinalpt. Modificarlo per l’italiano non dovrebbe essere troppo difficile.

      Purtroppo l’italiano e il portoghese non sono abbastanza simili. Se si vuole un comando che gestisce i nomi dei numeri fino a 99, ecco qui:
      `\makeatletter
      \def\NumeroinParole#1{\expandafter\@NumeroinParole\csname c@#1\endcsname}
      \def\@NumeroinParole#1{%
      \ifnum#1>99
      \@ctrerr
      \else
      \ifnum#1<30 \np@small{#1}\else\expandafter\np@large\number#1\fi
      \fi}
      \def\np@small#1{\ifcase#1\or
      Uno\or Due\or Tre\or Quattro\or Cinque\or
      Sei\or Sette\or Otto\or Nove\or Dieci\or
      Undici\or Dodici\or Tredici\or Quattordici\or Quindici\or
      Sedici\or Diciassette\or Diciotto\or Diciannove\or Venti\or
      Ventuno\or Ventidue\or Ventitr\'e\or Ventiquattro\or Venticinque\or
      Ventisei\or Ventisette\or Ventotto\or Ventinove\fi}

      \def\np@large#1#2{%
      \ifcase#1\or\or\or Trent\or Quarant\or Cinquant\or
      Sessant\or Settant\or Ottant\or Novant\fi
      \ifcase#2a\or uno\or adue\or atr\'e\or aquattro\or
      acinque\or asei\or asette\or otto\or anove\fi}
      \makeatletter
      \renewcommand{\thechapter}{\NumeroinParole{chapter}}`
      Se si preferiscono le minuscole, basta cambiarle.

      Il comando \@NumeroinParole legge il valore del contatore dato ad argomento di \NumeroinParole. Se il numero è maggiore di 99, errore. Se il numero è <30, si va caso per caso, non c’è altro modo. Da 30 in poi, invece, viene letto il numero (che ha certamente due cifre) tramite
      `\expandafter\np@large\number#1`
      Con \expandafter abbiamo che \number produce la rappresentazione decimale del valore del contatore; \np@large ha due argomenti, il primo è la cifra delle decine, il secondo quella delle unità. A questo punto basta eseguire due \ifcase.

      Il comando è espandibile, quindi dà il risultato corretto con \label. Attenzione, però: un
      `\chapter{Titolo}\label{capitolo}`
      dando \ref{capitolo} si otterrà il numero scritto in parole. Così funziona il sistema.

      Ciao
      Enrico

    • #11500
      Up
      0
      Down
      ::


      Oooh! Perfetto.

      `\makeatletter
      \def\NumeroinParole#1{\expandafter\@NumeroinParole\csname c@#1\endcsname}
      \def\@NumeroinParole#1{%
      \ifnum#1>99
      \@ctrerr
      \else
      \ifnum#1<30 \np@small{#1}\else\expandafter\np@large\number#1\fi
      \fi}
      \def\np@small#1{\ifcase#1\or
      Uno\or Due\or Tre\or Quattro\or Cinque\or
      Sei\or Sette\or Otto\or Nove\or Dieci\or
      Undici\or Dodici\or Tredici\or Quattordici\or Quindici\or
      Sedici\or Diciassette\or Diciotto\or Diciannove\or Venti\or
      Ventuno\or Ventidue\or Ventitr\'e\or Ventiquattro\or Venticinque\or
      Ventisei\or Ventisette\or Ventotto\or Ventinove\fi}

      \def\np@large#1#2{%
      \ifcase#1\or\or\or Trent\or Quarant\or Cinquant\or
      Sessant\or Settant\or Ottant\or Novant\fi
      \ifcase#2a\or uno\or adue\or atr\'e\or aquattro\or
      acinque\or asei\or asette\or otto\or anove\fi}
      \makeatletter
      \renewcommand{\thechapter}{\NumeroinParole{chapter}}`

      Ora basta accodare il comando
      `\renewcommand{\TheAlphaChapter}{\thechapter}`

      Per usare fncychap tradotto in italiano.

      Ciao,
      Roberto.

    • #11501
      Up
      0
      Down
      ::

      Purtroppo l’italiano e il portoghese non sono abbastanza simili. Se si vuole un comando che gestisce i nomi dei numeri fino a 99, ecco qui:
      `\makeatletter
      \def\NumeroinParole#1{\expandafter\@NumeroinParole\csname c@#1\endcsname}
      \def\@NumeroinParole#1{%
      \ifnum#1>99
      \@ctrerr
      \else
      \ifnum#1<30 \np@small{#1}\else\expandafter\np@large\number#1\fi
      \fi}
      \def\np@small#1{\ifcase#1\or
      Uno\or Due\or Tre\or Quattro\or Cinque\or
      Sei\or Sette\or Otto\or Nove\or Dieci\or
      Undici\or Dodici\or Tredici\or Quattordici\or Quindici\or
      Sedici\or Diciassette\or Diciotto\or Diciannove\or Venti\or
      Ventuno\or Ventidue\or Ventitr\'e\or Ventiquattro\or Venticinque\or
      Ventisei\or Ventisette\or Ventotto\or Ventinove\fi}

      \def\np@large#1#2{%
      \ifcase#1\or\or\or Trent\or Quarant\or Cinquant\or
      Sessant\or Settant\or Ottant\or Novant\fi
      \ifcase#2a\or uno\or adue\or atr\'e\or aquattro\or
      acinque\or asei\or asette\or otto\or anove\fi}
      \makeatletter
      \renewcommand{\thechapter}{\NumeroinParole{chapter}}`
      Se si preferiscono le minuscole, basta cambiarle.

      Il comando \@NumeroinParole legge il valore del contatore dato ad argomento di \NumeroinParole. Se il numero è maggiore di 99, errore. Se il numero è <30, si va caso per caso, non c’è altro modo. Da 30 in poi, invece, viene letto il numero (che ha certamente due cifre) tramite
      `\expandafter\np@large\number#1`
      Con \expandafter abbiamo che \number produce la rappresentazione decimale del valore del contatore; \np@large ha due argomenti, il primo è la cifra delle decine, il secondo quella delle unità. A questo punto basta eseguire due \ifcase.

      Il comando è espandibile, quindi dà il risultato corretto con \label. Attenzione, però: un
      `\chapter{Titolo}\label{capitolo}`
      dando \ref{capitolo} si otterrà il numero scritto in parole. Così funziona il sistema.

      Ciao
      Enrico

      Che ne dici di farlo diventare un pacchetto?

    • #11502
      Up
      0
      Down
      ::

      Che ne dici di farlo diventare un pacchetto?

      Vedrò. Intanto godetevi la versione che supporta numeri fino a 999:
      `\makeatletter

      \def\numeroinparole#1{\expandafter\@numeroinparole\csname c@#1\endcsname}
      \def\@numeroinparole#1{%
      \ifnum#1=0 zero% Eccezione
      \else
      \ifnum#1=3 tre% Eccezione
      \else
      \np@numeroinparole{#1}{}%
      \fi\fi}
      \def\np@numeroinparole#1#2{%
      \ifnum#1>999
      \@ctrerr
      \else
      \ifnum#1>99
      \expandafter\np@hundred\number#1\np@del
      \else
      \ifnum#1<30
      \np@small{#1}{#2}\else\expandafter\np@large\number#1{#2}%
      \fi\fi\fi}

      \def\np@small#1#2{#2\ifcase#1\or
      uno\or due\or tr\'e\or quattro\or cinque\or
      sei\or sette\or otto\or nove\or dieci\or
      undici\or dodici\or tredici\or quattordici\or quindici\or
      sedici\or diciassette\or diciotto\or diciannove\or venti\or
      ventuno\or ventidue\or ventitr\'e\or ventiquattro\or venticinque\or
      ventisei\or ventisette\or ventotto\or ventinove\fi}

      \def\np@large#1#2#3{%
      \ifcase#1\or\or\or #3trent\or #3quarant\or #3cinquant\or
      #3sessant\or #3settant\or ottant\or #3novant\fi
      \ifcase#2a\or uno\or adue\or atr\'e\or aquattro\or
      acinque\or asei\or asette\or otto\or anove\fi}

      \def\np@hundred#1#2\np@del{%
      \ifcase#1\or\or due\or tre\or quattro\or cinque\or
      sei\or sette\or otto\or nove\fi cent%
      \ifnum#2=0 o\else\np@numeroinparole{#2}{o}\fi}

      \makeatother`
      Il problema del “…tré” accentato in tutti i numeri che finiscono per 3, maggiori di 3, è stato risolto mettendo un’eccezione iniziale, come suggerito da Gino Favero ieri sera in treno (50 minuti di ritardo :evil:) che però mi ha segnalato anche il problema del “centosettantanove-centottanta” (vedete che una “o” va mangiata?). 🙄

      Risolto scrivendo la macro \np@hundred, che si occupa della cifra delle centinaia, facendo chiamare alla fine \np@numeroinparole (è una ricorsione) con secondo argomento “o” (se il numero non è un multiplo di cento). La macro \np@large è stata riscritta con la possibilità di aggiungere il secondo argomento (che può essere vuoto o una “o”) davanti ai frammenti che ne hanno bisogno.

      Adesso cerco aiuto dagli analisti numerici per una implementazione e-TeX (cioè con \numexpr).

      Ciao
      Enrico

      PS: Chi è Gino Favero? Ecco qui 😀

    • #11503
      Up
      0
      Down
      ::

      Che ne dici di farlo diventare un pacchetto?

      Se qualcuno vuole provarlo, lo può scaricare qui. Aspetto commenti e suggerimenti.

      Ciao
      Enrico

    • #11504
      Up
      0
      Down
      ::


      L’ho provato e mi sembra eccellente. Spero di trovarlo in MikTeX presto.

    • #11505
      lorenzo.pantieri
      Partecipante
        Up
        0
        Down
        ::

        Aspetto commenti e suggerimenti.

        Ottimo! Complimenti anche per la documentazione, davvero godibilissima!

        Ciao,
        L.

      • #11506
        Up
        0
        Down
        ::


        E’ già stato inviato a MiKTeX? Se no, posso occuparmene io?

      • #11507
        Up
        0
        Down
        ::

        E’ già stato inviato a MiKTeX? Se no, posso occuparmene io?

        Vorrei farne un bel dtx. Ci sto lavorando.

        Ciao
        Enrico

      • #11508
        Up
        0
        Down
        ::


        Bellissimo pacchetto…
        Un’osservazione:
        nella documentazione il testo

        Quarta sezione: Limitazioni
        Il comando \numeroinparole (e il corrispondente \printnumeroinparole) non
        possono essere usati solo con numeri interi m tali che 0 ≤ m ≤ 9999. I comandi
        per i numeri ordinali funzionano solo con interi n tali che 1 ≤ n ≤ 999.

        forse andava scritto:

        Quarta sezione: Limitazioni
        Il comando \numeroinparole (e il corrispondente \printnumeroinparole)
        può essere usato
        solo con numeri interi m tali che 0 ≤ m ≤ 9999. I comandi
        per i numeri ordinali funzionano solo con interi n tali che 1 ≤ n ≤ 999.

        LuCa

      • #11509
        Up
        0
        Down
        ::

        Che ne dici di farlo diventare un pacchetto?

        Se qualcuno vuole provarlo, lo può scaricare qui. Aspetto commenti e suggerimenti.

        Il pacchetto itnumpar è stato inviato su CTAN. Dovrebbe uscirne l’annuncio a breve.

        Gestisce numeri cardinali fino a 9999 e ordinali fino a 999, questi ultimi in forma maschile e femminile, con iniziale maiuscola o minuscola.

        Sono disposto ad ampliare l’intervallo, se qualcuno offre una somma in euro non minore del massimo numero cardinale gestito attualmente. 😀 😀

        Ciao
        Enrico

      • #11510
        Up
        0
        Down
        ::


        Mi occuperò di inviarlo a MikTeX.

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

    Go to top