Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LATEX/edrxpict.lua -- http://angg.twu.net/LATEX/edrxpict.lua.html -- (find-angg "LATEX/edrxpict.lua") -- -- This file contains EXTENSIONS to dednat6. Note that it "require"s -- edrxtikz.lua, that runs loaddednat6()! -- See: (find-LATEX "edrxtikz.lua") -- «.Points» (to "Points") -- «.Points-test» (to "Points-test") -- «.pictp0-pictp3» (to "pictp0-pictp3") -- «.pictbounds» (to "pictbounds") -- «.beginpicture» (to "beginpicture") -- «.pictaxes» (to "pictaxes") -- «.pictgrid» (to "pictgrid") -- «.pictpgrid» (to "pictpgrid") -- «.pictdots» (to "pictdots") -- «.Piecewise» (to "Piecewise") -- «.Piecewise-tests» (to "Piecewise-tests") -- «.pictFxy» (to "pictFxy") -- «.pict2evector» (to "pict2evector") -- «.TCG» (to "TCG") -- «.TCG-tests» (to "TCG-tests") -- «.calcpoints» (to "calcpoints") -- «.Pictdotsdef» (to "Pictdotsdef") -- «.Wrap» (to "Wrap") -- «.Wrap-tests» (to "Wrap-tests") -- «.defpictdots» (to "defpictdots") -- «.defpictdots-tests» (to "defpictdots-tests") -- loaddednat6() -- (find-angg "LUA/lua50init.lua" "loaddednat6") require "edrxtikz" -- (find-LATEX "edrxtikz.lua") -- ____ _ _ -- | _ \ ___ (_)_ __ | |_ ___ -- | |_) / _ \| | '_ \| __/ __| -- | __/ (_) | | | | | |_\__ \ -- |_| \___/|_|_| |_|\__|___/ -- -- «Points» (to ".Points") -- A class for sequences of points. -- Points = Class { type = "Points", fromfx = function (a, b, n, f) local ps = Points {} for i=0,n do local x = a + (b-a)*(i/n) table.insert(ps, v(x,f(x))) end return ps end, fromFt = function (a, b, n, F) local ps = Points {} for i=0,n do local t = a + (b-a)*(i/n) table.insert(ps, v(F(t))) end return ps end, __tostring = function (li) return li:tostring(" ") end, __index = { tostring = function (ps, sep) return mapconcat(tostring, ps, sep or "") end, add = function (ps, ...) for _,p in ipairs({...}) do table.insert(ps, p) end return ps end, copy = function (ps) return Points(shallowcopy(ps)) end, polyunder = function (ps) local x0, x1 = ps[1][1], ps[#ps][1] return ps:copy():add(v(x1,0), v(x0,0)) end, pict = function (ps, pre) return (pre or "")..ps:tostring() end, -- line = function (ps) return ps:pict"\\polyline" end, poly = function (ps) return ps:pict"\\polygon" end, fill = function (ps) return ps:pict"\\polygon*" end, }, } -- «Points-test» (to ".Points-test") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" ps = Points.fromfx(2, 3, 5, function (x) return 10*x end) = ps = ps:polyunder() = ps:polyunder():pict"\\polyline" = ps:polyunder():pict"\\polygon" = ps:polyunder():pict"\\polygon*" = Points{v(1,2), v(3,4)}:polyunder():pict"\\polygon*" = ps:line() = ps:poly() = ps:fill() -- (find-pict2epage 9 "2.4 Extensions") --]] -- _ _ _ _ -- _ __ (_) ___| |_ __| | ___ | |_ ___ -- | '_ \| |/ __| __/ _` |/ _ \| __/ __| -- | |_) | | (__| || (_| | (_) | |_\__ \ -- | .__/|_|\___|\__\__,_|\___/ \__|___/ -- |_| -- -- «pictdots» (to ".pictdots") -- Used by: (find-LATEX "edrxgac2.tex" "beginpicture") -- (find-LATEX "edrxgac2.tex" "beginpicture" "\\pictdots") -- (find-LATEX "edrxgac2.tex" "beginpicture" "\\picturedots") -- See: (find-LATEX "2018-1-GA-material.tex" "comprehension-gab") -- (gam181p 9 "comprehension-gab") -- (gam181 "comprehension-gab") pictdots = function (str) local bprint, out = makebprint() for x,y in str:gmatch("([-.%d]+),([-.%d]+)") do local p = v(x+0, y+0) bprint("\\put%s{\\circle*{0.5}}", p) end return out() end --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" = pictdots "3,1 3,2 3,3" --]] -- _ _ _ _ -- _ __ (_) ___| |_| |__ ___ _ _ _ __ __| |___ -- | '_ \| |/ __| __| '_ \ / _ \| | | | '_ \ / _` / __| -- | |_) | | (__| |_| |_) | (_) | |_| | | | | (_| \__ \ -- | .__/|_|\___|\__|_.__/ \___/ \__,_|_| |_|\__,_|___/ -- |_| -- -- An ugly hack. We store -- «pictp0-pictp3» (to ".pictp0-pictp3") -- global variables, sample values pictp1 = v(-1,-2) -- lower left, integer coordinates pictp2 = v( 3, 5) -- upper right, integer coordinates pictp0 = pictp1 - v(.2,.2) -- lower left pictp3 = pictp2 + v(.2,.2) -- upper right -- «pictbounds» (to ".pictbounds") pictbounds = function (p1, p2, e) e = e or .2 pictp1 = p1 pictp2 = p2 pictp0 = pictp1 - v(e,e) pictp3 = pictp2 + v(e,e) end --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" = pictbounds(v(-1,-2), v(3,5), 0.5) = pictp1, pictp2 = pictp0, pictp3 --]] -- _ _ _ _ -- | |__ ___ __ _(_)_ __ _ __ (_) ___| |_ _ _ _ __ ___ -- | '_ \ / _ \/ _` | | '_ \| '_ \| |/ __| __| | | | '__/ _ \ -- | |_) | __/ (_| | | | | | |_) | | (__| |_| |_| | | | __/ -- |_.__/ \___|\__, |_|_| |_| .__/|_|\___|\__|\__,_|_| \___| -- |___/ |_| -- -- «beginpicture» (to ".beginpicture") -- (find-LATEX "edrxgac2.tex" "beginpicture") -- (find-es "tex" "begin-picture" "(XSIZE,YSIZE)(XORG,YORG)") -- (find-es "tex" "beginpicture") beginpicture0 = function () local size = pictp3 - pictp0 local origin = pictp0 return formatt("\\begin{picture}%s%s", size, origin) end beginpicture = function (p1, p2, e) pictbounds(p1, p2, e) return beginpicture0() end --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" = beginpicture(v(-1,-2), v(3,5)) = beginpicture(v(-1,-2), v(3,5), 0.5) --]] -- _ _ -- _ __ (_) ___| |_ __ ___ _____ ___ -- | '_ \| |/ __| __/ _` \ \/ / _ \/ __| -- | |_) | | (__| || (_| |> < __/\__ \ -- | .__/|_|\___|\__\__,_/_/\_\___||___/ -- |_| -- -- «pictaxes» (to ".pictaxes") -- (find-LATEX "edrxgac2.tex" "beginpicture" "pictaxes") pictaxes = function (p1, p2) p1, p2 = p1 or pictp1, p2 or pictp2 local xmin, xmax = min(p1[1], p2[1]), max(p1[1], p2[1]) local ymin, ymax = min(p1[2], p2[2]), max(p1[2], p2[2]) local bprint, out = makebprint() bprint("%% Horizontal axis:") bprint("\\Line%s%s", v(xmin-.2,0), v(xmax+.2,0)) bprint("%% Horizontal axis, ticks:") for x=xmin,xmax do bprint("\\Line%s%s", v(x,-.2), v(x,.2)) end bprint("%%") bprint("%% Vertical axis:") bprint("\\Line%s%s", v(0,ymin-.2), v(0,ymax+.2)) bprint("%% Vertical axis, ticks:") for y=ymin,ymax do bprint("\\Line%s%s", v(-.2,y), v(.2,y)) end bprint("%%") return out() end --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" = beginpicture(v(-1,-2), v(3,5)) = pictaxes() = pictaxes(v(-2,-1), v(3,4)) -- \expr{pictsizepos(v(-1.2,-2.2), v(3.2,5.2))} -- \expr{pictaxes (v(-1, -2), v(3, 5))} --]] -- _ _ _ _ -- _ __ (_) ___| |_ __ _ _ __(_) __| | -- | '_ \| |/ __| __/ _` | '__| |/ _` | -- | |_) | | (__| || (_| | | | | (_| | -- | .__/|_|\___|\__\__, |_| |_|\__,_| -- |_| |___/ -- -- «pictgrid» (to ".pictgrid") -- (find-LATEX "edrxgac2.tex" "beginpicture" "pictgrid") -- (find-LATEX "2018-1-GA-material.tex" "varias-coords") pictgrid = function (p1, p2) p1, p2 = p1 or pictp1, p2 or pictp2 local xmin, xmax = min(p1[1], p2[1]), max(p1[1], p2[1]) local ymin, ymax = min(p1[2], p2[2]), max(p1[2], p2[2]) local bprint, out = makebprint() bprint("%% Grid") bprint("%% Horizontal lines:") for y=ymin,ymax do bprint("\\Line%s%s", v(xmin-.1,y), v(xmax+.1,y)) end bprint("%% Vertical lines:") for x=xmin,xmax do bprint("\\Line%s%s", v(x,ymax+.1), v(x,ymin-.1)) end bprint("%%") return out() end --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" = beginpicture(v(-1,-2), v(3,5)) = pictgrid() = pictgrid(v(-2,-1), v(3,4)) -- \expr{pictsizepos(v(-1.2,-2.2), v(3.2,5.2))} -- \expr{pictaxes (v(-1, -2), v(3, 5))} --]] -- _ _ _ _ -- _ __ (_) ___| |_ _ __ __ _ _ __(_) __| | -- | '_ \| |/ __| __| '_ \ / _` | '__| |/ _` | -- | |_) | | (__| |_| |_) | (_| | | | | (_| | -- | .__/|_|\___|\__| .__/ \__, |_| |_|\__,_| -- |_| |_| |___/ -- -- «pictpgrid» (to ".pictpgrid") -- This is similar do pictgrid, but it uses the function p and draws -- slanted grids. -- -- (find-LATEX "2018-1-GA-material.tex" "pictOuv") -- (find-LATEX "2018-1-GA-material.tex" "pictOuv" "pictpgrid(0,0,4,4)") -- (find-LATEX "2018-1-GA-material.tex" "pictOuv" "p = function") -- (find-LATEX "2018-1-GA-material.tex" "sistemas-de-coordenadas") -- (find-LATEX "2018-1-GA-material.tex" "sistemas-de-coordenadas" "O,uu,vv =") -- pictpgrid = function (xmin, ymin, xmax, ymax, e) e = e or 0 local bprint, out = makebprint() for y=ymin,ymax do bprint("\\Line%s%s", p(xmin-e, y), p(xmax+e, y)) end for x=xmin,xmax do bprint("\\Line%s%s", p(x, ymin-e), p(x, ymax+e)) end return out() end --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" p = function (a, b) return O + a*uu + b*vv end O, uu, vv = v(1, 1), v(0.1, 0), v(0, 0.1) = pictpgrid(1, 2, 3, 5) --]] -- ____ _ _ -- | _ \(_) ___ ___ _____ _(_)___ ___ -- | |_) | |/ _ \/ __/ _ \ \ /\ / / / __|/ _ \ -- | __/| | __/ (_| __/\ V V /| \__ \ __/ -- |_| |_|\___|\___\___| \_/\_/ |_|___/\___| -- -- «Piecewise» (to ".Piecewise") -- Piecewise = Class { new = function (str) return Piecewise{points={}, pictlines={}, pictdots={}}:add(str) end, type = "Piecewise", __tostring = function (pw) return pw:pointstrs() end, __index = { npoints = function (pw) return #pw.points end, tostring = function (pw) return pw:pointstrs() end, pointstrs = function (pws, sep) local strs = {} for i=1,#pw.points do local p = pw.points[i] local conn,x,y,oc = p.conn or " ", p.x, p.y, p.oc or "" table.insert(strs, format("%s(%s,%s)%s", conn, x, y, oc)) end return table.concat(strs, sep or " ") end, -- -- Add points and segments. -- Example: pw:add("(0,1)o--(1,1)o (1,2)c (1,3)o--(2,3)c--(3,2)--(4,2)c") add = function (pw, str) local pat = "([- ]*)%(([-%d.]+),([-%d.]+)%)([oc]?)" for conn,x,y,oc in str:gmatch(pat) do conn, x, y = (conn:match"-" and "--"), x+0, y+0 table.insert(pw.points, {conn=conn, x=x, y=y, oc=oc}) -- pw:pushpoint(conn, x, y, oc) end return pw end, -- -- Express a piecewise function as a Lua function. condstbl = function (pw) local conds = {} for i=1,#pw.points do local P0,P1,P2 = pw.points[i], pw.points[i+1], pw.points[i+2] local p0,p1,p2 = P0, P1 or {}, P2 or {} local x0,y0,oc0 = p0.x, p0.y, p0.oc local x1,y1,oc1,conn1 = p1.x, p1.y, p1.oc, p1.conn local x2,y2,oc2,conn2 = p2.x, p2.y, p2.oc, p2.conn -- PP(oc0, conn1) if oc0 ~= "o" then local cond = format("(%s == x) and %s", x0, y0) table.insert(conds, cond) end if conn1 then local cond = format("(%s < x and x < %s)", x0, x1) if y1 == y0 then cond = format("%s and %s", cond, y0) else cond = format("%s and (%s + (x - %s)/(%s - %s) * (%s - %s))", cond, y0, x0, x1, x0, y1, y0 ) end table.insert(conds, cond) end end return conds end, conds = function (pw) return table.concat(pw:condstbl(), " or\n") end, fun0 = function (pw) return "function (x) return (\n"..pw:conds().."\n) end" end, fun = function (pw) return expr(pw:fun0()) end, -- -- Get lines and open/closed points, for drawing. getj = function (pw, i) return (pw.points[i+1] and pw.points[i+1].conn and pw:getj(i+1)) or i end, getijs = function (pw) local i, j, ijs = 1, pw:getj(1), {} while true do if i < j then table.insert(ijs, {i, j}) end i = j + 1 j = pw:getj(i) if pw:npoints() < i then return ijs end end end, getpoint = function (pw, i) return v(pw.points[i].x, pw.points[i].y) end, getpoints = function (pw, i, j) local ps = Points {} for k=i,j do ps:add(pw:getpoint(k)) end return ps end, topict = function (pw) cmds = {} for _,ij in ipairs(pw:getijs()) do table.insert(cmds, pw:getpoints(ij[1], ij[2]):line()) end for i,p in ipairs(pw.points) do if p.oc == "o" then table.insert(cmds, formatt("\\put%s{\\opendot}", pw:getpoint(i))) elseif p.oc == "c" then table.insert(cmds, formatt("\\put%s{\\closeddot}", pw:getpoint(i))) end end return table.concat(cmds, "\n") end, }, } pictpiecewise = function (str) return Piecewise.new(str):topict() end --[[ -- «Piecewise-tests» (to ".Piecewise-tests") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" str = "(0,1)o--(1,1)o (1,2)c (1,3)o--(2,3)c--(3,2)--(4,2)c" pw = Piecewise.new(str) PPV(pw.points) = pw = pw:pointstrs(" ") = pw:conds() = pw:fun0() = pw:fun() = pw:fun()(1) = pw:fun()(2) = pw:fun()(2.5) * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" str = "(0,1)o--(1,1)o (1,2)c (1,3)o--(2,3)c--(3,2)--(4,2)c" pw = Piecewise.new(str) PPV(pw:getijs()) = pw:topict() = pictpiecewise(str) --]] -- «pictFxy» (to ".pictFxy") -- (find-angg "LUA/lua50init.lua" "eval-and-L") -- (find-angg "LUA/lua50init.lua" "lambda") pictFxy = function (Fstr) local p1, p2 = pictp1, pictp2 local xmin, xmax = min(p1[1], p2[1]), max(p1[1], p2[1]) local ymin, ymax = min(p1[2], p2[2]), max(p1[2], p2[2]) local bprint, out = makebprint() local F = lambda ("x,y => "..Fstr) for y=ymax,ymin,-1 do for x=xmin,xmax do print(x, y) bprint("\\put%s{\\tcell{%s}}", v(x,y), F(x,y)) end end -- bprint("%%") return out() end --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" = beginpicture(v(-1,-2), v(3,4)) = beginpicture(v(-1,-2), v(3,4), .7) = pictFxy("x") = pictaxes(v(-2,-1), v(3,4)) -- \expr{pictsizepos(v(-1.2,-2.2), v(3.2,5.2))} -- \expr{pictaxes (v(-1, -2), v(3, 5))} --]] -- «pict2evector» (to ".pict2evector") -- Moved to: (find-dn6 "picture.lua" "pict2e") -- Used by: (find-LATEX "edrxgac2.tex" "pict-Vector") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" testvector = function (OO, vv, a,b,step) local bprint, out = makebprint() for angle=a,b,step do bprint("\\Vector%s%s", OO, OO+vv:rot(angle)) end return out() end = testvector(v(2,1), v(2,0), 0,180,11) = testvector(v(2,1), v(2,0), 0,360,22) sysco = function (OO, xx, yy, OOtext, xxtext, yytext, vtextdist, Otextdist) local bprint, out = makebprint() local xxpos = OO + xx/2 + xx:rotright():unit(vtextdist) local yypos = OO + yy/2 + yy:rotright():unit(vtextdist) local OOpos = OO + (-xx-yy):unit(Otextdist or vtextdist) local f = function (str) return (str:gsub("!", "\\")) end bprint("\\Vector%s%s", OO, OO+xx) bprint("\\Vector%s%s", OO, OO+yy) bprint("\\put%s{\\cell{%s}}", OOpos, f(OOtext)) bprint("\\put%s{\\cell{%s}}", xxpos, f(xxtext)) bprint("\\put%s{\\cell{%s}}", yypos, f(yytext)) return out() end = sysco(v(0,0), v(1,0), v(0,1), "O", "x", "y", 0.5) = sysco(v(0,0), v(1,0), v(0,1), "O_{xy}", "!xx", "!yy", 0.5) = sysco(v(10,10), v(10,0), v(0,10), "O_{xy}", "!xx", "!yy", 0.5) = sysco(v(10,10), v(10,0), v(0,10), "O_{xy}", "!xx", "!yy", 0.5, 0.5^0.5) OO = v(2,1) vv = v(3,0) for a=0,360,20 do printt("\\Vector%s%s", OO, OO+vv:rot(a)) end vv = v(3,4) = vv:unit() = vv:unit(10) = vv = vv:rot(90) = vv:rot(-90) -- (find-LATEXfile "edrxtikz.lua" "V.__index.norm") --]] -- _____ ____ ____ -- |_ _/ ___/ ___|___ -- | || | | | _/ __| -- | || |__| |_| \__ \ -- |_| \____\____|___/ -- -- «TCG» (to ".TCG") -- Two-column graphs, old version. -- The new version is here: -- (find-dn6 "tcgs.lua" "TCGQ") -- -- (find-dn6 "picture.lua" "copyopts") -- (find-dn6 "picture.lua" "LPicture") -- (find-LATEX "edrxtikz.lua" "Line") -- TCG = Class { type = "TCG", new = function (opts, def, l, r, lrarrows, rlarrows) local dims = opts -- was opts.dims local lp = LPicture.new(opts) lp.def = def local tcg = {lp=lp, dh=dims.dh, dv=dims.dv, eh=dims.eh, ev=dims.ev, l=l+0, r=r+0, lrarrows=lrarrows, rlarrows=rlarrows} return TCG(tcg) end, __tostring = function (tcg) return tcg:tostring() end, __index = { tostring = function (tcg) return format("(%s, %s, %q, %q)", tcg.l, tcg.r, tcg.lrarrows, tcg.rlarrows) end, tolatex = function (tcg) return tcg.lp:tolatex() end, L = function (tcg, y) return v(0, tcg.dv*y) end, R = function (tcg, y) return v(tcg.dh, tcg.dv*y) end, arrow = function (tcg, A, B, e) tcg.lp:addtex(Line.newAB(A, B, e, 1-e):pictv()) return tcg end, lrs = function (tcg) for y=1,tcg.l do tcg.lp:put(tcg:L(y), y.."\\_") end for y=1,tcg.r do tcg.lp:put(tcg:R(y), "\\_"..y) end return tcg end, bus = function (tcg) for y=1,tcg.l do tcg.lp:put(tcg:L(y), "\\bullet") end for y=1,tcg.r do tcg.lp:put(tcg:R(y), "\\bullet") end return tcg end, strs = function (tcg, strsl, strsr) if type(strsl) == "string" then strsl = split(strsl) end if type(strsr) == "string" then strsr = split(strsr) end for y,str in ipairs(strsl) do tcg.lp:put(tcg:L(y), str) end for y,str in ipairs(strsr) do tcg.lp:put(tcg:R(y), str) end return tcg end, cs = function (tcg, charsl, charsr) return tcg:strs(split(charsl, "."), split(charsr, ".")) end, cq = function (tcg, charsl, charsr) local lc = function (y) return charsl:sub(y, y) end local rc = function (y) return charsr:sub(y, y) end local lstr = function (y) return lc(y)=="L" and y.."\\_" or lc(y) end local rstr = function (y) return rc(y)=="R" and "\\_"..y or rc(y) end for y=1,#charsl do tcg.lp:put(tcg:L(y), lstr(y)) end for y=1,#charsr do tcg.lp:put(tcg:R(y), rstr(y)) end return tcg end, vs = function (tcg) for y=1,tcg.l-1 do tcg:arrow(tcg:L(y+1), tcg:L(y), tcg.ev) end for y=1,tcg.r-1 do tcg:arrow(tcg:R(y+1), tcg:R(y), tcg.ev) end return tcg end, hs = function (tcg) for l,r in tcg.lrarrows:gmatch("(%d)(%d)") do tcg:arrow(tcg:L(l), tcg:R(r), tcg.eh) end for l,r in tcg.rlarrows:gmatch("(%d)(%d)") do tcg:arrow(tcg:R(r), tcg:L(l), tcg.eh) end return tcg end, print = function (tcg) print(tcg); return tcg end, lprint = function (tcg) print(tcg:tolatex()); return tcg end, output = function (tcg) output(tcg:tolatex()); return tcg end, }, } -- «TCG-tests» (to ".TCG-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" -- dims = {dv=2, dh=3, ev=0.32, eh=0.2} opts = {scale="10pt", dims={dv=2, dh=3, ev=0.32, eh=0.2}} opts = {scale="10pt", dv=2, dh=3, ev=0.32, eh=0.2 } tcg = TCG.new(opts, "foo", 4, 6, "12", "23 34"):lrs():vs():hs():lprint() = tcg = tcg:tolatex() --]] -- «calcpoints» (to ".calcpoints") -- (find-LATEX "2018-1-GA-material.tex" "calcpoints") -- (find-LATEX "2018-1-GA-material.tex" "distancia-ponto-reta") -- (find-LATEX "2018-1-GA-material.tex" "distancia-ponto-reta" "\\CalcPoints") calcpoints = function (str) local result = str:gsub("<(.-)>", pformatexpr):gsub("!", "\\") print(result) return result end -- \def\Calcpoints#1{\expr{calcpoints("#1")}} -- __ __ -- \ \ / / __ __ _ _ __ -- \ \ /\ / / '__/ _` | '_ \ -- \ V V /| | | (_| | |_) | -- \_/\_/ |_| \__,_| .__/ -- |_| -- -- «Wrap» (to ".Wrap") -- (find-es "lua5" "Wrap") wr = function (lstr, rstr) return Wrap.new(lstr, rstr or "") end Wrap = Class { type = "Wrap", new = function (left, right) return Wrap {left=left, right=right} end, __tostring = function (o) return mytabletostring(o) end, __mul = function (w, o) if otype(o) == "Wrap" then return Wrap.new(w.left..o.left, o.right..w.right) else return w.left .. o .. w.right end end, __index = { }, } -- «Wrap-tests» (to ".Wrap-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" wa = Wrap.new ("<a ", " a>") wb = Wrap.new ("<b ", " b>") wc = Wrap.new ("<c ", " c>") = wa = wa * wb = wa * wb * "o" --]] -- _ __ _ _ _ _ -- __| | ___ / _|_ __ (_) ___| |_ __| | ___ | |_ ___ -- / _` |/ _ \ |_| '_ \| |/ __| __/ _` |/ _ \| __/ __| -- | (_| | __/ _| |_) | | (__| || (_| | (_) | |_\__ \ -- \__,_|\___|_| | .__/|_|\___|\__\__,_|\___/ \__|___/ -- |_| -- -- «defpictdots» (to ".defpictdots") -- An emergency hack for the Oxford abstract, used in: -- (find-LATEX "2019oxford-abs.tex" "defpictdots") -- (find-LATEX "2017planar-has-defs.tex" "defpido") -- (find-LATEX "2017planar-has-defs.tex" "picturedotsdef") -- -- My usual definitions for \beginpicture, \pictdots, etc run the -- "output" function of dednat6 on just part of the tex code, and they -- make a big mess in the .dnt file... -- -- See: (find-dn6 "picture.lua" "makepicture") -- -- (find-LATEX "edrxgac2.tex" "beginpicture") -- \def\beginpicture (#1,#2)(#3,#4){\expr{beginpicture(v(#1,#2),v(#3,#4))}} -- \def\beginpictureb(#1,#2)(#3,#4)#5{\expr{beginpicture(v(#1,#2),v(#3,#4),#5)}} -- \def\pictaxes{{\linethickness{0.5pt}\expr{pictaxes()}}} -- \def\picturedots(#1,#2)(#3,#4)#5{% -- \vcenter{\hbox{% -- \beginpicture(#1,#2)(#3,#4)% -- \pictaxes% -- \pictdots{#5}% -- \end{picture}% -- }}% -- } -- defpictdots = function (drawaxes, name, x0,y0,x1,y1,e, strdots) output(defpictdots0(drawaxes, name, x0,y0,x1,y1,e, strdots)) end defpictdots0 = function (drawaxes, name, x0,y0,x1,y1,e, strdots) local hasname = name and name ~= "" local def = hasname and wr("\\defpido{"..name.."}{%\n", "}") or wr("", "") local vcb = wr("\\vcenter{\\hbox{%\n", "}}") local bpb = wr(beginpicture(v(x0,y0), v(x1,y1), e).."%\n", "\\end{picture}") local axs = drawaxes and wr("{\\linethickness{0.5pt}%\n"..pictaxes().."\n}", "") or wr("", "") local dts = pictdots(strdots).."%\n" return def * vcb * bpb * axs * dts end -- «defpictdots-tests» (to ".defpictdots-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "edrxpict.lua" = defpictdots0(nil, "", 1,2, 4,5, nil, " 1,0 1,1 0,1 ") = defpictdots0(nil, "foo", 1,2, 4,5, nil, " 1,0 1,1 0,1 ") = defpictdots0("xy", "foo", 1,2, 4,5, nil, " 1,0 1,1 0,1 ") --]] -- Local Variables: -- coding: utf-8-unix -- End: