- Questo topic ha 34 risposte, 9 partecipanti ed è stato aggiornato l'ultima volta 15 anni, 6 mesi fa da
egreg9.
-
CreatoreTopic
-
24 Gennaio 2011 alle 14:36 #55078::
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
-
CreatoreTopic
-
AutoreRisposte
-
-
24 Gennaio 2011 alle 17:53 #55079
-
24 Gennaio 2011 alle 18:02 #55080
-
24 Gennaio 2011 alle 19:25 #55081::
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
TommasoLuaTeX è 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.
-
24 Gennaio 2011 alle 20:32 #55082::
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
TommasoLuaTeX è 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
-
24 Gennaio 2011 alle 21:38 #55083
-
25 Gennaio 2011 alle 7:55 #55084::
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
TommasoChe 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
-
25 Gennaio 2011 alle 22:20 #55085
-
8 Febbraio 2011 alle 15:13 #55086
-
18 Febbraio 2011 alle 22:54 #55087::
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
-
18 Febbraio 2011 alle 23:16 #55088::
`\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
-
19 Febbraio 2011 alle 7:30 #55089::
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 😉
-
19 Febbraio 2011 alle 7:58 #55090::
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
-
19 Febbraio 2011 alle 8:27 #55091::
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
FraEsatto. Se si vuole conoscere qualche utile primitiva:
`texdoc luatex`Ciao
ansys
-
19 Febbraio 2011 alle 15:05 #55092::
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
FraEsatto. Se si vuole conoscere qualche utile primitiva:
`texdoc luatex`Ciao
ansysUmh,
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
-
19 Febbraio 2011 alle 15:37 #55093::
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
-
20 Febbraio 2011 alle 11:00 #55094::
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
EnricoGrazie per la risposta, ne farò prezioso riferimento per il futuro, come sempre!!!
Grazie ancora.
R.
-
22 Febbraio 2011 alle 7:43 #55095::
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
-
22 Febbraio 2011 alle 21:00 #55096::
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.
-
23 Febbraio 2011 alle 8:21 #55097::
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^8local 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
-
23 Febbraio 2011 alle 9:19 #55098::
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
-
23 Febbraio 2011 alle 9:40 #55099
-
23 Febbraio 2011 alle 10:22 #55100::
[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.
-
23 Febbraio 2011 alle 22:15 #55101::
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.
-
24 Febbraio 2011 alle 7:36 #55102::
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.
-
24 Febbraio 2011 alle 11:09 #55103
-
24 Febbraio 2011 alle 11:56 #55104::
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.
-
24 Febbraio 2011 alle 12:00 #55105::
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.
-
25 Febbraio 2011 alle 10:39 #55106::
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}`
-
25 Febbraio 2011 alle 10:47 #55107::
“]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.
-
25 Febbraio 2011 alle 17:54 #55108::
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…
-
25 Febbraio 2011 alle 18:57 #55109::
“]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
-
25 Febbraio 2011 alle 19:27 #55110
-
2 Marzo 2011 alle 18:07 #55111::
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…
-
2 Marzo 2011 alle 18:29 #55112::
“]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
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.