I am learning lualatex because of its abilities to use lua and make it easier for more sophisticated documents.
I am using this document for running some introductory examples. https://www.unirioja.es/cu/jvarona/downloads/numerical-methods-luatex.pdf
I have two questions.
Is it possible to call external Lua libraries downloaded from the web from Lua code being used in Luatex?
Can we write long chunks of lua code in a different file than inside the TeX file itself? Consider the Lorentez attractor examples at the end, which compiles and works well on my machine. But the lua code to produce the attractor is rather long. Is there anyway for me to write this lua code in an external file instead? The following gives me a latex compilation error where I attempted to use
\input{scrap.lua}
\documentclass{article} \usepackage{luacode} \usepackage{pgfplots} \usepackage{tikz} \begin{luacode*} \input{scrap.lua} \end{luacode*} \newcommand\addLUADEDplot[3][]{% \directlua{print_LorAttrWithEulerMethod(#2,#3,[[#1]])}% } \begin{document} \begin{tikzpicture} \begin{axis} % SYNTAX: Solution of the Lorenz system % with step h=0.02 sampled at 1000 points. \addLUADEDplot[color=red,smooth]{0.02}{1000}; \addLUADEDplot[color=green,smooth]{0.02}{1000}; \addLUADEDplot[color=blue,smooth]{0.02}{1000}; \addLUADEDplot[color=cyan,smooth]{0.02}{1000}; \addLUADEDplot[color=magenta,smooth]{0.02}{1000}; \addLUADEDplot[color=yellow,smooth]{0.02}{1000}; \end{axis} \end{tikzpicture} \end{document}
The external file scrap.lua looks like
-- Differential equation of the Lorenz attractor
function f(x,y,z)
local sigma = 3
local rho = 26.5
local beta = 1
return {sigma*(y-x), -x*z + rho*x - y, x*y - beta*z}
end
-- Code to write PGFplots data as coordinates
function print_LorAttrWithEulerMethod(h,npoints,option)
-- The initial point (x0,y0,z0)
local x0 = 0.0
local y0 = 1.0
local z0 = 0.0
-- we add a random number between -0.25 and 0.25
local x = x0 + (math.random()-0.5)/2
local y = y0 + (math.random()-0.5)/2
local z = z0 + (math.random()-0.5)/2
if option~=[[]] then
tex.sprint("\\addplot3["..option.."] coordinates{")
else
tex.sprint("\\addplot3 coordinates{")
end
-- we dismiss the first 100 points to go into the attractor
for i=1, 100 do
m = f(x,y,z)
x = x + h * m[1]
y = y + h * m[2]
z = z + h * m[3]
end
for i=1, npoints do
m = f(x,y,z)
x = x + h * m[1]
y = y + h * m[2]
z = z + h * m[3]
tex.sprint("("..x..","..y..","..z..")")
end
tex.sprint("}")
end
The error I get is
ex))) ! LuaTeX error [\directlua]:1: unexpected symbol near '\'. \luacode@dbg@exec ...code@maybe@printdbg {#1} #1 } l.8 \end{luacode*}
?
\begin{luacode*}
and\end{luacode*}
you have to write Lua code and\input{scrap.lua}
is not valid Lua. Hence you get this cryptic error.require
command. I just have a bunch of personal functions and load them in my preamble with\directlua{require('./pathFromCurrentFolder/LuaCommands.lua')}
.