Introduzione a LuaLaTeX

  • Creatore
    Topic
  • #55078
    Up
    0
    Down
    ::


    Sono contento di potervi regalare all’URL qui sotto questa nuova e fiammante Introduzione a LuaLaTeX.

    Magari 😥 non ne sarei capace, però forse qualcuno di voi ha voglia e tempo per spiegarci un poco a che cosa dovrebbero servire LuaTeX e LuaLaTeX e perché si dovrebbero usare al posto di o accanto a TeX e LaTeX. Oppure perché non ne vale davvero la pena.

    Le nebbie intorno a Xe- e compagnia cantante si sono un pelo diradate, ma qui proprio non saprei da che parte cominciare. Voi lo usate? A che serve?

    Ciao
    Tommaso

Visualizzazione 33 filoni di risposte
  • Autore
    Risposte
    • #55079
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::

        Sono contento di potervi regalare all’URL qui sotto questa nuova e fiammante Introduzione a LuaLaTeX.

        Dov’è l’URL qui sotto?

      • #55080
        Up
        0
        Down
        ::

        Sono contento di potervi regalare all’URL qui sotto questa nuova e fiammante Introduzione a LuaLaTeX.

        Dov’è l’URL qui sotto?

        Credo che fosse un larvato invito a qualcuno. Vedremo. Ma non a breve.

        Ciao
        Enrico

      • #55081
        Up
        0
        Down
        ::

        Sono contento di potervi regalare all’URL qui sotto questa nuova e fiammante Introduzione a LuaLaTeX.

        Magari 😥 non ne sarei capace, però forse qualcuno di voi ha voglia e tempo per spiegarci un poco a che cosa dovrebbero servire LuaTeX e LuaLaTeX e perché si dovrebbero usare al posto di o accanto a TeX e LaTeX. Oppure perché non ne vale davvero la pena.

        Le nebbie intorno a Xe- e compagnia cantante si sono un pelo diradate, ma qui proprio non saprei da che parte cominciare. Voi lo usate? A che serve?

        Ciao
        Tommaso

        LuaTeX è un motore di composizione, come TeX. Ha due fondamentali vantaggi: 1) la possibilità di poter inserire nello scripting TeX parti di scripting Lua, semplice quasi quanto il python; 2) la possibilità di gestire in modo semplicissimo i fonts, tutti quelli installati sul sistema, anche quelli truetype e opentype, senza necessità di particolari installazioni.
        LaTeX : TeX = LuaLaTeX : LuaTeX = XeLaTeX : XeTeX, nel senso che LuaLaTeX è un macrolinguaggio di LuaTeX come LaTeX è un macrolinguaggio di TeX, del tutto simile a LaTeX, tranne che puoi usare i fonts in questo modo: nel terminale fai un bel
        `fc-list`
        per vedere quali sono i tuoi fonts, e poi componi qualcosa del genere:
        `
        \documentclass[12pt]{report}
        \usepackage{fontspec}
        \begin{document}
        \setmainfont{Minion Pro} Tutto il documento sarà stampato in Minion Pro, un font opentype che alcuni hanno installato sul loro sistema.{\fontspec{Linotype Zapfino} Invece questa breve parte in Zapfino.}\\
        Da qui in poi si torna a usare il Minion.
        \end{document}
        `

        Il codice appena scritto va compilato con il motore XeTeX, con LuaTeX non dovrebbe essere molto diverso.

        Vale la pena di notare che il pacchetto fontspec (destinato ad essere usato con XeLaTeX e LuaLaTeX) è scritto interamente in expl3.

        Ciao.

        edit: ho googlato luatex e mi è sembrato che la documentazione non sia scarsa.

      • #55082
        Up
        0
        Down
        ::

        Sono contento di potervi regalare all’URL qui sotto questa nuova e fiammante Introduzione a LuaLaTeX.

        Magari 😥 non ne sarei capace, però forse qualcuno di voi ha voglia e tempo per spiegarci un poco a che cosa dovrebbero servire LuaTeX e LuaLaTeX e perché si dovrebbero usare al posto di o accanto a TeX e LaTeX. Oppure perché non ne vale davvero la pena.

        Le nebbie intorno a Xe- e compagnia cantante si sono un pelo diradate, ma qui proprio non saprei da che parte cominciare. Voi lo usate? A che serve?

        Ciao
        Tommaso

        LuaTeX è un motore di composizione, come TeX. Ha due fondamentali vantaggi: 1) la possibilità di poter inserire nello scripting TeX parti di scripting Lua, semplice quasi quanto il python; 2) la possibilità di gestire in modo semplicissimo i fonts, tutti quelli installati sul sistema, anche quelli truetype e opentype, senza necessità di particolari installazioni.
        LaTeX : TeX = LuaLaTeX : LuaTeX = XeLaTeX : XeTeX, nel senso che LuaLaTeX è un macrolinguaggio di LuaTeX come LaTeX è un macrolinguaggio di TeX, del tutto simile a LaTeX, tranne che puoi usare i fonts in questo modo: nel terminale fai un bel
        `fc-list`
        per vedere quali sono i tuoi fonts, e poi componi qualcosa del genere:
        `
        \documentclass[12pt]{report}
        \usepackage{fontspec}
        \begin{document}
        \setmainfont{Minion Pro} Tutto il documento sarà stampato in Minion Pro, un font opentype che alcuni hanno installato sul loro sistema.{\fontspec{Linotype Zapfino} Invece questa breve parte in Zapfino.}\\
        Da qui in poi si torna a usare il Minion.
        \end{document}
        `

        Il codice appena scritto va compilato con il motore XeTeX, con LuaTeX non dovrebbe essere molto diverso.

        Vale la pena di notare che il pacchetto fontspec (destinato ad essere usato con XeLaTeX e LuaLaTeX) è scritto interamente in expl3.

        Ciao.

        edit: ho googlato luatex e mi è sembrato che la documentazione non sia scarsa.

        La gestione dei font in LuaLaTeX e in XeLaTeX con il pacchetto fontspec è identica. LuaTeX si distingue da XeTeX perché ha appunto quel linguaggio di scripting e quindi funzioni che con TeX o pdfTeX nemmeno si possono immaginare.

        Naturalmente non è compatibile per altri aspetti con XeLaTeX: polyglossia, per esempio, non funziona e non è nemmeno pensabile, al momento, di adattarlo.

        Ciao
        Enrico

      • #55083
        Up
        0
        Down
        ::


        Era uno scherzo 😀
        Ogni tanto ci vuole. Non era, però, un invito, questa volta: mi interessava soltanto sapere qualcosa a grandissime linee, come avete già fatto, e vi ringrazio.

        Mi sembra di capire che Lua sia ancora in un mare un po’ alto.

        Ciao
        Tommaso

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

          Era uno scherzo 😀
          Ogni tanto ci vuole. Non era, però, un invito, questa volta: mi interessava soltanto sapere qualcosa a grandissime linee, come avete già fatto, e vi ringrazio.

          Mi sembra di capire che Lua sia ancora in un mare un po’ alto.

          Ciao
          Tommaso

          Che vuol dire “mare un po’ alto”?
          Per quello che ho sperimentato, il linguaggio Lua è molto compatto ed efficiente e per niente difficile da imparare.

          Molto simile concettualmente al python, ha le sue caratteristiche peculiari naturalmente (come il fatto che alle variabili possono essere assegnate anche funzioni), ma forse l’unica vera differenza con python è il minore sviluppo di librerie (in realtà volendo si può abbastanza facilmente estendere Lua).

          Implementata in standard C, gira su qualsiasi macchina dotata di un compilatore ANSI C, quindi praticamente su tutte, ammette un unica struttura complessa per la gestione dei dati, la tabella, con cui si possono implementare liste, alberi, array, array multipli, ecc e perfino il paradigma della programmazione ad oggetti (operatore : ).

          Penso quindi che potenzierà notevolmente il motore di composizione ma la vera sfida sarà mettere a punto strutture sintattiche idonee per l’utilizzo da parte degli utenti.
          Infatti in Lua è facilissimo, esaminare stringhe ed effettuare calcoli.

          In TeX per esempio, non è affatto banale eliminare da un argomento passato ad una macro eventuali caratteri spazio finali (io mi affido al pacchetto di Florant Chervet etoolbox), in LuaTeX diviene semplice come uno dei tanti problemi della programmazione.
          `
          function deblank(s)
          return string.match(s,”^%s(.-)*%s*$”)
          end
          `

          Per quanto riguarda la pubblicazione di guide, ne volevo inserire una in un articolo per ArSTeXnica che ho cominciato a scrivere ma quest’anno gli impegni sono aumentati ed il progetto sembra rimandato a dato da destinarsi.
          Qui entra in gioco la collaborazione, ma è tutto un altro argomento.
          Ciao

        • #55085
          Up
          0
          Down
          ::


          Mi sono espresso male, effettivamente, e anche in modo un poco azzardato. Del resto, non conosco proprio nulla dell’argomento, né so in che ordine consultare i manuali nel caso volessi approfondire la cosa. 😀

          Ciao
          Tommaso

        • #55086
          Up
          0
          Down
          ::

          [quote]
          Sono contento di potervi regalare all’URL qui sotto questa nuova e fiammante Introduzione a LuaLaTeX.

          Dov’è l’URL qui sotto?

          Credo che fosse un larvato invito a qualcuno. Vedremo. Ma non a breve.

          Ciao
          Enrico[/quote]
          ??

        • #55087
          admin
          Amministratore del forum
            Up
            0
            Down
            ::

            Sono contento di potervi regalare all’URL qui sotto questa nuova e fiammante Introduzione a LuaLaTeX.

            Magari 😥 non ne sarei capace, però forse qualcuno di voi ha voglia e tempo per spiegarci un poco a che cosa dovrebbero servire LuaTeX e LuaLaTeX e perché si dovrebbero usare al posto di o accanto a TeX e LaTeX. Oppure perché non ne vale davvero la pena.

            Le nebbie intorno a Xe- e compagnia cantante si sono un pelo diradate, ma qui proprio non saprei da che parte cominciare. Voi lo usate? A che serve?

            Ciao
            Tommaso

            `\documentclass{article}
            \usepackage[utf8]{luainputenc}
            \newcommand{\hello}{%
            \directlua{tex.print('Hello World')}%
            }
            \usepackage{lipsum}
            \begin{document}
            \hello. The standard approximation $\pi = \directlua{tex.sprint(math.pi)}$

            $1+1=\directlua{tex.sprint(1+1)}$
            \end{document}`
            `lualatex file.tex`

            Ho scritto la mia prima guida 😛 😀 8)

            Ciao
            ansys

          • #55088
            Up
            0
            Down
            ::

            `\documentclass{article}
            \usepackage[utf8]{luainputenc}
            \newcommand{\hello}{%
            \directlua{tex.print('Hello World')}%
            }
            \usepackage{lipsum}
            \begin{document}
            \hello. The standard approximation $\pi = \directlua{tex.sprint(math.pi)}$

            $1+1=\directlua{tex.sprint(1+1)}$
            \end{document}`
            `lualatex file.tex`

            Ho scritto la mia prima guida 😛 😀 8)

            Prime righe della documentazione di luainputenc:

            Input encoding management for LuaTEX, needed only for compatibility with old
            documents. For new documents, using UTF-8 encoding and Unicode fonts is
            strongly recommended. You’ve been warned!

            Sarà meglio toglierlo e sostiuire con \usepackage{fontspec}.

            Ciao
            Enrico

          • #55089
            admin
            Amministratore del forum
              Up
              0
              Down
              ::

              Prime righe della documentazione di luainputenc:

              Input encoding management for LuaTEX, needed only for compatibility with old
              documents. For new documents, using UTF-8 encoding and Unicode fonts is
              strongly recommended. You’ve been warned!

              Sarà meglio toglierlo e sostiuire con \usepackage{fontspec}.

              Ciao
              Enrico

              🙄 adesso faccio como Knuth; scrivo un assegno di $2.56 per ogni errore della mia guida. Ma vi prego: non voglio andare in bancarotta 🙂 .

              A parte gli scherzi, quel codice l’ho preso dalla rete ieri sera (quando non ho nulla da fare, qualcosa devo inventarmi :D), la documentazione non l’ho proprio vista.

              Se così stanno le cose, mi sembra di capire che il passaggio da (pdf)latex a (lua)latex sia quasi
              indolore, a meno di qualche piccola cosa, e la possibilità di fare “scripting” in un documento
              potrebbe aiutare molto chi scrive documenti scientifici. O sbaglio?

              Ciao
              ansys 😉

            • #55090
              Up
              0
              Down
              ::


              Buongiorno, digitando da terminale
              `texdoc lualatex`
              compare una breve guida di 15 pagine in cui vengono spiegate le differenze sostanziali tra lualatex e gli altri motori di composizione. La cito magari qualcuno non lo sapesse. Per me è stata utile per iniziare a capire di cosa si stesse parlando.

              Ciao a tutti
              Fra

            • #55091
              admin
              Amministratore del forum
                Up
                0
                Down
                ::

                Buongiorno, digitando da terminale
                `texdoc lualatex`
                compare una breve guida di 15 pagine in cui vengono spiegate le differenze sostanziali tra lualatex e gli altri motori di composizione. La cito magari qualcuno non lo sapesse. Per me è stata utile per iniziare a capire di cosa si stesse parlando.

                Ciao a tutti
                Fra

                Esatto. Se si vuole conoscere qualche utile primitiva:
                `texdoc luatex`

                Ciao
                ansys

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

                  Buongiorno, digitando da terminale
                  `texdoc lualatex`
                  compare una breve guida di 15 pagine in cui vengono spiegate le differenze sostanziali tra lualatex e gli altri motori di composizione. La cito magari qualcuno non lo sapesse. Per me è stata utile per iniziare a capire di cosa si stesse parlando.

                  Ciao a tutti
                  Fra

                  Esatto. Se si vuole conoscere qualche utile primitiva:
                  `texdoc luatex`

                  Ciao
                  ansys

                  Umh,
                  vedo che l’interesse per Lua(La)TeX sta crescendo anche nel nostro forum.
                  Intendo questo, un messaggio che contribuisce alla ‘guida’ di ansys, aggiungo brevi note:
                  Nel codice Lua, argomento di una macro \directlua, non inserite mai il simbolo di commento del doppio dash (–). Il motivo è che LuaTeX legge il codice inserendolo su un unica riga pertanto il simbolo che serve per segnarare una riga di commento nel linguaggio Lua, si estenderebbe per tutto il codice che lo segue, che venendo processato come un normale commento.

                  Per commentare basta usare il simbolo di % proprio perché il codice Lua all’interno di \directlua viene prima processato da TeX. Ma questo fa nascere ulteriori guai, per esempio come inserire nel codice Lua il simbolo di % stesso, simbolo che è utilizzato per scrivere speciali stringhe di testo.

                  Inoltre qualsiasi macro, o meglio qualsiasi backslash viene gestito prima da TeX con altri effetti collaterali, che si possono risolvere con trucchetti. I caratteri speciali di Lua e di TeX producono quindi problemini la cui soluzione, almeno per quel che ne so e per quel che è LuaTeX adesso, non è molto elegante.

                  Ma ho delle domande:
                  è possibile chiedere all’utente in fase di esecuzione un valore, per esempio una password? ovvero un dato che non dovrebbe essere scritto nel sorgente (se non è chiaro il quesito ditemelo)?
                  Ho provato con la funzione io.read(‘*number’) di Lua ma l’esecuzione non si interrompe come accadrebbe con un normale script in Lua.

                  Altra domanda:
                  è possibile inserire il simbolo di percentuale in una stringa Lua tramice il codice carattere unicode.

                  Bye

                • #55093
                  Up
                  0
                  Down
                  ::

                  Ma ho delle domande:
                  è possibile chiedere all’utente in fase di esecuzione un valore, per esempio una password? ovvero un dato che non dovrebbe essere scritto nel sorgente (se non è chiaro il quesito ditemelo)?
                  Ho provato con la funzione io.read(‘*number’) di Lua ma l’esecuzione non si interrompe come accadrebbe con un normale script in Lua.

                  Altra domanda:
                  è possibile inserire il simbolo di percentuale in una stringa Lua tramice il codice carattere unicode.

                  Il pacchetto luacode mette a disposizione ben due comandi e due ambienti che accedono indirettamente a \directlua. Se proprio hai bisogno di % nel codice Lua, usi \luaexec oppure l’ambiente luacode (in entrambi c’è l’espansione preliminare dei token fatta da TeX); c’è anche l’ambiente luacode* che non interpreta nulla (una specie di \directlua{\verb|…|}, per capirci).

                  Ciao
                  Enrico

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

                    Ma ho delle domande:
                    è possibile chiedere all’utente in fase di esecuzione un valore, per esempio una password? ovvero un dato che non dovrebbe essere scritto nel sorgente (se non è chiaro il quesito ditemelo)?
                    Ho provato con la funzione io.read(‘*number’) di Lua ma l’esecuzione non si interrompe come accadrebbe con un normale script in Lua.

                    Altra domanda:
                    è possibile inserire il simbolo di percentuale in una stringa Lua tramice il codice carattere unicode.

                    Il pacchetto luacode mette a disposizione ben due comandi e due ambienti che accedono indirettamente a \directlua. Se proprio hai bisogno di % nel codice Lua, usi \luaexec oppure l’ambiente luacode (in entrambi c’è l’espansione preliminare dei token fatta da TeX); c’è anche l’ambiente luacode* che non interpreta nulla (una specie di \directlua{\verb|…|}, per capirci).

                    Ciao
                    Enrico

                    Grazie per la risposta, ne farò prezioso riferimento per il futuro, come sempre!!!
                    Grazie ancora.
                    R.

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


                      Da notare che in Lua un carattere può essere espresso anche in formato ascii.
                      Occorre indicare il codice del carattere con l’espressione \ddd dove ddd è il numero decimale del codice.
                      Per fortuna il carattere % è nella lista ascii alla posizione 37, per cui, per esempio, per formattare un numero intero con 6 posizioni fisse usando il formato “%06d” è possibile scrivere:

                      `
                      \directlua{
                      local percsymb = “\string\037”
                      local frmts = string.format( percsymb .. “06d”, 123)
                      tex.sprint( frmts )
                      }`

                      Ricordo che il carattere backslash deve essere trattato con il comando primitivo TeX \string, per far si che la command sequence non diventi token.

                      il risultato sarà del frammento di codice sarà (spero) 000123.
                      Questo grazie al fatto che i codici di formato ed i pattern in Lua sono normalissime stringhe, quindi si possono costruire esse stesse come necessità.
                      Saluti

                    • #55096
                      admin
                      Amministratore del forum
                        Up
                        0
                        Down
                        ::

                        Da notare che in Lua un carattere può essere espresso anche in formato ascii.

                        Ho provato con \luaexec ma non ci sono riuscito. L’esempio di cui sotto, potresti adattarlo per un numero in 3 o 4 cifre significative?
                        `\documentclass{article}
                        \usepackage{amsmath,ar}
                        \newcommand{\ARvalue}[2]{%
                        \directlua{
                        b=#1
                        S=#2
                        AR=b^2/S
                        tex.sprint(AR)
                        }
                        }
                        \begin{document}
                        [\ldots] considerando una apertura alare di $b=10$~m si ha
                        \[
                        \AR=\dfrac{b^2}{S}=\ARvalue{10}{9}
                        \]
                        pertanto [\ldots]
                        \end{document}`

                        Ciao,
                        ansys.

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

                          Da notare che in Lua un carattere può essere espresso anche in formato ascii.

                          Ho provato con \luaexec ma non ci sono riuscito. L’esempio di cui sotto, potresti adattarlo per un numero in 3 o 4 cifre significative?
                          `\documentclass{article}
                          \usepackage{amsmath,ar}
                          \newcommand{\ARvalue}[2]{%
                          \directlua{
                          b=#1
                          S=#2
                          AR=b^2/S
                          tex.sprint(AR)
                          }
                          }
                          \begin{document}
                          [\ldots] considerando una apertura alare di $b=10$~m si ha
                          \[
                          \AR=\dfrac{b^2}{S}=\ARvalue{10}{9}
                          \]
                          pertanto [\ldots]
                          \end{document}`

                          Ciao,
                          ansys.

                          Ciao,
                          ci sono due soluzioni: la prima è interamente interna al codice Lua, dove il numero è prima arrotondato a due cifre (numero passato come opzione al comando modificato), e poi formattato a due cifre con la funzione string.format() che deriva dalla sintassi di printf del C (naturalmente nel codice bisognerebbe scrivere anche una serie di controlli sui dati di input che ho omesso):
                          `
                          \documentclass{article}
                          \usepackage{amsmath,ar}
                          \newcommand{\calcARvalue}[3][2]{\directlua{
                          % ricordati di premettere local alle variabili
                          % che spariscono alla chiusura del comando
                          local b=#2
                          local S=#3
                          local AR=b^2/S

                          % arrotondamento
                          local tenpower = tonumber(#1)
                          local posdec = 10^tenpower
                          local AR = math.floor(AR*posdec)/posdec

                          % formattazione di uscita del risultato
                          local frmt = “\string\037.” ..tostring(tenpower)..”f”
                          tex.sprint(string.format(frmt,AR))
                          }
                          }
                          \begin{document}
                          [\ldots] considerando una apertura alare di $b=10$~m si ha
                          \[
                          \AR=\dfrac{b^2}{S}=\calcARvalue{10}{9}
                          \]

                          pertanto [\ldots]

                          se tuttavia variamo il numero di cifre significative del calcolo si ottiene:
                          \[
                          \AR=\dfrac{b^2}{S}=\calcARvalue[4]{10}{9}
                          \]

                          pertanto [\ldots]
                          \end{document}`

                          Oppure, possiamo far eseguire al pacchetto siuntix il lavoro, esternamente al codice Lua (naturalmente preferisco la prima soluzione poiché l’arrotondamento è gestito dal calcolo).
                          In questo caso ci si può scontrare con le capacità di calcolo di TeX. Prova il seguente codice:
                          `
                          \documentclass{article}
                          \usepackage{siunitx}
                          \usepackage{amsmath,ar}

                          \sisetup{output-decimal-marker={,}}

                          \newcommand{\calcARvalue}[3][2]{\directlua{
                          local b=#2
                          local S=#3
                          local AR=b^2/S
                          AR = math.floor(AR*10^8)/10^8

                          local bs = “\string\\” % backslash char
                          tex.sprint(bs..”num[round-mode=places,round-precision=#1]{“..AR..”}”)
                          }
                          }
                          \begin{document}
                          [\ldots] considerando una apertura alare di $b=10$~m si ha
                          \[
                          \AR=\dfrac{b^2}{S}=\calcARvalue{10}{9}
                          \]

                          pertanto [\ldots]

                          se tuttavia variamo il numero di cifre significative del calcolo si ottiene:
                          \[
                          \AR=\dfrac{b^2}{S}=\calcARvalue[4]{10}{9}
                          \]

                          pertanto [\ldots]
                          \end{document}`
                          …dovrebbe funzionare ma il numero il virgola mobile ha troppi decimali e produce un errore di “Number too big!”, così è necessario introdurre un arrotondamento “forzato” all’ottava cifra decimale, e passare il numero a siunitx.

                          La prima soluzione si può comunque adattare per l’uso con siunitx in modo da rappresentare i valori numerici con unità di misura.
                          Occorre però controllare che il numero di decimali di arrotondamento non superi il valore di 8,10.

                          Bye

                        • #55098
                          Up
                          0
                          Down
                          ::

                          Da notare che in Lua un carattere può essere espresso anche in formato ascii.

                          Ho provato con \luaexec ma non ci sono riuscito. L’esempio di cui sotto, potresti adattarlo per un numero in 3 o 4 cifre significative?
                          `\documentclass{article}
                          \usepackage{amsmath,ar}
                          \newcommand{\ARvalue}[2]{%
                          \directlua{
                          b=#1
                          S=#2
                          AR=b^2/S
                          tex.sprint(AR)
                          }
                          }
                          \begin{document}
                          [\ldots] considerando una apertura alare di $b=10$~m si ha
                          \[
                          \AR=\dfrac{b^2}{S}=\ARvalue{10}{9}
                          \]
                          pertanto [\ldots]
                          \end{document}`

                          Ciao,
                          ansys.

                          C’è qualcosa di male in questo codice?
                          `\newcommand{\ARvalue}[2]{%
                          \directlua{tex.sprint(string.format(“\%.4f”,#1^2/#2))}}`
                          Poi bisogna capire che intendi con cifre significative.

                          Ciao
                          Enrico

                        • #55099
                          admin
                          Amministratore del forum
                            Up
                            0
                            Down
                            ::


                            Pausa caffè 8)

                            Grazie ad entrambi. Le soluzioni sono tutte efficaci, però non c’è che dire, quella di egreg9 è la più efficiente.

                            Riguardo le cifre significative scusatemi, volevo dire cifre decimali dopo la virgola.

                            Happy LuaTeXing 🙂

                            Ciao,
                            ansys.

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

                              [quote]Da notare che in Lua un carattere può essere espresso anche in formato ascii.

                              Ho provato con \luaexec ma non ci sono riuscito. L’esempio di cui sotto, potresti adattarlo per un numero in 3 o 4 cifre significative?
                              `\documentclass{article}
                              \usepackage{amsmath,ar}
                              \newcommand{\ARvalue}[2]{%
                              \directlua{
                              b=#1
                              S=#2
                              AR=b^2/S
                              tex.sprint(AR)
                              }
                              }
                              \begin{document}
                              [\ldots] considerando una apertura alare di $b=10$~m si ha
                              \[
                              \AR=\dfrac{b^2}{S}=\ARvalue{10}{9}
                              \]
                              pertanto [\ldots]
                              \end{document}`

                              Ciao,
                              ansys.

                              C’è qualcosa di male in questo codice?
                              `\newcommand{\ARvalue}[2]{%
                              \directlua{tex.sprint(string.format(“\%.4f”,#1^2/#2))}}`
                              Poi bisogna capire che intendi con cifre significative.

                              Ciao
                              Enrico[/quote]
                              Che bello! funziona il semplice \%!!!
                              Non avevo osato provarlo.
                              Grazie dell’idea.

                            • #55101
                              admin
                              Amministratore del forum
                                Up
                                0
                                Down
                                ::


                                Altro esempio preso dalla rete:
                                `\documentclass{article}
                                \usepackage{luatextra}
                                \usepackage{tikz}

                                \begin{luacode}
                                require(“math”)
                                sin=math.sin;cos=math.cos;pi=math.pi
                                point = function (f,x) return “(“..x..”,”..f(x)..”)” end;
                                path = function (f,a,b,n)
                                local step = (b-a)/n; local s = “”;
                                for x = a, b – step/2, step do s = s .. point(f,x) .. “–” end;
                                s = s .. point(f,b);
                                return s
                                end;
                                \end{luacode}

                                \def\plot#1#2#3#4{%
                                \directlua{
                                do local f = function (x) return #1 end;
                                tex.print(path(f,#2,#3,#4)) end;
                                }%
                                }

                                \begin{document}
                                \begin{tikzpicture}
                                \draw[thin,->] (-.2,0)–(6.5,0)node

                                {$x$};
                                \draw[thin,->] (0,-2.2)–(0,2.2)node[above]{$y$};
                                \draw[thick] \plot{sin(2*x)+cos(x)}{0}{2*pi}{100}node[above]{$y=\sin(2x)+\cos(x)$};
                                \end{tikzpicture}
                                \end{document}`

                                Ciao,
                                ansys.

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

                                  Altro esempio preso dalla rete:
                                  `\documentclass{article}
                                  \usepackage{luatextra}
                                  \usepackage{tikz}

                                  \begin{luacode}
                                  require(“math”)
                                  sin=math.sin;cos=math.cos;pi=math.pi
                                  point = function (f,x) return “(“..x..”,”..f(x)..”)” end;
                                  path = function (f,a,b,n)
                                  local step = (b-a)/n; local s = “”;
                                  for x = a, b – step/2, step do s = s .. point(f,x) .. “–” end;
                                  s = s .. point(f,b);
                                  return s
                                  end;
                                  \end{luacode}

                                  \def\plot#1#2#3#4{%
                                  \directlua{
                                  do local f = function (x) return #1 end;
                                  tex.print(path(f,#2,#3,#4)) end;
                                  }%
                                  }

                                  \begin{document}
                                  \begin{tikzpicture}
                                  \draw[thin,->] (-.2,0)–(6.5,0)node

                                  {$x$};
                                  \draw[thin,->] (0,-2.2)–(0,2.2)node[above]{$y$};
                                  \draw[thick] \plot{sin(2*x)+cos(x)}{0}{2*pi}{100}node[above]{$y=\sin(2x)+\cos(x)$};
                                  \end{tikzpicture}
                                  \end{document}`

                                  Ciao,
                                  ansys.

                                  Interessante. Sarà il punto di partenza per certi esperimenti.
                                  Grazie!
                                  Una precisazione:
                                  Anche se la sintassi delle funzioni anonime di Lua crea confusione in chi è alle prime armi con questo linguaggio.
                                  (in Lua le funzioni sono valori di prima classe e possono essere assegnate a variabili, anzi la sintassi standard è solo zucchero sintattico per creare una variabile di tipo function)

                                  Infatti di solito non si scrive così:
                                  ` point = function (f,x) return “(“..x..”,”..f(x)..”)” end;`

                                  Ma così (in modo del tutto equivalente):
                                  ` function point(f,x) return “(“..x..”,”..f(x)..”)” end;`

                                  Grazie per la segnalazione.
                                  R.

                                • #55103
                                  admin
                                  Amministratore del forum
                                    Up
                                    0
                                    Down
                                    ::


                                    Grazie a te per la spiegazione. Da questi esempi si può apprendere molto.
                                    Noto comunque la carenza di documentazione. Il solo fascicoletto di 14 pagine di Manuel Pégourié-Gonnard è un po’ riduttivo.

                                    Ciao,
                                    ansys.

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

                                      Grazie a te per la spiegazione. Da questi esempi si può apprendere molto.
                                      Noto comunque la carenza di documentazione. Il solo fascicoletto di 14 pagine di Manuel Pégourié-Gonnard è un po’ riduttivo.

                                      Ciao,
                                      ansys.

                                      Veramente non si sta parlando di LuaTeX, ma semplicemente di Lua, quindi occorre riferirsi al PiL (2nd edition).
                                      Si tratta di un ottimo acquisto.
                                      R.

                                    • #55105
                                      admin
                                      Amministratore del forum
                                        Up
                                        0
                                        Down
                                        ::

                                        Grazie a te per la spiegazione. Da questi esempi si può apprendere molto.
                                        Noto comunque la carenza di documentazione. Il solo fascicoletto di 14 pagine di Manuel Pégourié-Gonnard è un po’ riduttivo.

                                        Ciao,
                                        ansys.

                                        Veramente non si sta parlando di LuaTeX, ma semplicemente di Lua, quindi occorre riferirsi al PiL (2nd edition).
                                        Si tratta di un ottimo acquisto.
                                        R.

                                        Si scusami io mi riferivo a Lua(La)TeX.
                                        Riguardo Lua, oltre al PiL trovo altrettanto valido Beginning Lua programming .

                                        Ciao,
                                        ansys.

                                      • #55106
                                        Up
                                        0
                                        Down
                                        ::


                                        Ciao, sono cose che in parte avete già detto, ma vi riassumo comunque la mia esperienza casomai potesse essere utile a qualcuno e/o evete dei consigli da darmi.
                                        In questi giorni ho realizzato un piccolo script in Lua per esguire una serie di calcoli: si impostano una serie di parametri nel file *.lua, lo si esegue ed i risultati vengono visualizzati sulla riga di comando. Sì, funziona, ma non è molto pratico. Si può fare di meglio: in LuaLaTeX ho caricato il paccheto luatextra ed ho semplicente copiato senza nessuna modifica il mio codice Lua nell’ambiente luacode*. In seguito ho richiamato i vari risultati all’interno del codice LaTeX utilizzando il comando \luaexec{}; in questo caso sono necessarie alcune piccole modifiche spiegate nella guida di luacode. Ora il file *.tex contiene sia il codice Lua che esegue i calcoli, sia quello LaTeX che li rapprenta ed il risultato finale è un comodo *.pdf.
                                        Forse si può fare anche senza Lua e sono io a non esserne capace, ma comporre tutto il corpo di una tabella con un solo ciclo è una sciccheria indescrivibile. 😀
                                        `\begin{table}
                                        \centering
                                        \begin{tabular}{ccc}
                                        \toprule
                                        x & y & z \\
                                        \midrule
                                        \luaexec{
                                        for i=1,\#punti do
                                        tex.sprint(string.format(“\%.3f”,punti[1])..” & “..string.format(“\%.3f”,punti[2])..” & “..string.format(“\%.3f”,punti[3])..” \\\\”)
                                        end
                                        }
                                        \bottomrule
                                        \end{tabular}
                                        \end{table}`

                                      • #55107
                                        admin
                                        Amministratore del forum
                                          Up
                                          0
                                          Down
                                          ::

                                          “]Ciao, sono cose che in parte avete già detto, ma vi riassumo comunque la mia esperienza casomai potesse essere utile a qualcuno e/o evete dei consigli da darmi.
                                          In questi giorni ho realizzato un piccolo script in Lua per esguire una serie di calcoli: si impostano una serie di parametri nel file *.lua, lo si esegue ed i risultati vengono visualizzati sulla riga di comando. Sì, funziona, ma non è molto pratico. Si può fare di meglio: in LuaLaTeX ho caricato il paccheto luatextra ed ho semplicente copiato senza nessuna modifica il mio codice Lua nell’ambiente luacode*. In seguito ho richiamato i vari risultati all’interno del codice LaTeX utilizzando il comando \luaexec{}; in questo caso sono necessarie alcune piccole modifiche spiegate nella guida di luacode. Ora il file *.tex contiene sia il codice Lua che esegue i calcoli, sia quello LaTeX che li rapprenta ed il risultato finale è un comodo *.pdf.
                                          Forse si può fare anche senza Lua e sono io a non esserne capace, ma comporre tutto il corpo di una tabella con un solo ciclo è una sciccheria indescrivibile. 😀
                                          `\begin{table}
                                          \centering
                                          \begin{tabular}{ccc}
                                          \toprule
                                          x & y & z \\
                                          \midrule
                                          \luaexec{
                                          for i=1,\#punti do
                                          tex.sprint(string.format(“\%.3f”,punti[1])..” & “..string.format(“\%.3f”,punti[2])..” & “..string.format(“\%.3f”,punti[3])..” \\\\”)
                                          end
                                          }
                                          \bottomrule
                                          \end{tabular}
                                          \end{table}`

                                          Ciao Marco, complimenti per l’intervento.
                                          Sei anche tu un sostenitore di LuaLaTeX? Ho fatto esplicita richiesta in Xe(La)TeX & Lua(La)TeX per due nuove sezioni; speriamo bene.

                                          Potresti riportare il codice intero (e.m.c., esempio minimo compilabile), cioè quello che va da \documentclass{…} a \end{document}?

                                          Grazie,
                                          ansys.

                                        • #55108
                                          Up
                                          0
                                          Down
                                          ::


                                          Il codice in Lua riceve una curva in forma parametrica e calcola una serie di corde che ne approssimano il supporto senza discostrasi più di un certo valore. Non è ancora finito, vorrei aggiungere un bel grafico, comunque:`\documentclass[12pt,a4paper]{article}
                                          %\usepackage[italian]{babel}
                                          \usepackage{luatextra}
                                          \usepackage{layaureo}
                                          \pagestyle{empty}
                                          \usepackage{booktabs}

                                          \begin{document}

                                          \begin{luacode*}
                                          — dati —
                                          function curva(t)
                                          return {2*math.cos(t),math.sin(t),t}
                                          end
                                          punti={0,1}
                                          tolleranza=0.01
                                          — calcoli —
                                          function distanza(p1,p2)
                                          return math.sqrt((p2[1]-p1[1])^2+(p2[2]-p1[2])^2+(p2[3]-p1[3])^2)
                                          end
                                          function freccia(t1,t2,t3)
                                          local a=distanza(curva(t2),curva(t3))
                                          local b=distanza(curva(t1),curva(t2))
                                          local c=distanza(curva(t1),curva(t3))
                                          return b*math.sin(math.acos((b^2+c^2-a^2)/(2*b*c)))
                                          end
                                          function frecciamax(t1,t3)
                                          local max=0
                                          local t
                                          local n=1000
                                          for i=1,n-1 do
                                          local t2=t1+i*(t3-t1)/n
                                          local f=freccia(t1,t2,t3)
                                          if f>max then
                                          max=f
                                          t=t2
                                          end
                                          end
                                          return {max,t}
                                          end
                                          function infittisci(punti)
                                          for i=1,#punti-1 do
                                          local fm=frecciamax(punti,punti)
                                          if fm[1]>tolleranza then
                                          table.insert(punti,i+1,fm[2])
                                          end
                                          end
                                          return punti
                                          end
                                          repeat
                                          local p=#punti
                                          infittisci(punti)
                                          until #punti==p
                                          for i=1,#punti do
                                          table.insert(punti,i,curva(punti))
                                          table.remove(punti,i+1)
                                          end
                                          corde={}
                                          for i=1,#punti-1 do
                                          table.insert(corde,distanza(punti,punti))
                                          end
                                          angoli={}
                                          for i=1,#corde-1 do
                                          local a=math.acos((corde^2+corde^2-distanza(punti,punti)^2)/(2*corde*corde))
                                          table.insert(angoli,a*180/math.pi)
                                          end
                                          \end{luacode*}

                                          \begin{table}
                                          \caption{Coordinate punti.}
                                          \centering
                                          \medskip
                                          \begin{tabular}{ccc}
                                          \toprule
                                          $x$ & $y$ & $z$ \\
                                          \midrule
                                          \luaexec{
                                          for i=1,\#punti do
                                          tex.sprint(string.format(“\%.3f”,punti[1])..” & “..string.format(“\%.3f”,punti[2])..” & “..string.format(“\%.3f”,punti[3])..” \\\\”)
                                          end
                                          }
                                          \bottomrule
                                          \end{tabular}
                                          \end{table}

                                          \begin{table}
                                          \caption{Lunghezza corde.}
                                          \centering
                                          \medskip
                                          \begin{tabular}{ccc}
                                          \toprule
                                          $l$ \\
                                          \midrule
                                          \luaexec{
                                          for i=1,\#corde do
                                          tex.sprint(string.format(“\%.3f”,corde)..” \\\\”)
                                          end
                                          }
                                          \bottomrule
                                          \end{tabular}
                                          \end{table}

                                          \begin{table}
                                          \caption{Angoli interni.}
                                          \centering
                                          \medskip
                                          \begin{tabular}{ccc}
                                          \toprule
                                          $\alpha$ \\
                                          \midrule
                                          \luaexec{
                                          for i=1,\#angoli do
                                          tex.sprint(string.format(“\%.3f”,angoli)..” \\\\”)
                                          end
                                          }
                                          \bottomrule
                                          \end{tabular}
                                          \end{table}

                                          \end{document}
                                          `
                                          C’è però un problema: se uso babel mi si blocca la compilazione, magari un altro giorno vedo di risolvere la cosa…

                                        • #55109
                                          Up
                                          0
                                          Down
                                          ::

                                          “]C’è però un problema: se uso babel mi si blocca la compilazione, magari un altro giorno vedo di risolvere la cosa…

                                          Il problema è nel carattere “doppio apice”. Devi disabilitarne l’uso speciale che ne fa il modulo italiano di babel inserendo, subito dopo \begin{document}
                                          `\shorthandoff{“}`
                                          Se per caso ti servissero i trucchi con il doppio apice, devi disabilitarlo localmente prima di \luaexec.

                                          In alternativa, usare \string” invece dei doppi apici “nudi”; oppure \” dopo aver dato
                                          `\usepackage{etextools}
                                          \makeatletter
                                          \edef\luacode@doublequotechar{\string”}
                                          \patchcmd\luacode@execute{\luacode@percentchar}
                                          {\luacode@percentchar\let\”\luacode@doublequotechar}{}{}
                                          \makeatother`
                                          nel preambolo.

                                          Potrebbe essere una cosa da segnalare all’autore del pacchetto.

                                          Ciao
                                          Enrico

                                        • #55110
                                          admin
                                          Amministratore del forum
                                            Up
                                            0
                                            Down
                                            ::


                                            Grazie Marco, e complimenti per il codice. Io posso solo apprendere, i commenti arriveranno da altri.

                                            Ciao,
                                            ansys.

                                          • #55111
                                            Up
                                            0
                                            Down
                                            ::


                                            Grazie ad entrambi. Ho provato a scrivere un’email a Johannes Braams, ma mi sono reso conto che il mio inglese non è sufficiente a spiegare in maniera comprensibile il problema del doppio apice. Casomai volesse farlo qualcuno me lo faccia sapere, che ne spedisco una copia anch’io/aggiungiamo il mio nome. Ciao…

                                          • #55112
                                            Up
                                            0
                                            Down
                                            ::

                                            “]Grazie ad entrambi. Ho provato a scrivere un’email a Johannes Braams, ma mi sono reso conto che il mio inglese non è sufficiente a spiegare in maniera comprensibile il problema del doppio apice. Casomai volesse farlo qualcuno me lo faccia sapere, che ne spedisco una copia anch’io/aggiungiamo il mio nome. Ciao…

                                            Intendevo l’autore del pacchetto luacode. Braams non c’entra nulla.

                                            Ciao
                                            Enrico

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

                                        Go to top