summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/luacomplex/luacomplex.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/luacomplex/luacomplex.sty')
-rw-r--r--macros/luatex/latex/luacomplex/luacomplex.sty95
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)
}%
}