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.