- Questo topic ha 20 risposte, 7 partecipanti ed è stato aggiornato l'ultima volta 19 anni, 5 mesi fa da
Lapo Mori.
-
CreatoreTopic
-
27 Novembre 2006 alle 20:27 #11490::
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
-
CreatoreTopic
-
AutoreRisposte
-
-
27 Novembre 2006 alle 20:49 #11491
-
27 Novembre 2006 alle 23:17 #11492::
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
-
28 Novembre 2006 alle 5:27 #11493::
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.
-
28 Novembre 2006 alle 9:57 #11494::
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.
DavideOltre alla soluzione suggerita da Lapo, che sarebbe la migliore, per capitoli superiori ai venti dai un’occhiata a questo topic.
Ciao,
Roberto.
-
28 Novembre 2006 alle 14:31 #11495::
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?
-
28 Novembre 2006 alle 14:48 #11496::
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.
-
30 Novembre 2006 alle 19:57 #11497::
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
-
23 Gennaio 2007 alle 3:55 #11498
-
8 Febbraio 2007 alle 10:41 #11499::
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
-
8 Febbraio 2007 alle 11:56 #11500::
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.
-
8 Febbraio 2007 alle 15:23 #11501::
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
EnricoChe ne dici di farlo diventare un pacchetto?
-
9 Febbraio 2007 alle 11:29 #11502::
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
EnricoPS: Chi è Gino Favero? Ecco qui 😀
-
14 Febbraio 2007 alle 23:32 #11503
-
15 Febbraio 2007 alle 2:58 #11504
-
15 Febbraio 2007 alle 7:01 #11505
-
28 Febbraio 2007 alle 18:28 #11506
-
28 Febbraio 2007 alle 21:41 #11507
-
1 Marzo 2007 alle 14:25 #11508::
Bellissimo pacchetto…
Un’osservazione:
nella documentazione il testoQuarta 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
-
3 Aprile 2007 alle 17:38 #11509::
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
-
3 Aprile 2007 alle 18:26 #11510
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.