- Questo topic ha 20 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 7 anni, 3 mesi fa da
davidebond.
-
CreatoreTopic
-
31 Maggio 2019 alle 15:00 #115867::
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
-
CreatoreTopic
-
AutoreRisposte
-
-
1 Giugno 2019 alle 5:34 #115868::
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.
-
1 Giugno 2019 alle 7:40 #115869::
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
-
1 Giugno 2019 alle 8:06 #115870::
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
-
1 Giugno 2019 alle 8:16 #115871::
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.
-
1 Giugno 2019 alle 8:28 #115872
-
1 Giugno 2019 alle 8:33 #115873
-
1 Giugno 2019 alle 13:16 #115874::
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 -
1 Giugno 2019 alle 17:43 #115875::
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(jCiao 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 -
1 Giugno 2019 alle 17:55 #115876
-
2 Giugno 2019 alle 8:29 #115877
-
2 Giugno 2019 alle 11:37 #115878::
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. -
2 Giugno 2019 alle 11:56 #115879::
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.
-
2 Giugno 2019 alle 12:03 #115880::
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.
-
2 Giugno 2019 alle 13:09 #115881
-
2 Giugno 2019 alle 13:19 #115882::
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
-
2 Giugno 2019 alle 16:09 #115883::
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.
-
2 Giugno 2019 alle 16:23 #115884::
claudio” post=116290Domanda
ma esiste un libro per lualatex o
essendo l’argomento in continua evoluzione
non esiste un testo valido?
claudioCiao 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.
-
3 Giugno 2019 alle 8:46 #115885::
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. -
3 Giugno 2019 alle 13:47 #115886::
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.
-
4 Giugno 2019 alle 12:01 #115887
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.