citazioni latine

  • Creatore
    Topic
  • #101312
    claudio
    Partecipante
      Up
      0
      Down
      ::


      esiste un modo per generare delle parole in modo casuale, delle frasi composte da due o tre parole tipo un motto latino ?
      il pacchetto lipsum non va bene dato che genera capoversi.
      consigli?
      claudio

    Visualizzazione 13 filoni di risposte
    • Autore
      Risposte
      • #101313
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::

          claudio” post=101073esiste un modo per generare delle parole in modo casuale, delle frasi composte da due o tre parole tipo un motto latino ?
          il pacchetto lipsum non va bene dato che genera capoversi.
          consigli?
          claudio

          Per creare una stringa di parole latine prive di un senso qualunque, basta copiare e incollare un capoverso costruito con lipsum in un file PDF, con qualunque visualizzatore di file PDF si può selezionare del testo e incollarlo dove si vuole.

          Il pacchetto kantlipsum fa le stesse cose del pacchetto lipsum, ma scrive in inglese dei brani tratti da un testo del filosofo Kant; le frasi hanno senso compiuto, non sono “latinorum” privo di senso come quello che si ottiene con lipsum.

          Credo che esista una variante di lipsum per scrivere direttamente alcune parole tratte da quel pacchetto, ma non l’ho mai né cercato né usato, perché a me sembra una perdita di tempo. Per perderne un pochino di meno basta cercare ed aprire il file lipsum.sty e copiare direttamente da lì stringhe di poche parole.

        • #101314
          claudio
          Partecipante
            Up
            0
            Down
            ::


            no a me serve una funzione che mi generi casualmente delle parole
            non posso fare il copia incolla.
            ciao
            claudio

          • #101315
            Up
            0
            Down
            ::


            La sequenza di parole deve cambiare a ogni compilazione o restare sempre la stessa indipendentemente da quando il documento viene compilato?

            Una funzione che estrae una parola da un elenco potrebbe essere così concepita:
            `
            \newcommand*{\SostantivoNominativo}[1]{% #1 deve essere un numero!
            \ifcase #1\relax
            Lupus\or Leo \or Homo\or …%
            \else
            \typeout{Parametro fuori dai limiti!}%
            \fi
            }
            `
            Puoi definire una macro analoga chiamata [tt]\VerboIndicativoPresente[/tt] (amat/edit/…) e una chiamata [tt]\SostantivoAccusativo[/tt] (agnum/malum/…), e poi scrivere qualcosa come
            `
            \SostantivoNominativo{1} \VerboIndicativoPresente{2} \SostantivoAccusativo{1}.
            \SostantivoNominativo{3} \VerboIndicativoPresente{2} \SostantivoAccusativo{2}.
            `
            per ottenere «Lupus edit agnum. Homo edit malum.», e cose del genere. Per come scegliere numeri casuali, rispondi prima alla mia domanda iniziale.

            Ciao.


            Gustavo

          • #101316
            claudio
            Partecipante
              Up
              0
              Down
              ::


              ho risolto così
              `
              \documentclass{article}
              \begin{filecontents*}{elenco4.csv}
              n;citazione
              1;A bene placito
              2;A capite ad calcem
              3;A cruce salus
              4;A Deucalione
              5;A fortiori ratione
              6;A latere
              7;A mari usque ad mare
              8;A mortuo tributum exigere
              9;A pedibus usque ad caput
              10;A posse ad esse non valet consequentia
              11;A quo
              12;Ab aestu et tempestate
              13;Ab aeterno
              14;Ab antiquo
              15;Ab assuetis non fit passio
              16;Ab epistulis
              17;Ab hoc et ab hac
              18;Ab illo tempore
              19;Ab imis
              20;Ab immemorabili
              \end{filecontents*}
              %\usepackage[first=1, last=20,counter=die]{lcg}
              \usepackage[utf8]{inputenc}
              \usepackage{datatool}
              \DTLsetseparator{;}
              \DTLloaddb{myDB}{elenco4.csv}
              \newcommand{\cesare}[1]{%
              \ifthenelse{#1<\DTLrowcount{myDB}}{% \DTLforeach {myDB} {\n=n,\citazione=citazione}{% \ifthenelse{\DTLiseq{\n}{#1}} {\citazione} {}% }% }{}}% % \newcommand{\oracolo}{ \cesare{\pdfuniformdeviate 20}} \begin{document} come disse \cesare{15} faremo \oracolo \end{document} ` il problema è la funzione per il random che è compilatore dipendente che usare in alternativa? ciao claudio

            • #101317
              Up
              0
              Down
              ::

              claudio” post=101081ho risolto così
              `
              \documentclass{article}
              \begin{filecontents*}{elenco4.csv}
              n;citazione
              1;A bene placito
              2;A capite ad calcem
              3;A cruce salus
              4;A Deucalione
              5;A fortiori ratione
              6;A latere
              7;A mari usque ad mare
              8;A mortuo tributum exigere
              9;A pedibus usque ad caput
              10;A posse ad esse non valet consequentia
              11;A quo
              12;Ab aestu et tempestate
              13;Ab aeterno
              14;Ab antiquo
              15;Ab assuetis non fit passio
              16;Ab epistulis
              17;Ab hoc et ab hac
              18;Ab illo tempore
              19;Ab imis
              20;Ab immemorabili
              \end{filecontents*}
              %\usepackage[first=1, last=20,counter=die]{lcg}
              \usepackage[utf8]{inputenc}
              \usepackage{datatool}
              \DTLsetseparator{;}
              \DTLloaddb{myDB}{elenco4.csv}
              \newcommand{\cesare}[1]{%
              \ifthenelse{#1<\DTLrowcount{myDB}}{% \DTLforeach {myDB} {\n=n,\citazione=citazione}{% \ifthenelse{\DTLiseq{\n}{#1}} {\citazione} {}% }% }{}}% % \newcommand{\oracolo}{ \cesare{\pdfuniformdeviate 20}} \begin{document} come disse \cesare{15} faremo \oracolo \end{document} ` il problema è la funzione per il random che è compilatore dipendente che usare in alternativa? ciao claudio

              Ottimo. Ma perché fare ogni volta un ciclo attraverso la base di dati? Usa [tt]\dtlgetrow[/tt]:
              `
              \documentclass{article}
              %\usepackage[first=1, last=20,counter=die]{lcg}
              \usepackage[utf8]{inputenc}
              \usepackage{datatool}
              \DTLsetseparator{;}
              \DTLloaddb{myDB}{elenco4.csv}
              \newcommand{\cesare}[1]{%
              \ifthenelse{#1<\DTLrowcount{myDB}}{% \dtlgetrow{myDB}{#1}% \dtlgetentryfromcurrentrow{\citazione}{2}% \citazione }{}% }% % \newcommand{\oracolo}{ \cesare{\pdfuniformdeviate 20}} \begin{document} come disse \cesare{14} faremo \oracolo \end{document} ` Appare verosimile (ma non lo so con certezza) che la primitiva [tt]\pdfuniformdeviate[/tt] restituisca numeri pseudo-casuali di qualità superiore al semplice generatore a congruenza lineare usato dal pacchetto lcg (che è poi esattamente lo stesso che si trova nel vecchio [tt]random.tex[/tt]); tuttavia, poiché la qualità del generatore non è un parametro critico per un’applicazione come questa 🙂 , penso che tu possa usare tranquillamente lcg, che impiega soltanto l’aritmetica intera presente su ogni compilatore TeX.

              Attento, però, che`\pdfuniformdeviate 20`ritorna un intero compreso fra 0 e 19, non fra 1 e 20.

              Ciao.


              Gustavo

            • #101318
              claudio
              Partecipante
                Up
                0
                Down
                ::


                grazie
                ecco le modifiche
                solo che non riesco a domare lcg 🙂
                `
                \documentclass{article}
                \usepackage[first=1, last=20,counter=die]{lcg}
                \usepackage[utf8]{inputenc}
                \usepackage{datatool}
                \DTLsetseparator{;}
                \DTLloaddb{myDB}{elenco2.csv}
                \newcommand{\cesare}[1]{%
                \ifthenelse{#1<\DTLrowcount{myDB}}{% \dtlgetrow{myDB}{#1}% \dtlgetentryfromcurrentrow{\citazione}{2}% \citazione }{}% }% % \newcommand{\oracolo}{ \cesare{\pdfuniformdeviate 20}} \rand\cesare{rand}} \begin{document} come disse \cesare{14} faremo \oracolo \end{document} ` non compila claudio

              • #101319
                Up
                0
                Down
                ::


                Se chiedi al pacchetto lcg di usare come contatore il contatore [tt]die[/tt]`\usepackage[first=1, last=20,counter=die]{lcg}`poi dovrai usare questo contatore, non [tt]rand[/tt]. Inoltre, bisogna “estrarre” il valore dal contatore e, probabilmente per ragioni, a me ancora sconosciute, inerenti al funzionamento interno di datatool, sembra che [tt]\usecounter[/tt] non sia adatto allo scopo. Io ho risolto così:
                `
                \documentclass{article}
                \usepackage[first=1, last=20,counter=die]{lcg}
                \usepackage[utf8]{inputenc}
                \usepackage{datatool}
                \DTLsetseparator{;}
                \DTLloaddb{myDB}{elenco4.csv}
                \newcommand{\cesare}[1]{%
                \ifthenelse{#1<\DTLrowcount{myDB}}{% \dtlgetrow{myDB}{#1}% \dtlgetentryfromcurrentrow{\citazione}{2}% \citazione }{}% }% % \newcommand{\oracolo}{\rand \cesare{\arabic{die}}} \begin{document} come disse \cesare{14} faremo \oracolo \end{document} ` Ciao. -- Gustavo

              • #101320
                Up
                0
                Down
                ::


                È perché sono una bestia 😳 : non è`\usecounter{die}`ovviamente, bensì`\value{die}`[tt]\usecounter[/tt] si usa con l”ambiente [tt]list[/tt]! Che topica, ragazzi! 😆

                Dunque:
                `
                \documentclass{article}
                \usepackage[first=1, last=20,counter=die]{lcg}
                \usepackage[utf8]{inputenc}
                \usepackage{datatool}
                \DTLsetseparator{;}
                \DTLloaddb{myDB}{elenco4.csv}
                \newcommand{\cesare}[1]{%
                \ifthenelse{#1<\DTLrowcount{myDB}}{% \dtlgetrow{myDB}{#1}% \dtlgetentryfromcurrentrow{\citazione}{2}% \citazione }{}% }% % \newcommand{\oracolo}{\rand \cesare{\value{die}}} \begin{document} come disse \cesare{14} faremo \oracolo \end{document} ` Chiedo scusa per la svista. Ciao. -- Gustavo

              • #101321
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Sicuramente ti è sfuggito qualcosa; il contatore die serve per simulare i lanci di un dado (die in inglese) quindi gli interi casuali generati sono fra 1 e 6. Così dice la documentazione.

                  La documentazione dice anche che l’algoritmo è implementato con l’aritmetica interna di TeX, e i limiti imposti al valore minore e al valore maggiore, nonché alla loro differenza dipendono dal fatto che l’aritmetica intera di TeX ha quei limiti. Quindi la domanda

                  il problema è la funzione per il random che è compilatore dipendente
                  che usare in alternativa?

                  non è rilevante.

                  D’altra parte mi pare che il problema sia risolto, a parte l’uso del contatore die. A meno che non sia sfuggito qualcosa a me, bene inteso,…

                  Io ho dovuto generare speso numeri casuali, ma mi sono guardato bene di usare qualuque cosa che usi l’aritmetica interna di TeX; in questo caso, dove il numero casuale non è determinate, anche lcd può bastare, ma in altri contesti preferisco ricorrere ad un programma esterno e a generare i numeri casuali con un programma serio di matematica; se sapessi usare LuaLaTeX e il linguaggio Lua, probabilmente userei quello, ma Lua ancora mi sfugge…:sad:

                  Ultima mento ho dovuto permutare in modo casuale e senza ripetizioni più di 500 file da immettere in un documento composto con XeLaTeX; XeLaTeX non e responsabile della mia scelta, ma il programma scritto con un linguaggio serio per la matematica funziona benissimo e impiega il tempo di un battito di ciglio. Bisogna solo usare con sicurezza la funzionalità dello shell-escape non protetto.

                • #101322
                  Up
                  0
                  Down
                  ::

                  OldClaudio” post=101089Sicuramente ti è sfuggito qualcosa; il contatore die serve per simulare i lanci di un dado (die in inglese) quindi gli interi casuali generati sono fra 1 e 6. Così dice la documentazione.

                  Ovviamente il pacchetto lcg non capisce l’inglese 😉 e per lui [tt]die[/tt] è solo un nome come un altro nel quale memorizzare il numero casuale generato. Non è obbligatorio usarlo solo per numeri tra 1 e 6. Certo che non si vede perché non si possa usare semplicemente il contatore di default del pacchetto, chiamato [tt]rand[/tt].

                  OldClaudio” post=101089[…]
                  Io ho dovuto generare speso numeri casuali, ma mi sono guardato bene di usare qualuque cosa che usi l’aritmetica interna di TeX; in questo caso, dove il numero casuale non è determinate, anche lcd può bastare, ma in altri contesti preferisco ricorrere ad un programma esterno e a generare i numeri casuali con un programma serio di matematica […]

                  Qui, ripeto, tiro a indovinare senza saperlo con certezza, ma penso (o per lo meno: mi sembra logico pensare) che la primitiva [tt]\pdfuniformdeviate[/tt] di pdfTeX sia implementata usando funzioni di libreria “allo stato dell’arte”, e che quindi ritorni interi pseudo-casuali di qualità paragonabile a quella ritornata da altri programmi, i quali, presumibilmente, usano le medesime librerie.

                  Ciao.


                  Gustavo

                • #101323
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::

                    letteracdp” post=101093

                    Io ho dovuto generare speso numeri casuali, ma mi sono guardato bene di usare qualunque cosa che usi l’aritmetica interna di TeX; in questo caso, dove il numero casuale non è determinate, anche lcd può bastare, ma in altri contesti preferisco ricorrere ad un programma esterno e a generare i numeri casuali con un programma serio di matematica […]

                    Qui, ripeto, tiro a indovinare senza saperlo con certezza, ma penso (o per lo meno: mi sembra logico pensare) che la primitiva [tt]\pdfuniformdeviate[/tt] di pdfTeX sia implementata usando funzioni di libreria “allo stato dell’arte”, e che quindi ritorni interi pseudo-casuali di qualità paragonabile a quella ritornata da altri programmi, i quali, presumibilmente, usano le medesime librerie.

                    No, sicuramente l’algoritmo usato da lcg non è preso da funzioni di libreria, perché comunque anche pdftex di cui quel comando è un comando nativo, non può essere lo stesso identico di programmi che lavorano in floating point e con almeno 64 bit di lunghezza di parola; pdftex lavora in aritmetica intera a 32bit, che cerca di simulare i numeri fratti assumendo che i 16 bit meno significativi rappresentino la parte fratta; quindi è una aritmetica binaria a virgola fissa, l’equivalente di un numero decimale con 5 cifre prima e cinque cifre dopo la virgola fissa; e lavorando a virgola fissa puoi disquisire sull’errore assolto che pioi accumulare sui bit meno significativi, ma non puoi parlare di precisione relativa dei calcoli; non puoi dire che disponi di 10 cifre decimali significative, perché gli zeri a sinistra non contano; in floting point puoi parlare di precisione relativa e di cifre significative e le cifre della cosiddetta mantissa, sono tutte significative; ovviamente accumulando calcoli su numeri già frutto di calcoli, la precisione relativa diminuisce, ma ne è stimabile il degrado; con la virgola fisse tutto ciò è impossibile, specialmente lavorando con numeri piccoli. Se ne accenna nella documentazione di lcg con un generico richiamo all’aritmetica interna di TeX e del numero massimo di bit per ogni parola che si possono usare, oltre che mediante la specificazione dell’intervallo massimo in cui può cadere la differenza fra il minimo numero e il massimo numero del range intero dentro il quale eseguire l’estrazione dei numeri casuali.

                    Ma, come dici tu, e come ho notato anch’io, lo scopo di estrazione casuale di stringhe di parole latine da un database con pochi dati (20 nel tuo esempio), per giunta senza escludere estrazioni identiche, è perfettamente adeguato; quindi il codice LaTeX che hai proposto va benissimo per questo scopo.

                    Claudio

                  • #101324
                    Up
                    0
                    Down
                    ::

                    OldClaudio” post=101098No, sicuramente l’algoritmo usato da lcg non è preso da funzioni di libreria […]

                    Aspetta, aspetta, non facciamo confusione: io parlavo della primitiva [tt]\pdfuniformdeviate[/tt] di pdfTeX, non del pacchetto lcg: quest’ultimo, per l’appunto, usa un semplice generatore a congruenza lineare (whence the name) basato sull’aritmetica intera del TeX.

                    Ripeto: non so nulla di come sia implementata la primitiva [tt]\pdfuniformdeviate[/tt]. Nulla vieta che sia internamente basata su aritmetica ad alta precisione e che poi alla fine restituisca un intero pseudocasuale compreso fra 0 (incluso) e il suo argomento (escluso); ma con ciò intendo solo dire quale sarebbe l’implementazione desiderabile… 🙂

                    Ciao.


                    Gustavo

                  • #101325
                    claudio
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      ho un piccolo problema
                      come accedere velocemente a un archivio con 1300 righe?
                      ciao
                      claudio

                    • #101326
                      claudio
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        da segnalare quanto segue
                        ho un cvs con 1300 voci
                        utilizzando datatooltk e controvertendolo nel formato texdb
                        ho ottenuto un aumento nella
                        velocità di compilazione mostruoso

                        ecco il nuovo codice
                        `
                        \documentclass{article}
                        \usepackage[first=1, last=395,counter=die]{lcg}
                        \usepackage[utf8]{inputenc}
                        \usepackage{datatool}
                        \DTLloaddbtex{\myDB}{citazioni.dbtex}
                        \newcommand{\cesare}[1]{%
                        \ifthenelse{#1<\DTLrowcount{\myDB}}{% \dtlgetrow{\myDB}{#1}% \dtlgetentryfromcurrentrow{\citazione}{2}% \citazione }{}% }% % \newcommand{\oracolo}{\rand \cesare{\value{die}}} \begin{document} come disse \cesare{14} faremo \oracolo \oracolo \end{document} ` ciao claudio

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

                    Go to top