ordinare una lista

  • Creatore
    Topic
  • #120110
    ernded
    Partecipante
      Up
      0
      Down
      ::


      Data una lista, costruita per esempio con itemize, conoscete una macro che permetta di mettere in ordine alfabetico i vari item?
      Grazie

    Visualizzazione 6 filoni di risposte
    • Autore
      Risposte
      • #120111
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Non ne conosco, ma sicuramente non ina lista puntata come itemize; i vai item non contengono niente di ordinabile, se non il loro testo completo;
          noltre, vedi l’articolo di uno scrittore di testi di documentazione pubblicato su ArsTeXnica di due o tre anni fa, itmenze ha gli iteme che fanno parte del discorso che li precede, anche se sono strutturati/abbelliti in forma di lista. enumerate non é direttamente ordinabile, ma forse si riuscirebbe a gesire un ordinamento mediante le etichette numeriche recuperabili con altrettanti \label. l’ambiente description potrebbe essere ordinabile.

          Ma ci sono altri ambienti, simili alle liste, come glossaries o nomenclature (leggine la documentazione) che permettono ordinamenti alfabetici in modo semiautomatico; funzionano un po come gli indici analitici, che, durante la prima passata, scrivono in un file ausiliario la “lista”, adeguatamente marcata, poi viene lanciato lo stesso programma che serve per ordinare gli indici analitici, ma con file di stile diversi, infine con un’altra compilazione del documento si ottiene l’elenco ordinato.

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

            ernded” post=120588Data una lista, costruita per esempio con itemize, conoscete una macro che permetta di mettere in ordine alfabetico i vari item?
            Grazie

            Prova l’ordinamento con LuaLaTeX.
            Ci sarà un esempio presto nella guidalua.
            R.

          • #120113
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::



              @robitex
              ,lo so che sei affezionato al linguaggio Lua; è fortissimo. Non vorrei azzardare giudizi da ignorante,ma comincio a sospettare che sia più forte di LaTeX3.

              Tuttavia la domanda dell’OT era tale da porre dei vincoli: come ordinare una lista di item contenuti in un ambiente itemize; Forse itemize era solo un esempio, ma non si può ordinare niente se non si sa che cosa confrontare; Vuoi confrontate l’intera stringa che segue un comando \item fino all’item successivo o a \end{itemize}? Se una chiave di ordinamento fosse inserita come argomento fra quadre del comando \item sarebbe relativamente facile, ma a quel punto dovresti modificare l’ambiente item perché il suo argomento oltre a servire come chiave, dovrebbe inserire il pallino nero, oltre che scrivere ciò che si vuole elencare.

              Quello che voglio dire è che con Lua puoi fare miracoli, ma bisogna ridefinire gli ambienti in modo che diano in pasto a Lua quel che serve; in ogni caso serve un file di appoggio, come per gli indici analitici, perché senza di questi file di appoggio, non si può riordinare quello che c’è scritto nel file sorgente.

              Infati,mellamia risposta precedente non ho indicato un metodo banale, ma che sicuramente farebbe storcere il naso a chiunque si occuo di LaTeX, Lua, & Company; Riordinare a mano i vari item con il loro testi mediante una serie di copia e incolla. Se la lista puntata contiene un numero ragionevole di \item, l’operazione eseguita a mano è senz’altro più semplice che con glossaries, con nomenclature, con LaTeX3, con Lua. Al massimo converrebbe una strategia diversa dal “bubble sort”. Io ai tempi antichi del DOS, riuscivo a ordinare alfabeticamente un vetore che puntava alle righe di una matrice di stinghe, usando il metodo “quick sort” con 40000 dati da ordinare; era talmente efficace che lo usavo anche a mano per ordinare alfabeticamente (sulla base del cognome degli esaminandi) gli elaborati degli scritti agli esami dei miei corsi, quando dovevo ordinare un paio di centinaia di elaborati; con il quick sort ci mettevo meno di una decina di minuti.
              Quale algoritmo seguano Lua o LaTeX3 (che anche lui può ordinare token list di vario genere) non lo so, come non so che algoritmo sui makeindex per ordinare le voci dell’indice. Ma per la mia esperienza, da allora, uso solo il quick sort. Mi dicono che ci siano metodi ancora più efficaci, ma che richiedono una programmazione molto più complessa.

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

                OldClaudio” post=120597 @robitex,lo so che sei affezionato al linguaggio Lua; è fortissimo. Non vorrei azzardare giudizi da ignorante,ma comincio a sospettare che sia più forte di LaTeX3.

                Tuttavia la domanda dell’OT era tale da porre dei vincoli: come ordinare una lista di item contenuti in un ambiente itemize; Forse itemize era solo un esempio, ma non si può ordinare niente se non si sa che cosa confrontare; Vuoi confrontate l’intera stringa che segue un comando \item fino all’item successivo o a \end{itemize}? Se una chiave di ordinamento fosse inserita come argomento fra quadre del comando \item sarebbe relativamente facile, ma a quel punto dovresti modificare l’ambiente item perché il suo argomento oltre a servire come chiave, dovrebbe inserire il pallino nero, oltre che scrivere ciò che si vuole elencare.

                Quello che voglio dire è che con Lua puoi fare miracoli, ma bisogna ridefinire gli ambienti in modo che diano in pasto a Lua quel che serve; in ogni caso serve un file di appoggio, come per gli indici analitici, perché senza di questi file di appoggio, non si può riordinare quello che c’è scritto nel file sorgente.

                Infati,mellamia risposta precedente non ho indicato un metodo banale, ma che sicuramente farebbe storcere il naso a chiunque si occuo di LaTeX, Lua, & Company; Riordinare a mano i vari item con il loro testi mediante una serie di copia e incolla. Se la lista puntata contiene un numero ragionevole di \item, l’operazione eseguita a mano è senz’altro più semplice che con glossaries, con nomenclature, con LaTeX3, con Lua. Al massimo converrebbe una strategia diversa dal “bubble sort”. Io ai tempi antichi del DOS, riuscivo a ordinare alfabeticamente un vetore che puntava alle righe di una matrice di stinghe, usando il metodo “quick sort” con 40000 dati da ordinare; era talmente efficace che lo usavo anche a mano per ordinare alfabeticamente (sulla base del cognome degli esaminandi) gli elaborati degli scritti agli esami dei miei corsi, quando dovevo ordinare un paio di centinaia di elaborati; con il quick sort ci mettevo meno di una decina di minuti.
                Quale algoritmo seguano Lua o LaTeX3 (che anche lui può ordinare token list di vario genere) non lo so, come non so che algoritmo sui makeindex per ordinare le voci dell’indice. Ma per la mia esperienza, da allora, uso solo il quick sort. Mi dicono che ci siano metodi ancora più efficaci, ma che richiedono una programmazione molto più complessa.

                Ciao Claudio,
                secondo me LaTeX3 e Lua non possono essere confrontati direttamente. Sono molto diversi sia il codice che gli scopi.
                Quello che ritengo sia importante è, essendo Lua molto più performante sia dal punto di vista delle prestazioni sia da quello della scrittura ed evoluzione del codice, che Lua può integrare TeX in quei compiti particolari che normalmente non incontra un programma di composizione come TeX. In altre parole, TeX è progettato per la composizione, Lua per i compiti di elaborazione dati.

                Ormai da parecchio tempo, penso che occorra abbandonare pdftex a favore di luatex. Dunque, nasce il problema di come far collaborare al meglio Lua e TeX. La guidalua ha proprio questo scopo. Per questo si tratta del caso in cui l’utente risolve i propri problemi scrivendo da se il codice Lua/TeX opportuno.
                Nel momento in cui i problemi assumeranno una connotazione definita, potranno nascere dei “pacchetti”. In quel momento gli utenti potranno avvalersi di un sistema esteso Lua+TeX nel formato LaTeX per esempio con lo strato L3.

                Ma forse la strada futura sarà ancora un’altra. Proprio perché disporre di Lua in TeX può far render conto di un nuovo contesto applicativo per il sistema, è possibile che nasca la spinta per creare un TeX nuovo di zecca. Mi piacerebbe partecipare a progetti simili di elevata difficoltà.

                Alla prossima.
                R.

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

                  ernded” post=120588Data una lista, costruita per esempio con itemize, conoscete una macro che permetta di mettere in ordine alfabetico i vari item?
                  Grazie

                  Rispolvero una frase che Enrico ha scritto in un post di 12 anni fa:

                  Credo di aver già risposto a una domanda del genere. Siccome TeX ha un linguaggio Turing-completo è possibile implementare un algoritmo di sorting che potrebbe fare al caso tuo. Ora, però, siamo realistici: quanti acronimi hai? Più di venti? Più di cento? E non possiedi una semplice funzione di ordinamento nel tuo editor? O non puoi inserirli a manina nell’ordine giusto?

                  https://guitex.org/home/it/forum/5-tex-e-latex/30654-acronimo-ordine-alfabetico

                  🙂

                • #120116
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Per carità, non confondiamo le idee; ho scritto che lua è formidabile, ma che è n linguaggio di programmazione completamente diverso da qullo di TeX e LaTeX, quindi per usarlo in modo efficace bisogna imparalo bene come fai tu, Roberto, e, benché la guidalua sia utilissima, anche se la impari a memoria, non è con questo che voglia dire che sai usare Lua In modo veramente utile. È verissimo quello che dici LaTeX3 e Lua sono diversi sia nel linguaggio, sia negli scopi. Tuttavia LaTeX 3 è capace di fare cose che neanche Knuth si sognava. Tra le altre cose fa i conti, come si deve, non come Knuth aveva limitato alle funzioni della tipografia (solo numeri interi); non ti posso riassumenre in poche righe quello che LaTeX3 è capace di fare, ma basta leggersi le centinai di pagine del documento interface3, e si scopre che il motore Turing-completo a cui si rifaceva Enrico tempo fa, è effettivamente capace i fare cose stupende.
                    Ma nel caso del riordino di una lista non basta invocare una macro, magari specificandole i numeri delle righe di inizio e di fine dei blocchi da riordinare; bisogna avere una strategia da implementare e il riordino dei dati consente molte strategie e di conseguenza l’utente deve conoscere le varie possibilità per scegliere quella che gli fa più comodo in base al tipo di dati da riordinare.
                    Quindi il primo problema non è scegliere Lua o LaTeX3, ma è quello di scegliere la migliore strategia adatta al tipo di dati da riordinare.

                    Sono contento che @emded abbia sollevato il problema; perché questa discussione è molto interessante.

                    Tanto per citare una mia esperienza pregressa, avevo da disordinare (!) 600 dati in modo che i dati originali fossero spostati di almeno 6 posizioni in modo casuale prima o dopo la posizione iniziale e che i 6 dati non risultassero mai adiacenti (c’erano anche altri vincoli, ma tralascio, perché non sono essenziali qui). Il sistema TeX arriva con dei pacchetti pergenerare numeri casuali, ma per il mioscopo non erano affidabili. Ho dovuto affrontare il problema in un altro modo:
                    1) ho dovuto ricorrere ad un programma esterno, quindi ho dovuto creare per il mio editor un altro “engine” che prevedesse lo shell-escape per far eseguire quel file esterno dall’interno del sorgente Tex (assomiglia a Lua, come idea, ma a quei tempi non conoscevo l’esistenza di Lua).
                    2) ho scelto di usare FORTRAN, perché come codice compilato e non codice interpretato, riusltava velocissimo.
                    3) ho previsto il gioco di 600 file ausiliari da disordinare.
                    4) ho collegato ciascuno dei 600 file con un nome facilmente generabile in modo tale che il “number cruncher FORTRAN” potesse sostanzialmente lavorare solo con numeri.
                    Finalmente, sistemato il meccanismo di precisione creato con la logica descritta sopra, ho pototo svolgere il mio lavoro in frazioni di secondo di CPU. È ovvio che se avessi conosciuto Lua, avrei potuto usarlo invece di ricorrere al FORTRAN. Azzardo l’ipotesi che il tempo di esecuzione con Lua sarebbe stato più lungo di almeno un ordine di grandezza, visto che Lua è interpretato, non compilato.
                    Questo mio raccontino non serve a ordinare il contenuto di un ambiente itemize, come richiesto da @emded, ma dà l’idea del processo mentale che bisogna seguire per affrontare un problema complesso disponendo divari strumenti, alcuni dei quali soltanto sentiti nominare.
                    Non dimostra niente circa la maggiore o minire flessibilità di elaborazione che hanno sia Lua sia LaTeX3; questi vengono dopo aver sviluppato un processo mentale adatto al particolare materiale da riordinare.
                    Non vedo l’ora di poter scaricare la nuova versione della guidalua 🙂

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

                      OldClaudio” post=120601Per carità, non confondiamo le idee; ho scritto che lua è formidabile, ma che è n linguaggio di programmazione completamente diverso da qullo di TeX e LaTeX, quindi per usarlo in modo efficace bisogna imparalo bene come fai tu, Roberto, e, benché la guidalua sia utilissima, anche se la impari a memoria, non è con questo che voglia dire che sai usare Lua In modo veramente utile. È verissimo quello che dici LaTeX3 e Lua sono diversi sia nel linguaggio, sia negli scopi. Tuttavia LaTeX 3 è capace di fare cose che neanche Knuth si sognava. Tra le altre cose fa i conti, come si deve, non come Knuth aveva limitato alle funzioni della tipografia (solo numeri interi); non ti posso riassumenre in poche righe quello che LaTeX3 è capace di fare, ma basta leggersi le centinai di pagine del documento interface3, e si scopre che il motore Turing-completo a cui si rifaceva Enrico tempo fa, è effettivamente capace i fare cose stupende.
                      Ma nel caso del riordino di una lista non basta invocare una macro, magari specificandole i numeri delle righe di inizio e di fine dei blocchi da riordinare; bisogna avere una strategia da implementare e il riordino dei dati consente molte strategie e di conseguenza l’utente deve conoscere le varie possibilità per scegliere quella che gli fa più comodo in base al tipo di dati da riordinare.
                      Quindi il primo problema non è scegliere Lua o LaTeX3, ma è quello di scegliere la migliore strategia adatta al tipo di dati da riordinare.

                      Sono contento che @emded abbia sollevato il problema; perché questa discussione è molto interessante.

                      Tanto per citare una mia esperienza pregressa, avevo da disordinare (!) 600 dati in modo che i dati originali fossero spostati di almeno 6 posizioni in modo casuale prima o dopo la posizione iniziale e che i 6 dati non risultassero mai adiacenti (c’erano anche altri vincoli, ma tralascio, perché non sono essenziali qui). Il sistema TeX arriva con dei pacchetti pergenerare numeri casuali, ma per il mioscopo non erano affidabili. Ho dovuto affrontare il problema in un altro modo:
                      1) ho dovuto ricorrere ad un programma esterno, quindi ho dovuto creare per il mio editor un altro “engine” che prevedesse lo shell-escape per far eseguire quel file esterno dall’interno del sorgente Tex (assomiglia a Lua, come idea, ma a quei tempi non conoscevo l’esistenza di Lua).
                      2) ho scelto di usare FORTRAN, perché come codice compilato e non codice interpretato, riusltava velocissimo.
                      3) ho previsto il gioco di 600 file ausiliari da disordinare.
                      4) ho collegato ciascuno dei 600 file con un nome facilmente generabile in modo tale che il “number cruncher FORTRAN” potesse sostanzialmente lavorare solo con numeri.
                      Finalmente, sistemato il meccanismo di precisione creato con la logica descritta sopra, ho pototo svolgere il mio lavoro in frazioni di secondo di CPU. È ovvio che se avessi conosciuto Lua, avrei potuto usarlo invece di ricorrere al FORTRAN. Azzardo l’ipotesi che il tempo di esecuzione con Lua sarebbe stato più lungo di almeno un ordine di grandezza, visto che Lua è interpretato, non compilato.
                      Questo mio raccontino non serve a ordinare il contenuto di un ambiente itemize, come richiesto da @emded, ma dà l’idea del processo mentale che bisogna seguire per affrontare un problema complesso disponendo divari strumenti, alcuni dei quali soltanto sentiti nominare.
                      Non dimostra niente circa la maggiore o minire flessibilità di elaborazione che hanno sia Lua sia LaTeX3; questi vengono dopo aver sviluppato un processo mentale adatto al particolare materiale da riordinare.
                      Non vedo l’ora di poter scaricare la nuova versione della guidalua 🙂

                      Hai centrato il punto. Grazie Claudio.
                      Per la prossima versione della guidalua, ci vuole ancora un po’ di tempo per raggiungere l’obiettivo che mi ero proposto.
                      La guida ne esce rivoluzionata.
                      Ma ho ricevuto troppo pochi feedback per avere fretta.
                      Su github è già disponibile la nuova versione ancora incompleta, nel branch chiamato “magpie”.
                      https://github.com/GuITeX/guidalua/tree/magpie

                      Al link trovi solo i sorgenti naturalmente, perché il pdf sarà generato in automatico al momento dell’uscita della nuova versione.
                      Alla prossima.
                      R.

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

                  Go to top