Latex e Perl

  • Creatore
    Topic
  • #81434
    Up
    0
    Down
    ::


    Innanzitutto un saluto agli amici del Forum.
    Spero di poterlo frequentare con assiduità e di imparare molto dall’esperienze dei numerosi e competenti partecipanti.
    Mentre cercavo una risposta alla possibilità di realizzare un ordinamento alfabetico di una tabella all’interno di Latex, mi sono imbattuto in un post in cui si faceva riferimento a Perl.
    Due quesiti:
    1) Anche in Latex2 non è possibile un ordinamento alfabetico per colonna di una tabella?
    2) dove posso trovare documentazione che mi permetta innanzitutto di capire come Perl e Latex possono interagire?

    Ho trovato molto sul Web riguardo a Perl, ma non vorrei addentrarmi senza prima avere capito come si combina con Latex, considerato che al momento è l’unico motivo che mi spingerebbe ad approfondirlo.

    Grazie

    Emil

Visualizzazione 15 filoni di risposte
  • Autore
    Risposte
    • #81435
      Up
      0
      Down
      ::

      EmilLask” post=80692Innanzitutto un saluto agli amici del Forum.
      Spero di poterlo frequentare con assiduità e di imparare molto dall’esperienze dei numerosi e competenti partecipanti.
      Mentre cercavo una risposta alla possibilità di realizzare un ordinamento alfabetico di una tabella all’interno di Latex, mi sono imbattuto in un post in cui si faceva riferimento a Perl.
      Due quesiti:
      1) Anche in Latex2 non è possibile un ordinamento alfabetico per colonna di una tabella?
      2) dove posso trovare documentazione che mi permetta innanzitutto di capire come Perl e Latex possono interagire?

      Ho trovato molto sul Web riguardo a Perl, ma non vorrei addentrarmi senza prima avere capito come si combina con Latex, considerato che al momento è l’unico motivo che mi spingerebbe ad approfondirlo.

      Grazie

      Emil

      Benvenuto!

      Esiste PerlTeX che potrebbe fare al caso tuo, ma la documentazione è alquanto scarna. Potresti provare con Lua e LuaTeX.

      Ciao
      Enrico

    • #81436
      Up
      0
      Down
      ::


      Grazie per la risposta.

      Purtroppo al momento non sono in grado di apprezzarla completamente perché le mie attuali conoscenze non me lo permettono.

      io di Perl non so proprio nulla, tranne la banalità che si tratti di un linguaggio di scripting che si è via via evoluto fino ad assomigliar ad un linguaggio di programmazione e che è molto usato ed apprezzato dai webmaster.

      Desidererei, però, non addentrarmi per i momento nello studio approfondito di Perl, che forse non mi servirà mai.
      Mi piacerebbe, invece, capire in maniera elementare come funzione Perl e come mi può essere utile con Latex.

      In particolare, poi, come può essere utile per manipolare tabelle ma non soltanto.

      Spero di avere ancora la Vostra disponibilità

      Emil

    • #81437
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::

        EmilLask” post=80694Grazie per la risposta.

        Purtroppo al momento non sono in grado di apprezzarla completamente perché le mie attuali conoscenze non me lo permettono.

        io di Perl non so proprio nulla, tranne la banalità che si tratti di un linguaggio di scripting che si è via via evoluto fino ad assomigliar ad un linguaggio di programmazione e che è molto usato ed apprezzato dai webmaster.

        Desidererei, però, non addentrarmi per i momento nello studio approfondito di Perl, che forse non mi servirà mai.
        Mi piacerebbe, invece, capire in maniera elementare come funzione Perl e come mi può essere utile con Latex.

        In particolare, poi, come può essere utile per manipolare tabelle ma non soltanto.

        Spero di avere ancora la Vostra disponibilità

        Emil

        Ciao,
        rinnovo il benvenuto di Enrico…
        che comunque ti ha dato un suggerimento che forse ti è sfuggito:
        utilizzare il linguaggio Lua all’interno di un sorgente TeX invece che PerlTeX, con LuaLaTeX.
        Forse Lua è più semplice da imparare e da usare che non Perl.
        La soluzione reale al tuo problema dipende però da molti fattori. Di solito si procede per tentativi (almeno io faccio così): disegno una possibile traccia della procedura e poi faccio gli affinamenti del caso. Se quello che viene fuori è abbastanza comodo ed efficiente bene, altrimenti riparto ex novo con una nuova idea.
        R.

      • #81438
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Posso sbagliarmi, ma alfabetizzare un tabella secondo il contenuto di una colonna qualsiasi è difficile anche facendolo a mano, figuriamoci scrivere una procedura perl o lua per farlo. Certo, una volta scritta la procedura, la si può riutilizzare quante volte si vuole senza perdere più tempo, ma…
          Alfabetizzare una tabella per righe intere non è particolarmente difficile, anzi ci sono degli editor che lo fanno direttamente; se ben ricordo, lo shareware WinEdt per macchine Windows è in grado di farlo; probabilmente esistono altri shell editor da usare con i sorgenti .tex che sono in grado di farlo. si tratto di evidenziare le righe da ordinare alfabeticamente e di azionare l’apposita voce di un menù.
          Con linguaggi di programmazione non interpretati come il buon vecchio FORTRAN, io riuscii tempo fa (20 anni fa) a indicizzare una matrice di molte colonne in diversi modi, cioè selezionando la colonna e il tipo di dati contenuti nella colonna (numerico o alfabetico); avevo realizzato l’algoritmo di quick sort che (sebbene sia ricorsivo e ll FORTRAN di allora non gestiva la ricorsione, ma ero riuscito a trovare un work around adeguato) funzionava a meraviglia, ma il programma conteneva circa 500 statement; questo ti da un’idea della difficoltà. Tieni conto che lavorare su una matrice è molto più facile che non lavorare su una lista di record alfabetici dove le colonne non sono ben identificate, specialmente se esistono nel sorgente un certo numero di \multicolumn.

        • #81439
          franen
          Partecipante
            Up
            0
            Down
            ::


            Di Perl non so nulla, ma il pacchetto datatool permette di ordinare le voci delle colonne di una tabella (importando i dati da un .csv )
            Fran

          • #81440
            Up
            0
            Down
            ::

            EmilLask” post=80692Innanzitutto un saluto agli amici del Forum.
            Spero di poterlo frequentare con assiduità e di imparare molto dall’esperienze dei numerosi e competenti partecipanti.
            Mentre cercavo una risposta alla possibilità di realizzare un ordinamento alfabetico di una tabella all’interno di Latex, mi sono imbattuto in un post in cui si faceva riferimento a Perl.
            Due quesiti:
            1) Anche in Latex2 non è possibile un ordinamento alfabetico per colonna di una tabella?
            2) dove posso trovare documentazione che mi permetta innanzitutto di capire come Perl e Latex possono interagire?

            Ho trovato molto sul Web riguardo a Perl, ma non vorrei addentrarmi senza prima avere capito come si combina con Latex, considerato che al momento è l’unico motivo che mi spingerebbe ad approfondirlo.

            Grazie

            Emil

            Non mi è chiara una cosa: vuoi riordinare la tabella modificando il sorgente stesso, oppure vuoi lasciare il sorgente intatto e far sì che la tabella risulti ordinata nel solo PDF?

            Nel primo caso, lascerei perdere Perl (opinione personale: non amo Perl) e scriverei uno script per TeXworks (in Javascript). TeXworks è un editor che viene incluso nelle maggiori distribuzioni LaTeX, quindi quasi certamente ce l’hai già installato. È la via più comoda per applicare delle modifiche al sorgente, perché selezioni il testo nell’editor stesso ed esegui lo script che lo elabora. Nel secondo caso, come ti hanno già scritto, la scelta migliore è usare Lua e LuaTeX. Non credo che Perl si combini particolarmente bene con LaTeX, tranne evidentemente in PerlTeX (di cui non avevo mai sentito parlare).

            In ogni caso, dipende da come son fatte le tabelle che vuoi ordinare: se ce ne dai un esempio, possiamo ragionare sicuramente meglio. 😉

            Ciao,
            Antonio

          • #81441
            Up
            0
            Down
            ::


            “Devo preparare una tabella contenente l’elenco degli iscritti ad un convegno. Ho pensato di usare il pacchetto longtable perché gli iscritti sono più di un centinaio.
            E’ possibile, una volta scritta la tabella in un ordine qualsiasi (in ordine di iscrizione, per esempio), fare in modo che la compilazione la produca in ordine alfabetico rispetto ad una delle colonne (per esempio per cognome) ovviamente per tutta la tabella e non pagina per pagina oppure devo rassegnarmi e introdurre i nomi già in ordine alfabetico?”

            “La seconda che hai detto.

            Ma un buon editor di testi può farlo per te. Oppure perl.

            Ciao
            Enrico”

            Questa è la discussione sul Forum GUIT a cui facevo riferimento all’inizio e la risposta di egreg9.

            Mi sembrava interessante come spunto e desideravo approfondire.
            Ma a quanto pare tutti sconsigliate questa soluzione.

            Eppure ci sarà un modo per la gestione di tabelle lunghe e complesse che non possono essere riordinate manualmente senza sprecare una quantità enorme di tempo.

            Se per esempio volessi pubblicare tre tabelle lunghe che contengono gli stessi dati ma con ordinamenti diversi sarebbe davvero molto oneroso dovere manualmente riorganizzare le altre due tabelle.

          • #81442
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Mah, dipende da come hai i dati iniziali; se li hai in formato Excell hai la possibilità di usare datatool come ti è stato suggerito, altrimenti puoi sempre usare excell per eseguire gli ordinamenti secondo la tabelle che ti pare, salvi nel formato CSV (testo con i campi separati da virgole; riprendi il file di testo cosiè salvato con l’editore che usi per LaTeX, cambi tutte le virgole con dei & e metti i \\ alla fine di ogni riga (la prima operazione è banale perché basta un trova e sostituisci su tutta la tabella; il secondo è un po’ meno banale perché dovresti usare le Regular Expressions per fare riferimento ai fine riga, ma anche facendo a mano non è una cosa terribile); inserisci i preamboli inziali per longtabel e l’\end{longtable} alla fine e in 10 minuti sei a posto.

              Se i dati sono in una altro formato di tipo txt, forse riesci ugualmente a importarli in Excel che fa il possibile per riconoscere le colonne sulla base degli spazi di separazione, basta solo che i dati siano bene incolonnati, poi una volta importato il file e controllato che le colonne siano state tutte identificate per bene, puoi agire come sopra.

              Tieni sempre una copia del file Excel, perché così riesci a fare altri sort su altre colonne con il medesimo metodo; anche spostare colonne a destra o a sinistra è facile quando lavori su un foglio di calcolo che non si spaventa di sicuro per una tabella di alcune centinaia di righe e una decina o un centinaio di colonne, casomai è pdflatex che non ti può comporre una tabella con così tante colonne, non perché sia incapace, ma perché il risultato esce fuori dalla pagina anche se disponi di carta A3 e la usi in landscape e disponi di una stampante adatta.

            • #81443
              Up
              0
              Down
              ::


              Grazie per le risposte.

              Ma egreg9 non partecipa più al Forum?
              Mi pare fosse uno dei moderatori, almeno così ho letto nel post a cui ho fatto riferimento.

            • #81444
              Up
              0
              Down
              ::

              EmilLask” post=80715Grazie per le risposte.

              Ma egreg9 non partecipa più al Forum?
              Mi pare fosse uno dei moderatori, almeno così ho letto nel post a cui ho fatto riferimento.

              Scusa, ma la prima risposta chi pensi te l’abbia data? Babbo Natale? Impossibile confondersi, ho anche eseguito uno sfoltimento molto di recente. 🙂

              Ciao
              Enrico

            • #81445
              Up
              0
              Down
              ::


              Ti consiglio di usare Calc di LibreOffice per scrivere ed ordinare i nominativi come più ti aggrada, successivamente puoi esportare direttamente la tabella in codice LaTeX con la macro Calc2Latex (la trovi sulla rete).
              A questo punto rimane solo da sistemare nel codice le varie celle multi-riga e multi-colonna e, se vuoi, sostituire gli [tt]hline[/tt] con i vari [tt]toprule[/tt], [tt]midrule[/tt] e [tt]bottomrule[/tt].

            • #81446
              robitex
              Amministratore del forum
                Up
                0
                Down
                ::


                Forse è meglio lavorare direttamente senza passare dal Via! (volevo dire da Calc2LaTeX).
                Basta creare un foglio elettronico ‘ombra’ di quello principale con solo forumule che puntino ai valori del foglio con i dati effettivi.
                Con formule come la concatenzazione di stringhe, puoi prepare un foglio ombra dal quale copiare le celle ed incollarle direttamente nel sorgente.
                Procedura:
                Scrivi i dati, o li aggiorni, con la funzione ‘Ordina’ in un attimo prepari l’ordinamento voluto (per esempio alfabetico crescente per cognome), nel foglio ombra di compare automaticamente il codice da copiare ed incollare.

                Esiste anche una soluzione decisamente più importante: usare un motore di database per i dati e LaTeX per il reporting…
                Aggiungo infine che la mia esperienza con datattol non è stata delle migliori, forse oggi è migliorato questo pacchetto, ma di fatto non lo utilizzo mai.
                R.

              • #81447
                Up
                0
                Down
                ::


                Scusa Enrico, ma riferendomi proprio al tuo consiglio, contenuto nel precedente post a cui facevo riferimento, di utilizzare Perl, la tua prima risposta a questo post mi era sembrata formulata da qualcun altro.

                Ti ho inviato un messaggio privato, pensando che non frequentassi più il forum.

                Ti ringrazio ancora e ti riformulo il quesito:
                1) a quale approccio pensavi quando hai consigliato Perl per l’ordinamento delle tabelle?
                2) oggi ci sono metodi più semplici ed efficaci?
                3) dove posso trovare documentazione per capire il rapporto tra Perl e Latex?

                Emil

              • #81448
                Up
                0
                Down
                ::


                Grazie robitex,

                potresti indicarmi più chiaramente che cosa intendi per foglio elettronico ombra?

                Emil

              • #81449
                Up
                0
                Down
                ::

                EmilLask” post=80709

                Eppure ci sarà un modo per la gestione di tabelle lunghe e complesse che non possono essere riordinate manualmente senza sprecare una quantità enorme di tempo.

                Fermo restando che la via maestra, come ti hanno già consigliato, sarebbe scrivere la tabella in un foglio di calcolo, riordinarla lì e importarla in LaTeX solo alla fine, ecco uno script che fa (dovrebbe fare :)) quello che desideri:

                `// TeXworksScript
                // Title: O&rdina per colonna
                // Description: Ordina il codice di una tabella per colonna
                // Author: Nessuno
                // Version: 0.1
                // Date: 2013-01-02
                // Script-Type: standalone
                // Context: TeXDocument
                // Shortcut: Ctrl+K, Ctrl+R

                // Per supportare versioni di Qt precedenti alla 4.7
                if(typeof(String.prototype.trim) == “undefined”)
                {
                String.prototype.trim = (function() {
                var re = /^[\s\n]+|[\s\n]+$/g;
                return function() { return this.replace(re, “”); };
                })();
                }

                function parseLaTeXTable(text)
                {
                // Facciamo una cosa molto semplice ma abbastanza efficace
                // altrimenti il codice qui si complicherebbe di molto
                var regex = /^(?:(?!\\\\).|\n)+(\\\\\n*|(?=$))/;
                var rows = [];
                for (var i = 0; (matches = regex.exec(text)) != null; i++) {
                var s = matches[0], row = [ s ];
                for (var pos = s.indexOf(“&”); pos >= 0; pos = s.indexOf(“&”, pos)) {
                if (pos == 0 || s[pos-1] != '\\') {
                row[row.length – 1] = s.substr(0, pos);
                row[row.length] = s = s.substr(pos + 1);
                pos = 0;
                }
                else pos++;
                }
                row[row.length – 1] = s.substr(0, s.length-matches[1].length);
                rows = row;

                text = text.substring(matches[0].length);
                }
                return rows;
                }

                var selection = TW.target.selection;
                if (selection != “”)
                {
                var table = parseLaTeXTable(selection);
                var column = TW.getInt(null, “Ordinamento tabella”, “Inserisci il numero di colonna (a partire da 0) sulla quale ordinare:\n”, 0, 0);
                if (typeof column == “number”) {
                var code = table.sort(function (a,b) {
                return column < a.length && column < b.length ? a[column].trim().toLowerCase().localeCompare(b[column].trim().toLowerCase()) : a.length - b.length; }).map(function(row) { return row.join("&"); }).join("\\\\\n"); var m = /\\\\(\n*)$/.exec(selection); if (m) { code += m[0]; } TW.target.insertText(code); } }`

              • #81450
                Up
                0
                Down
                ::


                Antonio i tuoi contributi sono davvero preziosi.

                Seguirò le lezioni che mi hai indicato, a proposito di javascript e testerò lo script, che cos’ generosamente mi hai offerto.

                A buon rendere

                Emil

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

            Go to top