lualatex come funziona?

  • Creatore
    Topic
  • #115867
    davidebond
    Partecipante
      Up
      0
      Down
      ::


      Salve. Ho appena comperato un libro di Voss “Einführung in Luatex und Lualatex, Lehmanns Media, 2013”. Non c’è un solo comando che funzioni. Eppure io ho installato lua con miktex. Dal comando più semplice da eseguire da terminale in poi, non funziona niente. Intanto non dice in che contesto va inserito il codice lua. Un foglio bianco? Con quale estensione? .tex, .lua, .docx?

      Un esempio è il seguente:

      `
      \directlua{%
      tex.print(“Wer A sagt, “)
      — es kommt noch Text
      tex.print(“muss auch B sagen”)}
      `

      Tutto qui. Non parla di ambienti o altro. Dice solo che l’esempio funziona commentando — es kommt noch Text.

      Se si va su Wikipedia si trova un esempio di articolo: https://de.wikipedia.org/wiki/LuaTeX. Uno capisce almeno Cosa sta facendo.

      Io ho salvato il codice con l’estensione .tex e compilato con Lualatex e mi dà errore.

      Potreste chiarirmi in che contesto vanno inseriti i pezzi di codice, perché tutto il libro è così. L’ho preso perché il titolo dice chiaramente “Introduzione…”. I libri sul latex spiegano tutto.

      Grazie e ciao,

      davide

    Visualizzazione 19 filoni di risposte
    • Autore
      Risposte
      • #115868
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao Davide,
          LuaLaTeX è il compositore LuaTeX che esegue il formato LaTeX.
          Mentre LaTeX è il compositore pdfTeX che esegue il formato LaTeX.

          Il sorgente dovrà essere scritto con la sintassi del formato, per esempio:
          `\documentclass{article}
          \begin{document}
          Ciao mondo!
          \end{document}`

          LuaTeX estende notevolmente pdfTeX (da cui deriva). La funzionalità più importante è che esso è n grado di eseguire codice Lua, per esempio attraverso la nuova primitiva \directlua. Prova a compilare questo:
          `\documentclass{article}
          \begin{document}
          Ciao \directlua{tex.print(“mondo”)}!
          \end{document}`

          Pur molto breve, questo sorgente richiede nuove conoscenze rispetto a quelle “tradizionali”. Sono certo che il libro che stai leggendo te le potrà dare 😉
          R.

        • #115869
          davidebond
          Partecipante
            Up
            0
            Down
            ::


            Grazie della risposta. Anzitutto, una Cosa: ho cercato libri su luatex & co. e ho trovato solo questo libro il cui autore è su Wikipedia. Ma a me non funzionano i primi comandi. Per esempio, lanciata la console, mi dice di scrivere

            `
            luatex
            `

            quindi,

            `
            &lualatex
            `

            il codice prosegue, ma la mia console dà errore e si chiude. Fine della storia.

            Grazie e ciao,

            davide

          • #115870
            davidebond
            Partecipante
              Up
              0
              Down
              ::


              Oppure:

              `
              \documentclass{article}
              \usepackage{luacode}

              \begin{document}

              \pdfcompresslevel=0\newcount\gstatelevel
              \def\pdfsave{\latelua{pdf.print(“page”, “q\string\n”)}}
              \def\pdfrestore{\latelua{pdf.print(“page”, “Q\string\n”)}}
              \def\pdflocal#1#2{\begingroup%
              \ifnum\currentgrouplevel=\gstatelevel
              \else
              \gstatelevel=\currentgrouplevel \pdfsave \aftergroup\pdfrestore
              \fi
              \latelua{pdf.print”#1\string\n”}#2\endgroup}

              \bf\pdflocal{0.5 g}{Dies ist \pdflocal{0.6 g}{\it Grau}} und dies Schwarz!

              %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

              \begingroup
              \endlinechar=10
              \directlua{%
              tex.print(“Wer A sagt,\string~ “)
              — es kommt noch Text
              tex.print(“muss auch B sagen”)}
              \endgroup

              \end{document}

              `

              Il luacode l’ho inserito io e almeno la frase la scrive giusta, ma la compilazione si blocca su \pdfcompresslevel, dicendo command not found!.

              Evidentemente, manca qualcosa che l’autore non dice.

              Grazie e ciao,

              davide

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

                davidebond” post=116278Oppure:

                `
                \documentclass{article}
                \usepackage{luacode}

                \begin{document}

                \pdfcompresslevel=0\newcount\gstatelevel
                \def\pdfsave{\latelua{pdf.print(“page”, “q\string\n”)}}
                \def\pdfrestore{\latelua{pdf.print(“page”, “Q\string\n”)}}
                \def\pdflocal#1#2{\begingroup%
                \ifnum\currentgrouplevel=\gstatelevel
                \else
                \gstatelevel=\currentgrouplevel \pdfsave \aftergroup\pdfrestore
                \fi
                \latelua{pdf.print”#1\string\n”}#2\endgroup}

                \bf\pdflocal{0.5 g}{Dies ist \pdflocal{0.6 g}{\it Grau}} und dies Schwarz!

                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

                \begingroup
                \endlinechar=10
                \directlua{%
                tex.print(“Wer A sagt,\string~ “)
                — es kommt noch Text
                tex.print(“muss auch B sagen”)}
                \endgroup

                \end{document}

                `

                Il luacode l’ho inserito io e almeno la frase la scrive giusta, ma la compilazione si blocca su \pdfcompresslevel, dicendo command not found!.

                Evidentemente, manca qualcosa che l’autore non dice.

                Grazie e ciao,

                davide

                Scusa Davide ma ritorno sul semplice, chiedendoti di compilare con il programma “lualatex” i sorgenti minimi del mio precedente messaggio.
                Se vanno a buon fine vuol dire che il tuo sistema è ok.
                L’errore che ricevi scommetto scompaia se nel preambolo carichi il pacchetto luatex85.

                Ti chiedo anche di essere più preciso nel riportare gli errori che ricevi, altrimenti risulta impossibile aiutarti.
                LuaLaTeX è molto potente, molto più di pdfLaTeX.

                Alla prossima.
                R.

              • #115872
                davidebond
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Grazie. Allora, i tuoi esempi funzionano e funziona anche il mio codice se carico il pacchetto luatex85. Il punto è che nel libro non è scritto. Non posso per ogni codice, postarlo qui per andare avanti con la lettura.

                  Grazie e ciao,

                  davide

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


                    Davide, quel libro è stato scritto prima delle modifiche ai nomi alle primitive di luatex apportate dalla versione 0.85.
                    Se il sorgente usa i vecchi nomi occorre caricare il pacchetto luatex85 che ormai non è più necessario visto che i pacchetti sono stati aggiornati ai nuovi nomi.

                    R.

                  • #115874
                    davidebond
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      Altri errori. Sono due. Ecco il primo:

                      `
                      \documentclass{article}%
                      \usepackage{luatex85}
                      \usepackage{luacode,booktabs}

                      \begin{document}

                      \begin{tabular}{*5l}\hline
                      \luacode
                      for i=1,5 do
                      ixi='$'..i..'^'..(i+1)..'='..i^(i+1)..'$';
                      tex.sprint(ixi)
                      if i<5 then tex.print('&') else tex.print('\\\\\\hline') end
                      end
                      \endluacode
                      \end{tabular}

                      \end{document}

                      `

                      Il secondo:

                      `
                      \documentclass{article}%
                      \usepackage{luatex85}
                      \usepackage{luacode,booktabs}

                      \begin{document}

                      \begin{table}[!htb]
                      \caption{Das kleine Einmaleins zum Wiederholen}\smallskip\centering
                      \begin{luacode}
                      tex.print(“\\begin{tabular}{@{} *9l @{}}\\toprule”)
                      local num=6
                      for i=1,num do
                      for j=1,num do+ixj='$'..i..'\\cdot'..j..'='..i*j..'$';
                      tex.print(ixj)
                      if(j

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

                        davidebond” post=116282Altri errori. Sono due. Ecco il primo:

                        `
                        \documentclass{article}%
                        \usepackage{luatex85}
                        \usepackage{luacode,booktabs}

                        \begin{document}

                        \begin{tabular}{*5l}\hline
                        \luacode
                        for i=1,5 do
                        ixi='$'..i..'^'..(i+1)..'='..i^(i+1)..'$';
                        tex.sprint(ixi)
                        if i<5 then tex.print('&') else tex.print('\\\\\\hline') end
                        end
                        \endluacode
                        \end{tabular}

                        \end{document}

                        `

                        Il secondo:

                        `
                        \documentclass{article}%
                        \usepackage{luatex85}
                        \usepackage{luacode,booktabs}

                        \begin{document}

                        \begin{table}[!htb]
                        \caption{Das kleine Einmaleins zum Wiederholen}\smallskip\centering
                        \begin{luacode}
                        tex.print(“\\begin{tabular}{@{} *9l @{}}\\toprule”)
                        local num=6
                        for i=1,num do
                        for j=1,num do+ixj='$'..i..'\\cdot'..j..'='..i*j..'$';
                        tex.print(ixj)
                        if(j

                        Ciao Davide.
                        Sostanzialmente i due sorgenti sono corretti.
                        Togli pure il caricamento di luatex85 che non serve.
                        Di base, sono un esempio di come si possa costruire delle tabelle con Lua, generando il codice per l’ambiente tabular.
                        Ricapitolando, il primo sorgente compila correttamente sulla mia TL 2019, mentre il secondo deve essere corretto perché nel codice Lua si trova un errore di sintassi (un più invece che un invio):
                        `\documentclass{article}%
                        \usepackage{luacode,booktabs}

                        \begin{document}

                        \begin{table}[!htb]
                        \caption{Das kleine Einmaleins zum Wiederholen}\smallskip\centering
                        \begin{luacode}
                        tex.print(“\\begin{tabular}{@{} *9l @{}}\\toprule”)
                        local num=6
                        for i=1,num do
                        for j=1,num do
                        ixj='$'..i..'\\cdot'..j..'='..i*j..'$';
                        tex.print(ixj)
                        if(j

                      • #115876
                        davidebond
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          Lo faccio sempre. Ma non possiamo stare a correggere un libro che di errori è ricco.

                          Grazie e ciao,

                          davide

                        • #115877
                          davidebond
                          Partecipante
                            Up
                            0
                            Down
                            ::


                            Lua si blocca dicendo: Runaway argument? tex.print… ETC. !file ended while scanning use of \luacode \par <*> lua3.tex ? Lua3.tex è il nome del mio file. Anche con l’esempio precedente si blocca sul fatto che il file finisce mentre \luacode sembra non fermarsi.

                            Ciao e grazie,

                            davide

                          • #115878
                            davidebond
                            Partecipante
                              Up
                              0
                              Down
                              ::


                              Vi avevo detto che il libro era un errore unico? Ecco il codice seguente che non funziona:

                              `
                              \documentclass{article}
                              \usepackage{luacode,booktabs,luatex85}

                              \begin{document}

                              \begin{luacode*}
                              function Wertetabelle()
                              for Grad=0,360,15 do
                              Rad=math.rad{Grad}
                              tex.print(string.format('%2d & %1.6f & %1.6f & %1.6f & %3.6g & %3.6f & %3.6f\\\\',
                              Grad,Rad,math.sin(Rad),math.cos(Rad),math.tan(Rad),math.sinh(Rad),math.cosh(Rad)))
                              end
                              end
                              \end{luacode*}

                              \begin{tabular}{@{} r *6c @{}}
                              \emph{Grad} & $x$ & $\sin(x)$ & $\cos(x)$ & $\tan(x)$ & $\sinh(x)$ & $\cosh(x)$ \\\hline
                              \directlua{Wertetabelle()} \hline
                              \end{tabular}

                              \end{document}

                              `
                              [attachment=2250]terminale.jpg[/attachment]

                              Vi ho allegato lo screenshot del terminale che mi dà errore.

                              Grazie. Ciao,

                              davide

                              Attachments:
                              You must be logged in to view attached files.
                            • #115879
                              robitex
                              Amministratore del forum
                                Up
                                0
                                Down
                                ::

                                davidebond” post=116286Lua si blocca dicendo: Runaway argument? tex.print… ETC. !file ended while scanning use of \luacode \par <*> lua3.tex ? Lua3.tex è il nome del mio file. Anche con l’esempio precedente si blocca sul fatto che il file finisce mentre \luacode sembra non fermarsi.

                                Ciao e grazie,

                                davide

                                Ciao Davide.
                                Ecco così va molto meglio. L’errore che riporti è dovuto all’implementazione dell’ambiente luacode che segue l’idea di raccogliere testo verbatim con certi codici di categoria per alcuni caratteri.
                                Infatti nel primo sorgente hai inserito un carattere Tab prima di \end{tabular}.
                                Se elimini quel tab tutto compila.

                                Questo carattere Tab non viene ignorato come al solito in quel punto e finisce dopo la macro \endluacode che è un token di “terminazione” finendo per non essere letta come tale.
                                Lo so, non mi sono spiegato bene. Diciamo che la macro \luacode cambia i codici di categoria di alcuni caratteri tra cui il Tab e conta sul fatto che ci sia la macro di terminazione \endluacode.

                                Mi sono imbattuto in questo problema mesi fa studiando il TeX by Topic, per implementare un ambiente verbatim.
                                Ciao
                                R.

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

                                  davidebond” post=116287Vi avevo detto che il libro era un errore unico? Ecco il codice seguente che non funziona:

                                  `
                                  \documentclass{article}
                                  \usepackage{luacode,booktabs,luatex85}

                                  \begin{document}

                                  \begin{luacode*}
                                  function Wertetabelle()
                                  for Grad=0,360,15 do
                                  Rad=math.rad{Grad}
                                  tex.print(string.format('%2d & %1.6f & %1.6f & %1.6f & %3.6g & %3.6f & %3.6f\\\\',
                                  Grad,Rad,math.sin(Rad),math.cos(Rad),math.tan(Rad),math.sinh(Rad),math.cosh(Rad)))
                                  end
                                  end
                                  \end{luacode*}

                                  \begin{tabular}{@{} r *6c @{}}
                                  \emph{Grad} & $x$ & $\sin(x)$ & $\cos(x)$ & $\tan(x)$ & $\sinh(x)$ & $\cosh(x)$ \\\hline
                                  \directlua{Wertetabelle()} \hline
                                  \end{tabular}

                                  \end{document}

                                  `
                                  [attachment=2250]terminale.jpg[/attachment]

                                  Vi ho allegato lo screenshot del terminale che mi dà errore.

                                  Grazie. Ciao,

                                  davide

                                  E qui si, ti do ragione. Si tratta di un errore nel codice, riga 9, Grad va tra parentesi tonde e non graffe.
                                  In Lua le graffe creano un oggetto tabella.
                                  `Rad=math.rad(Grad)`
                                  R.

                                • #115881
                                  claudio
                                  Partecipante
                                    Up
                                    0
                                    Down
                                    ::


                                    Domanda
                                    ma esiste un libro per lualatex o
                                    essendo l’argomento in continua evoluzione
                                    non esiste un testo valido?
                                    claudio

                                  • #115882
                                    davidebond
                                    Partecipante
                                      Up
                                      0
                                      Down
                                      ::


                                      Io ho trovato solo questo. Non esiste alcun libro su luatex e lualatex a parte questo. Detto ciò passiamo al prossimo codice che non funziona (il seguente proprio):

                                      `
                                      \documentclass{article}
                                      \usepackage{luacode}
                                      \usepackage{libertine}

                                      \begin{document}

                                      \begin{luacode*}
                                      function readbuf( buf )
                                      mybuf = mybuf .. buf .. ''\n''
                                      end
                                      function startrecording()
                                      mybuf = '' ''
                                      luatexbase.add_to_callback('process_input_buffer', readbuf, 'readbuf')
                                      end
                                      function stoprecording()
                                      luatexbase.remove_from_callback('process_input_buffer', 'readbuf')
                                      buf_without_end_log = mybuf:gsub(''\\end(recorder)n'','''')
                                      print(string.format(''Lua: %q, buf_without_end_log)) — Ausgabe Logfile
                                      luaBuffer=mybuf:gsub(''\\end{recorder}'','''') — Ausgabe Dokument
                                      end
                                      \end{luacoda*}
                                      \newcommand\printBuffer{\directlua{tex.print(string.format(luaBuffer))}}
                                      \newenvironment{recorder}
                                      {\directlua{startrecording()}}
                                      {\directlua{stoprecording()}}

                                      \begin{recorder}
                                      Hallo \TeX-Welt. Dies ist Datei \jobname.
                                      \end{recorder}

                                      Und jetzt die Ausgabe: \printBuffer\\
                                      Und nochmal: \printBuffer

                                      \begin{recorder}
                                      Hallo Lua\TeX-Welt.
                                      \end{recorder}

                                      Und jetzt die Ausgabe: \printBuffer

                                      \end{document}

                                      `

                                      Vorrei aggiungere che non spiegando il significato di quello che c’è scritto, copio alla cieca, magari facendo errori anch’io. Qua l’errore è

                                      `
                                      ! File ended while scanning use of luacode@grab@lines.

                                      \par
                                      <*> lua6.tex

                                      ?

                                      `

                                      Non so se valga la pena procedere con la lettura.

                                      Grazie e ciao,

                                      davide

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


                                        Ciao ti posto il codice corretto:
                                        un luacoda al posto di luacode e i doppi apici semplici (forse un errore di copia incolla?):
                                        `\documentclass{article}
                                        \usepackage{luacode}
                                        \usepackage{libertine}

                                        \begin{document}

                                        \begin{luacode*}
                                        function readbuf( buf )
                                        mybuf = mybuf .. buf .. '\n'
                                        end
                                        function startrecording()
                                        mybuf = ''
                                        luatexbase.add_to_callback('process_input_buffer', readbuf, 'readbuf')
                                        end
                                        function stoprecording()
                                        luatexbase.remove_from_callback('process_input_buffer', 'readbuf')
                                        buf_without_end_log = mybuf:gsub('\\end(recorder)n','')
                                        print(string.format('Lua: %q', buf_without_end_log)) — Ausgabe Logfile
                                        luaBuffer=mybuf:gsub('\\end{recorder}','') — Ausgabe Dokument
                                        end
                                        \end{luacode*}
                                        \newcommand\printBuffer{\directlua{tex.print(string.format(luaBuffer))}}
                                        \newenvironment{recorder}
                                        {\directlua{startrecording()}}
                                        {\directlua{stoprecording()}}

                                        \begin{recorder}
                                        Hallo \TeX-Welt. Dies ist Datei \jobname.
                                        \end{recorder}

                                        Und jetzt die Ausgabe: \printBuffer\\
                                        Und nochmal: \printBuffer

                                        \begin{recorder}
                                        Hallo Lua\TeX-Welt.
                                        \end{recorder}

                                        Und jetzt die Ausgabe: \printBuffer

                                        \end{document} `
                                        Bye.
                                        R.

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

                                          claudio” post=116290Domanda
                                          ma esiste un libro per lualatex o
                                          essendo l’argomento in continua evoluzione
                                          non esiste un testo valido?
                                          claudio

                                          Ciao Claudio.
                                          Tranne quello di Voss non ne conosco.
                                          Il fatto è che per LuaLaTeX non servono dei libri per l’utente finale.
                                          Infatti si tratta del solito LaTeX. Occorre solamente usare il pacchetto fontspec per gestire i font anche Open Type.
                                          Ma allora basta leggerne la documentazione (comando $ texdoc fontspec).

                                          Mano a mano che saranno disponibili pacchetti scritti in parte in Lua, allora si imparerà a usare quelli più utili. Io sto lavorando al pacchetto barracuda per comporre i barcode per esempio ( https://github.com/robitex/barracuda ) quasi tutto scritto in Lua. Molti dei miei articoli per ArsTeXnica parlano delle “funzioni Lua” in LuaTeX.

                                          Gli utilizzatori più avanzati che vorranno scrivere nuove funzioni basate su Lua, dovranno prima imparare Lua e per poi usare le librerie interne come node (si veda il reference di LuaTeX con $ texdoc luatex).

                                          Credo anche che LuaLaTeX o meglio LuaTeX avendo raggiunto la versione 1 non “evolva” più in modo “breaking change”.
                                          Semmai, abbiamo il problema di quale sarà il futuro di LuaTeX divenuto improvvisamente incerto purtroppo, anche se ci sono alternative compatibili.
                                          Alla prossima.
                                          R.

                                        • #115885
                                          MatteoF
                                          Partecipante
                                            Up
                                            0
                                            Down
                                            ::

                                            robitex” post=116295Credo anche che LuaLaTeX o meglio LuaTeX avendo raggiunto la versione 1 non “evolva” più in modo “breaking change”.
                                            Semmai, abbiamo il problema di quale sarà il futuro di LuaTeX divenuto improvvisamente incerto purtroppo, anche se ci sono alternative compatibili.
                                            Alla prossima.
                                            R.

                                            Cosa intendi per “futuro incerto”?
                                            Da quello che so [tt]LuaTeX[/tt] viene sviluppato e testato avendo come riferimento [tt]ConTeXt[/tt]. Pensi che il team di sviluppo abbia subito una “battuta d’arresto”? Lo stesso Luigi Scarso, alcuni mesi fa, era intervenuto sul forum in questi termini:

                                            luigi.scarso” post=114708Siamo ben consci delle “osservazioni” sulla stabilità, ma questo credo chiarisca:
                                            https://mailman.ntg.nl/pipermail/ntg-context/2018/093154.html
                                            Siamo fermamente intenzionati a seguire la roadmap sopra tracciata.

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

                                              MatteoF” post=116297

                                              Credo anche che LuaLaTeX o meglio LuaTeX avendo raggiunto la versione 1 non “evolva” più in modo “breaking change”.
                                              Semmai, abbiamo il problema di quale sarà il futuro di LuaTeX divenuto improvvisamente incerto purtroppo, anche se ci sono alternative compatibili.
                                              Alla prossima.
                                              R.

                                              Cosa intendi per “futuro incerto”?
                                              Da quello che so [tt]LuaTeX[/tt] viene sviluppato e testato avendo come riferimento [tt]ConTeXt[/tt]. Pensi che il team di sviluppo abbia subito una “battuta d’arresto”? Lo stesso Luigi Scarso, alcuni mesi fa, era intervenuto sul forum in questi termini:

                                              luigi.scarso” post=114708Siamo ben consci delle “osservazioni” sulla stabilità, ma questo credo chiarisca:
                                              https://mailman.ntg.nl/pipermail/ntg-context/2018/093154.html
                                              Siamo fermamente intenzionati a seguire la roadmap sopra tracciata.

                                              Le cose sono cambiate, temo.
                                              R.

                                            • #115887
                                              davidebond
                                              Partecipante
                                                Up
                                                0
                                                Down
                                                ::


                                                Scusami ma non vedo spazi prima di tabular. Se Provo a cancellare, tabular salta alla Riga precedente.

                                                Grazie. Ciao,

                                                davide

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

                                            Go to top