diff options
Diffstat (limited to 'macros/luatex/latex/luacomplex/luacomplex.sty')
-rw-r--r-- | macros/luatex/latex/luacomplex/luacomplex.sty | 95 |
1 files changed, 50 insertions, 45 deletions
diff --git a/macros/luatex/latex/luacomplex/luacomplex.sty b/macros/luatex/latex/luacomplex/luacomplex.sty index 5ff32a6176..c863f5cd0f 100644 --- a/macros/luatex/latex/luacomplex/luacomplex.sty +++ b/macros/luatex/latex/luacomplex/luacomplex.sty @@ -1,62 +1,66 @@ -% luacomplex package -% version 1.2 Date: 14-Feb-2023 +% The luacomplex package +% Version 1.3 Date: 08-Aug-2023 % Licensed under LaTeX Project Public License v1.3c or later. The complete license text is available at http://www.latex-project.org/lppl.txt. % Authors: Chetan Shirore and Ajit Kumar -\ProvidesPackage{luacomplex}[1.2] +\ProvidesPackage{luacomplex}[1.3] \RequirePackage{xkeyval} \RequirePackage{amsmath} \RequirePackage{luacode} \RequirePackage{luamaths} \begin{luacode*} -complex = {} -- global complex numbers registry -M = {} -- the module +complexZ = {} -- global complex numbers registry +CM = {} -- the module local mt = {} --metatable for complex numbers -setmetatable(_ENV, {__index = complex}) - function new (r, i) +setmetatable(_ENV, {__index = complexZ}) + function CM.new (r, i) local cp = {} cp = {r=r, i=i} return setmetatable(cp,mt) end - M.new = new -- add 'new' to the module + -- create constant 'i' - M.i = new(0, 1) + CM.i = CM.new(0, 1) - function M.add (c1, c2) - return new(c1.r + c2.r, c1.i + c2.i) + function CM.add (c1, c2) + return CM.new(c1.r + c2.r, c1.i + c2.i) end - function M.sub (c1, c2) - return new(c1.r - c2.r, c1.i - c2.i) + function CM.sub (c1, c2) + return CM.new(c1.r - c2.r, c1.i - c2.i) + end + + function CM.minus (c1) + return CM.new(-c1.r, -c1.i) end - function M.mul (c1, c2) - return new(c1.r*c2.r - c1.i*c2.i, c1.r*c2.i + c1.i*c2.r) + function CM.mul (c1, c2) + return CM.new(c1.r*c2.r - c1.i*c2.i, c1.r*c2.i + c1.i*c2.r) end - function M.inv (c) + function CM.inv (c) local n = c.r^2 + c.i^2 - return new(c.r/n, -c.i/n) + return CM.new(c.r/n, -c.i/n) end - function M.div (c1, c2) - return M.mul(c1, M.inv(c2)) + function CM.div (c1, c2) + return CM.mul(c1, CM.inv(c2)) end - function M.re (c) - return new(c.r,0) + function CM.re (c) + return CM.new(c.r,0) end - function M.im (c) - return new(c.i,0) + function CM.im (c) + return CM.new(c.i,0) end - function M.mod (c) + function CM.mod (c) local n = c.r^2 + c.i^2 - return new(n,0) + return CM.new(n,0) end - function M.prinarg(c) + function CM.prinarg(c) local arg if c.r > 0 then arg = math.atan(c.i/c.r) @@ -71,14 +75,14 @@ setmetatable(_ENV, {__index = complex}) else error("Principal argument not defined.") end - return arg + return CM.new(arg,0) end - function M.op (...) + function CM.op (...) return ... end - function M.tostring (c,imgunit) + function CM.tostring (c,imgunit) imgunit = "\\imgUnit" if c.i ==0 then return string.format("%g", c.r) @@ -92,69 +96,70 @@ setmetatable(_ENV, {__index = complex}) end --Setting Metatable operations. - mt.__add = M.add - mt.__mul = M.mul - mt.__sub = M.sub - mt.__tostring = M.tostring + mt.__add = CM.add + mt.__mul = CM.mul + mt.__sub = CM.sub + mt.__unm = CM.minus + mt.__tostring = CM.tostring \end{luacode*} \newcommand\cpxNew[2]{% \directlua{% - complex[\luastringN{#1}] = M.new(#2) + complexZ[\luastringN{#1}] = CM.new(#2) }% } \newcommand\cpxPrint[1]{% - \directlua{tex.sprint(tostring(complex[\luastringN{#1}]))}% + \directlua{tex.sprint(CM.tostring(complexZ[\luastringN{#1}]))}% } \newcommand\cpxAdd[3]{% \directlua{% - complex[\luastringN{#1}] = M.add(complex[\luastringN{#2}],complex[\luastringN{#3}]) + complexZ[\luastringN{#1}] = CM.add(complexZ[\luastringN{#2}],complexZ[\luastringN{#3}]) }% } \newcommand\cpxSub[3]{% \directlua{% - complex[\luastringN{#1}] = M.sub(complex[\luastringN{#2}],complex[\luastringN{#3}]) + complexZ[\luastringN{#1}] = CM.sub(complexZ[\luastringN{#2}],complexZ[\luastringN{#3}]) }% } \newcommand\cpxMul[3]{% \directlua{% - complex[\luastringN{#1}] = M.mul(complex[\luastringN{#2}],complex[\luastringN{#3}]) + complexZ[\luastringN{#1}] = CM.mul(complexZ[\luastringN{#2}],complexZ[\luastringN{#3}]) }% } \newcommand\cpxDiv[3]{% \directlua{% - complex[\luastringN{#1}] = M.div(complex[\luastringN{#2}],complex[\luastringN{#3}]) + complexZ[\luastringN{#1}] = CM.div(complexZ[\luastringN{#2}],complexZ[\luastringN{#3}]) }% } \newcommand\cpxInv[2]{% \directlua{% - complex[\luastringN{#1}] = M.inv(complex[\luastringN{#2}]) + complexZ[\luastringN{#1}] = CM.inv(complexZ[\luastringN{#2}]) }% } \newcommand\cpxRe[2]{% \directlua{% - complex[\luastringN{#1}] = M.re(complex[\luastringN{#2}]) + complexZ[\luastringN{#1}] = CM.re(complexZ[\luastringN{#2}]) }% } \newcommand\cpxIm[2]{% \directlua{% - complex[\luastringN{#1}] = M.im(complex[\luastringN{#2}]) + complexZ[\luastringN{#1}] = CM.im(complexZ[\luastringN{#2}]) }% } \newcommand\cpxMod[2]{% \directlua{% - complex[\luastringN{#1}] = M.mod(complex[\luastringN{#2}]) + complexZ[\luastringN{#1}] = CM.mod(complexZ[\luastringN{#2}]) }% } \newcommand\cpxPrinArg[2]{% \directlua{% - complex[\luastringN{#1}] = M.prinarg(complex[\luastringN{#2}]) + complexZ[\luastringN{#1}] = CM.prinarg(complexZ[\luastringN{#2}]) }% } \newcommand\cpxOp[2]{% \directlua{% - complex[\luastringN{#1}] = M.op(#2) + complexZ[\luastringN{#1}] = CM.op(#2) }% } |