From 99c7eb1c5fdd23d7617d3817806af416e4614d15 Mon Sep 17 00:00:00 2001 From: "Maxime Chupin (escudo)" Date: Mon, 21 Nov 2016 00:01:35 +0100 Subject: [PATCH] Initialisation du projet --- luamesh.lua | 591 ++++++++++++++++++++++++ luamesh.sty | 187 ++++++++ test/delaunay-crop.pdf | Bin 0 -> 148732 bytes test/delaunay.aux | 1 + test/delaunay.log | 988 +++++++++++++++++++++++++++++++++++++++++ test/delaunay.pdf | Bin 0 -> 25488 bytes test/delaunay.tex | 51 +++ test/luamesh.lua | 1 + test/luamesh.sty | 1 + test/mesh.txt | 8 + 10 files changed, 1828 insertions(+) create mode 100644 luamesh.lua create mode 100644 luamesh.sty create mode 100644 test/delaunay-crop.pdf create mode 100644 test/delaunay.aux create mode 100644 test/delaunay.log create mode 100644 test/delaunay.pdf create mode 100644 test/delaunay.tex create mode 120000 test/luamesh.lua create mode 120000 test/luamesh.sty create mode 100644 test/mesh.txt diff --git a/luamesh.lua b/luamesh.lua new file mode 100644 index 0000000..f165fe6 --- /dev/null +++ b/luamesh.lua @@ -0,0 +1,591 @@ +-- Bowyer and Watson algorithm +-- Delaunay meshing +function BowyerWatson (listPoints,bbox) + local triangulation = {} + local lgth = #listPoints + -- add four points to listPoints to have a bounding box + listPoints = buildBoundingBox(listPoints) + -- the first triangle + triangulation[1] = {lgth+1, lgth+2, lgth+3} + -- the second triangle + triangulation[2] = {lgth+1, lgth+3, lgth+4} + -- add points one by one + for i=1,lgth do + -- find the triangles which the circumcircle contained the point to add + badTriangles = buildBadTriangles(listPoints[i],triangulation) + -- build the polygon of the cavity containing the point to add + polygon = buildCavity(badTriangles, triangulation) + -- remove the bad triangles + for j=1,#badTriangles do + table.remove(triangulation,badTriangles[j]-(j-1)) + end + -- build the new triangles and add them to triangulation + for j=1,#polygon do + table.insert(triangulation,{polygon[j][1],polygon[j][2],i}) + end + end -- end adding points of the listPoints + -- remove bounding box + if(bbox ~= "bbox") then + triangulation = removeBoundingBox(triangulation,lgth) + table.remove(listPoints,lgth+1) + table.remove(listPoints,lgth+1) + table.remove(listPoints,lgth+1) + table.remove(listPoints,lgth+1) + end + return triangulation +end + + +function buildBoundingBox(listPoints) + -- listPoints : list of points + -- epsV : parameter for the distance of the bounding box + local xmin, xmax, ymin, ymax, eps + xmin = 1000 + ymin = 1000 + xmax = -1000 + ymax = -1000 + for i=1,#listPoints do + if (listPoints[i].x < xmin) then + xmin = listPoints[i].x + end + if (listPoints[i].x > xmax) then + xmax = listPoints[i].x + end + if (listPoints[i].y < ymin) then + ymin = listPoints[i].y + end + if (listPoints[i].y > ymax) then + ymax = listPoints[i].y + end + end + eps = math.max(math.abs(xmax-xmin),math.abs(ymax-ymin))*0.15 + xmin = xmin - eps + xmax = xmax + eps + ymin = ymin - eps + ymax = ymax + eps + -- add points of the bounding box in last positions + table.insert(listPoints,{x=xmin,y=ymin}) + table.insert(listPoints,{x=xmin,y=ymax}) + table.insert(listPoints,{x=xmax,y=ymax}) + table.insert(listPoints,{x=xmax,y=ymin}) + return listPoints +end + +function removeBoundingBox(triangulation,lgth) + -- build the four bounding box edge + point1 = lgth+1 + point2 = lgth+2 + point3 = lgth+3 + point4 = lgth+4 + -- for all triangle + newTriangulation = {} + for i=1,#triangulation do + boolE1 = pointInTriangle(point1,triangulation[i]) + boolE2 = pointInTriangle(point2,triangulation[i]) + boolE3 = pointInTriangle(point3,triangulation[i]) + boolE4 = pointInTriangle(point4,triangulation[i]) + if((not boolE1) and (not boolE2) and (not boolE3) and (not boolE4)) then + table.insert(newTriangulation,triangulation[i]) + end + end + return newTriangulation +end + + +function buildBadTriangles(point, triangulation) + badTriangles = {} + for j=1,#triangulation do -- for all triangles + A = listPoints[triangulation[j][1]] + B = listPoints[triangulation[j][2]] + C = listPoints[triangulation[j][3]] + center, radius = circoncircle(A,B,C) + CP = Vector(center,point) + if(VectorNorm(CP) 0 then + rad = m * n * p / math.sqrt(d) + else + rad = 0 + end + d = -2 * (M.x * NP.y + N.x * PM.y + P.x * MN.y) + O = {x=0, y=0} + OM = Vector(O, M) + ON = Vector(O, N) + OP = Vector(O, P) + om2 = math.pow(VectorNorm(OM),2) -- |OM|**2 + on2 = math.pow(VectorNorm(ON),2) -- |ON|**2 + op2 = math.pow(VectorNorm(OP),2) -- |OP|**2 + x0 = -(om2 * NP.y + on2 * PM.y + op2 * MN.y) / d + y0 = (om2 * NP.x + on2 * PM.x + op2 * MN.x) / d + if d == 0 then + Out = {nil, nil} + else + Out = {x=x0, y=y0} + end + return Out, rad -- (center [Point], R [float]) +end + + +-------------------------- TeX +-- build the list of points +function buildList(chaine, mode) + -- if mode = int : the list is given in the chaine string (x1,y1);(x2,y2);...;(xn,yn) + -- if mode = ext : the list is given in a file line by line with space separation + listPoints = {} + if mode == "int" then + local points = string.explode(chaine, ";") + local lgth=#points + for i=1,lgth do + Sx,Sy=string.match(points[i],"%((.+),(.+)%)") + listPoints[i]={x=tonumber(Sx),y=tonumber(Sy)} + end + elseif mode == "ext" then + io.input(chaine) -- open the file + text=io.read("*all") + lines=string.explode(text,"\n+") -- all the lines + tablePoints={} + for i=1,#lines do + xy=string.explode(lines[i]," +") + listPoints[i]={x=tonumber(xy[1]),y=tonumber(xy[2])} + end + else + print("Non existing mode") + end + return listPoints +end + + +-- +function rectangleList(a,b,nbrA,nbrB) + stepA = a/nbrA + stepB = b/nbrB + listPoints = {} + k=1 + for i=1,(nbrA+1) do + for j=1,(nbrB+1) do + listPoints[k] = {x = (i-1)*stepA, y=(j-1)*stepB} + k=k+1 + end + end + return listPoints +end + +-- trace a triangulation with TikZ +function traceMeshTikZ(listPoints, triangulation,points,color) + output = "" + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" + end + if(points=="points") then + for i=1,#listPoints do + output = output .. "\\draw[color=".."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" + end + end + return output +end + + +-- trace a triangulation with MP +function traceMeshMP(listPoints, triangulation,points,color) + output = ""; + output = output .. " pair MeshPoints[];" + for i=1,#listPoints do + output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");" + end + + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\mpcolor{"..color.. "};" + end + if(points=="points") then + for i=1,#listPoints do + output = output .. "dotlabel.llft( btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u) withcolor \\mpcolor{"..color.. "};" + end + end + return output +end + + + +-- buildMesh with TikZ +function buildMeshTikZ(chaine,mode,points,bbox,full,scale,color) + listPoints = buildList(chaine, mode) + triangulation = BowyerWatson(listPoints,bbox) + output = traceMeshTikZ(listPoints, triangulation,points,color) + if(full=="full") then + output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}" + end + tex.sprint(output) +end + + +-- buildMesh with MP +function buildMeshMP(chaine,mode,points,bbox,full,scale,color) + listPoints = buildList(chaine, mode) + triangulation = BowyerWatson(listPoints,bbox) + output = traceMeshMP(listPoints, triangulation,points,color) + if(full=="full") then + output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}" + else + output = "u:="..scale.. ";".. output + end + tex.sprint(output) +end + +-- buildMesh +function buildRect(largeur,a,b,nbrA, nbrB) + listPoints = rectangleList(a,b,nbrA,nbrB) + triangulation = BowyerWatson(listPoints,"none") + traceTikZ(listPoints, triangulation,largeur,"none") +end + + +-- function give a real polygon without repeting points +function cleanPoly(polygon) + polyNew = {} + e1 = polygon[1][1] + e2 = polygon[1][2] + table.insert(polyNew, e1) + table.insert(polyNew, e2) + j = 2 + for i=2,#polygon do + bool1 = (polygon[i][1] == polyNew[j]) + bool2 = (polygon[i][2] == polyNew[j]) + if(bool1 or bool2) then -- the edge has a common point with polyNew[j] + if(not bool1) then + table.insert(polyNew, polygon[i][1]) + j = j+1 + elseif(not bool2) then + table.insert(polyNew, polygon[i][2]) + j = j+1 + end + end + end + return polyNew +end + +-- +function TeXaddOnePointTikZ(chaine,point,step,color,colorBack, colorNew, colorCircle) + Sx,Sy=string.match(point,"%((.+),(.+)%)") + P = {x=Sx, y=Sy} + output = "" + listPoints = buildList(chaine, "int") + -- build the triangulation + triangulation = BowyerWatson(listPoints,"none") + badTriangles = buildBadTriangles(P,triangulation) + if(step == "badT") then + -- draw all triangle + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" + end + -- draw and fill the bad triangle + for i=1,#badTriangles do + PointI = listPoints[triangulation[badTriangles[i]][1]] + PointJ = listPoints[triangulation[badTriangles[i]][2]] + PointK = listPoints[triangulation[badTriangles[i]][3]] + output = output .. "\\draw[fill="..colorBack.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" + end + -- draw the circoncircle + for i=1,#badTriangles do + PointI = listPoints[triangulation[badTriangles[i]][1]] + PointJ = listPoints[triangulation[badTriangles[i]][2]] + PointK = listPoints[triangulation[badTriangles[i]][3]] + center, radius = circoncircle(PointI, PointJ, PointK) + output = output .. "\\draw[dashed, color="..colorCircle.."] ("..center.x .. "," .. center.y .. ") circle ("..radius ..");" + end + -- mark the points + for i=1,#listPoints do + output = output .. "\\draw[color ="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" + end + -- mark the point to add + output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};" + elseif(step == "cavity") then + polygon = buildCavity(badTriangles, triangulation) + polyNew = cleanPoly(polygon) + -- remove the bad triangles + for j=1,#badTriangles do + table.remove(triangulation,badTriangles[j]-(j-1)) + end + -- draw the triangles + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" + end + -- fill and draw the cavity + path = "" + for i=1,#polyNew do + PointI = listPoints[polyNew[i]] + path = path .. "(".. PointI.x ..",".. PointI.y ..")--" + end + output = output .. "\\draw[color="..colorNew..",fill ="..colorBack..", thick] " .. path .. "cycle;" + -- mark the points of the mesh + for i=1,#listPoints do + output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" + end + -- mark the adding point + output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};" + elseif(step == "newT") then + polygon = buildCavity(badTriangles, triangulation) + polyNew = cleanPoly(polygon) + -- remove the bad triangles + for j=1,#badTriangles do + table.remove(triangulation,badTriangles[j]-(j-1)) + end + -- draw the triangle of the triangulation + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "\\draw[color ="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" + end + -- fill and draw the cavity + path = "" + for i=1,#polyNew do + PointI = listPoints[polyNew[i]] + path = path .. "(".. PointI.x ..",".. PointI.y ..")--" + end + output = output .. "\\draw[color="..colorNew..",fill ="..colorBack..", thick] " .. path .. "cycle;" + -- draw the new triangles composed by the edges of the polygon and the added point + for i=1,#polygon do + output = output .. "\\draw[color=TeXCluaMeshNewTikZ, thick]".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ") -- (" .. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y ..");" + output = output .. "\\draw[color="..colorNew..", thick]".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ") -- (" .. P.x .. "," .. P.y ..");" + output = output .. "\\draw[color="..colorNew..", thick]".."(".. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y .. ") -- (" .. P.x .. "," .. P.y ..");" + end + -- mark points + for i=1,#listPoints do + output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" + end + -- mark the added point + output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};" + end + return output +end + +function TeXaddOnePointMP(listPoints,P,step,color,colorBack, colorNew, colorCircle) + output = ""; + output = output .. "pair MeshPoints[];" + -- build the triangulation + triangulation = BowyerWatson(listPoints,"none") + badTriangles = buildBadTriangles(P,triangulation) + for i=1,#listPoints do + output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");" + end + if(step == "badT") then + -- draw all triangle + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\mpcolor{" .. color .."};" + end + -- draw and fill the bad triangle + for i=1,#badTriangles do + PointI = listPoints[triangulation[badTriangles[i]][1]] + PointJ = listPoints[triangulation[badTriangles[i]][2]] + PointK = listPoints[triangulation[badTriangles[i]][3]] + output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\mpcolor{" .. color .."};" + output = output .. "fill (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\mpcolor{" .. colorBack .."};" + end + -- draw the circoncircle + for i=1,#badTriangles do + PointI = listPoints[triangulation[badTriangles[i]][1]] + PointJ = listPoints[triangulation[badTriangles[i]][2]] + PointK = listPoints[triangulation[badTriangles[i]][3]] + center, radius = circoncircle(PointI, PointJ, PointK) + output = output .. "draw fullcircle scaled ("..radius .."*2u) shifted ("..center.x .. "*u," .. center.y .. "*u) dashed evenly withcolor \\mpcolor{" .. colorCircle .."};" + end + -- mark the points + for i=1,#listPoints do + output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\mpcolor{" .. color .."};" + end + -- mark the point to add + output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\mpcolor{" .. colorNew .."};" + elseif(step == "cavity") then + polygon = buildCavity(badTriangles, triangulation) + polyNew = cleanPoly(polygon) + -- remove the bad triangles + for j=1,#badTriangles do + table.remove(triangulation,badTriangles[j]-(j-1)) + end + -- draw the triangles + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\mpcolor{" .. color .."};" + end + -- fill and draw the cavity + path = "" + for i=1,#polyNew do + PointI = listPoints[polyNew[i]] + path = path .. "(".. PointI.x ..",".. PointI.y ..")*u--" + end + output = output .. "fill " .. path .. "cycle withcolor \\mpcolor{" .. colorBack .."};" + output = output .. "draw " .. path .. "cycle withcolor \\mpcolor{" .. colorNew .."} withpen pencircle scaled 1pt;" + -- mark the points of the mesh + for i=1,#listPoints do + output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\mpcolor{" .. color .."};" + end + -- mark the adding point + output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\mpcolor{" .. colorNew .."};" + elseif(step == "newT") then + polygon = buildCavity(badTriangles, triangulation) + polyNew = cleanPoly(polygon) + -- remove the bad triangles + for j=1,#badTriangles do + table.remove(triangulation,badTriangles[j]-(j-1)) + end + -- draw the triangle of the triangulation + for i=1,#triangulation do + PointI = listPoints[triangulation[i][1]] + PointJ = listPoints[triangulation[i][2]] + PointK = listPoints[triangulation[i][3]] + output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\mpcolor{" .. color .."};" + end + -- fill the cavity + path = "" + for i=1,#polyNew do + PointI = listPoints[polyNew[i]] + path = path .. "(".. PointI.x ..",".. PointI.y ..")*u--" + end + output = output .. "fill " .. path .. "cycle withcolor \\mpcolor{" .. colorBack .."};" + -- draw the new triangles composed by the edges of the polygon and the added point + for i=1,#polygon do + output = output .. "draw".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ")*u -- (" .. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y ..")*u withcolor \\mpcolor{" .. colorNew .."} withpen pencircle scaled 1pt;" + output = output .. "draw".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ")*u -- (" .. P.x .. "," .. P.y ..")*u withcolor \\mpcolor{" .. colorNew .."} withpen pencircle scaled 1pt;" + output = output .. "draw".."(".. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y .. ")*u -- (" .. P.x .. "," .. P.y ..")*u withcolor \\mpcolor{" .. colorNew .."} withpen pencircle scaled 1pt;" + end + -- mark points + for i=1,#listPoints do + output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\mpcolor{" .. color .."};" + end + -- mark the added point + output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\mpcolor{ " .. colorNew .."};" + end + return output +end + + +-- build the list of points extern and stop at nbr +function buildListExt(chaine, stop) + listPoints = {} + io.input(chaine) -- open the file + text=io.read("*all") + lines=string.explode(text,"\n+") -- all the lines + for i=1,tonumber(stop) do + xy=string.explode(lines[i]," +") + table.insert(listPoints,{x=tonumber(xy[1]),y=tonumber(xy[2])}) + end + xy=string.explode(lines[stop+1]," +") + point={x=tonumber(xy[1]),y=tonumber(xy[2])} + return point, listPoints +end + + +function TeXFullOnePointTikZ(chaine,point,step,color,colorBack,colorNew,colorCircle,scale) + output = TeXaddOnePointTikZ(chaine,point,step,color,colorBack,colorNew,colorCircle) + output = "\\noindent\\begin{tikzpicture}[x="..scale..",y="..scale.."]".. output .. "\\end{tikzpicture}" + tex.sprint(output) +end + +function TeXFullOnePointMP(chaine,point,step,color,colorBack,colorNew,colorCircle,scale,mode) + if(mode=="int") then + Sx,Sy=string.match(point,"%((.+),(.+)%)") + P = {x=Sx, y=Sy} + listPoints = buildList(chaine, mode) + else + -- point is a number + P, listPoints = buildListExt(chaine,tonumber(point)) + end + output = TeXaddOnePointMP(listPoints,P,step,color,colorBack,colorNew,colorCircle) + output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale..";".. output .. "endfig;\\end{mplibcode}" + tex.sprint(output) +end diff --git a/luamesh.sty b/luamesh.sty new file mode 100644 index 0000000..9cc0b68 --- /dev/null +++ b/luamesh.sty @@ -0,0 +1,187 @@ +\NeedsTeXFormat{LaTeX2e}% +\def\PackageName{luamesh}% +\def\fileversion{v0.1}% +\def\filedate{2016/11/20}% +\ProvidesPackage{luamesh}[\filedate\space\fileversion]% +% +% package to load +\RequirePackage{xkeyval,xcolor,ifthen}% +%% one global option: mp or tikz +%\newif\ifluameshmp% +%\define@key{luamesh.sty}{mp}[]{\luameshmptrue}% +%\define@key{luamesh.sty}{tikz}[]{\luameshmpfalse}% +% +\RequirePackage{etoolbox} % pour robustifier les commandes +% +% +%\ifluameshmp% + \RequirePackage{luamplib}% +%\else% + \RequirePackage{tikz}% +%\fi% +% +% load the lua code +\directlua{dofile("luamesh.lua")}% +% +% global def (default value) +\newcommand{\MeshPoint}{P} +\newcommand{\NewPoint}{P} +% for MetaPost (MP) (default value) +% default scale u:=1cm; +\newcommand\luaMeshScaleMP{1cm} +% default color for the plot of a global mesh +\newcommand\TeXCluaMeshMP{(0.,0.,0.)} +% default color for a new element +\newcommand\TeXCluaMeshNewMP{(0.5,0.1,0.1)} +% defaut color for the background of new element +\newcommand\TeXCluaMeshBackMP{(0.99,0.85,0.85)} +% default color for circoncircle +\newcommand\TeXCluaMeshCircleMP{(0.1,0.6,0.1)} +%% +% for tikz (default value) +% default color for the plot of a global mesh +\definecolor{TeXCluaMeshTikZ}{rgb}{0.,0.,0.} +% default color for a new element +\definecolor{TeXCluaMeshNewTikZ}{rgb}{0.5,0.1,0.1} +% defaut color for the background of new element +\definecolor{TeXCluaMeshBackTikZ}{rgb}{0.99,0.85,0.85} +% default color for circoncircle +\definecolor{TeXCluaMeshCircleTikZ}{rgb}{0.1,0.6,0.1} + + +%%%%%%%%%%%%%%%% the buildMesh command +%% engine of drawing +\newif\ifluameshengineMP% +\define@boolkey{buildMesh}{tikz}[true]{}% +%% show the bounding box for delaunay +\define@choicekey*{buildMesh}{bbox}[\val\nr]{none, show}{% + \ifcase\nr\relax% + \def\luameshval@bbox{none}% + \or% + \def\luameshval@bbox{bbox}% + \fi% +}% +%% the scale +\define@key{buildMesh}{scale}[1cm]{\def\luameshval@scale{#1}}% +%% print ponits ? +\define@choicekey*{buildMesh}{print}[\val\nr]{none, points}{% + \ifcase\nr\relax% + \def\luameshval@print{none}% + \or% + \def\luameshval@print{points}% + \fi% +}% +%% the name of the point +\define@key{buildMesh}{meshpoint}[P]{\def\luameshval@meshpoint{#1}}% +%% the mode for reading the points +\define@choicekey*{buildMesh}{mode}[\val\nr]{int, ext}{% + \ifcase\nr\relax% + \def\luameshval@mode{int}% + \or% + \def\luameshval@mode{ext}% + \fi% +}% +% +%% a complete picture or some code of the engine +\define@choicekey*{buildMesh}{picture}[\val\nr]{full, simple}{% + \ifcase\nr\relax% + \def\luameshval@picture{full}% + \or% + \def\luameshval@picture{simple}% + \fi% +}% +%color +%% the name of the color of drawing +\define@key{buildMesh}{color}[black]{\def\luameshval@color{#1}}% + +\presetkeys{buildMesh}{tikz=false,bbox=none,scale, meshpoint,mode=int,print=none,picture=full,color}{}% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the difinition +\newcommand{\buildMesh}[2][]{% + % #1 : the string containing the list of points + % (x1,y1);(x2,y2);... or the name file containing the points + \setkeys{buildMesh}{#1} % + \def\MeshPoint{\luameshval@meshpoint}% + \ifKV@buildMesh@tikz% if we are using tikz + \directlua{% + buildMeshTikZ("#2","\luameshval@mode","\luameshval@print","\luameshval@bbox","full","\luameshval@scale","\luameshval@color")% + }% + \else % we are using MP + \directlua{% + buildMeshMP("#2","\luameshval@mode","\luameshval@print","\luameshval@bbox","full","\luameshval@scale","\luameshval@color")% + }% + % + \fi% +}% +% +%% +% +%%the meshAddOnePoint commande +%%engine of drawing +\newif\ifluameshengineMP% +\define@boolkey{MeshAddOne}{tikz}[true]{}% +%% the scale +\define@key{MeshAddOne}{scale}[1cm]{\def\luameshval@scale{#1}}% +%% the name of the points +\define@key{MeshAddOne}{meshpoint}[P]{\def\luameshval@meshpoint{#1}}% +%% the name of the new point +\define@key{MeshAddOne}{newpoint}[P]{\def\luameshval@newpoint{#1}}% +%% a complete picture or some code of the engine +\define@choicekey*{MeshAddOne}{picture}[\val\nr]{full, simple}{% + \ifcase\nr\relax% + \def\luameshval@picture{full}% + \or% + \def\luameshval@picture{simple}% + \fi% +}% +%% a complete picture or some code of the engine +\define@choicekey*{MeshAddOne}{step}[\val\nr]{badtriangles, cavity, newtriangles}{% + \ifcase\nr\relax% + \def\luameshval@step{badT}% + \or% + \def\luameshval@step{cavity}% + \or% + \def\luameshval@step{newT}% + \fi% +}% +% color +%% the color of drawing +\define@key{MeshAddOne}{color}[black]{\def\luameshval@color{#1}}% +%% the color of background of new element +\define@key{MeshAddOne}{colorBack}[black!20]{\def\luameshval@colorback{#1}}% +%% the color of new element +\define@key{MeshAddOne}{colorNew}[red]{\def\luameshval@colornew{#1}}% +%% the color of circoncircle +\define@key{MeshAddOne}{colorCircle}[green]{\def\luameshval@colorcircle{#1}}% +% +%% a complete picture or some code of the engine +\define@choicekey*{MeshAddOne}{mode}[\val\nr]{int, ext}{% + \ifcase\nr\relax% + \def\luameshval@mode{int}% + \or% + \def\luameshval@mode{ext}% + \fi% +}% +\presetkeys{MeshAddOne}{tikz=false,scale, meshpoint,newpoint,color,colorBack,colorNew,colorCircle,step=badtriangles,mode=int}{}% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the difinition +\newcommand{\meshAddOnePoint}[3][]{% + % #1 : the string containing the list of points + % (x1,y1);(x2,y2);... or the name file containing the points + \setkeys{MeshAddOne}{#1} % + \def\MeshPoint{\luameshval@meshpoint}% + \def\NewPoint{\luameshval@newpoint}% + \ifKV@MeshAddOne@tikz% if we are using tikz + \directlua{% + buildMeshTikZ("#2","\luameshval@mode","\luameshval@print","\luameshval@bbox","full","\luameshval@scale","\luameshval@color")% + }% + \else % we are using MP + \directlua{% + TeXFullOnePointMP("#2","#3","\luameshval@step","\luameshval@color","\luameshval@colorback","\luameshval@colornew","\luameshval@colorcircle","\luameshval@scale","\luameshval@mode")% + }% + % + \fi% +}% +% \ No newline at end of file diff --git a/test/delaunay-crop.pdf b/test/delaunay-crop.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d85ab988646b28413d8c823a4c0508946e57024a GIT binary patch literal 148732 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 patch level 3 +Babel <3.9r> and hyphenation patterns for 1 language(s) loaded. +(/usr/local/texlive/2016/texmf-dist/tex/latex/base/article.cls +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class +(/usr/local/texlive/2016/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@section=\count80 +\c@subsection=\count81 +\c@subsubsection=\count82 +\c@paragraph=\count83 +\c@subparagraph=\count84 +\c@figure=\count85 +\c@table=\count86 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2010/09/12 v5.6 Page Geometry + +(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks14 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ifpdf.sty +Package: ifpdf 2016/05/14 v3.1 Provides the ifpdf switch +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ifvtex.sty +Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +\Gm@cnth=\count87 +\Gm@cntv=\count88 +\c@Gm@tempcnt=\count89 +\Gm@bindingoffset=\dimen103 +\Gm@wd@mp=\dimen104 +\Gm@odd@mp=\dimen105 +\Gm@even@mp=\dimen106 +\Gm@layoutwidth=\dimen107 +\Gm@layoutheight=\dimen108 +\Gm@layouthoffset=\dimen109 +\Gm@layoutvoffset=\dimen110 +\Gm@dimlist=\toks15 +) +(./luamesh.sty +Package: luamesh 2016/11/20 v0.1 + +(/usr/local/texlive/2016/texmf-dist/tex/latex/xkeyval/xkeyval.sty +Package: xkeyval 2014/12/03 v2.7a package option processing (HA) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/xkeyval/xkeyval.tex +(/usr/local/texlive/2016/texmf-dist/tex/generic/xkeyval/xkvutils.tex +\XKV@toks=\toks16 +\XKV@tempa@toks=\toks17 +) +\XKV@depth=\count90 +File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) +)) +(/usr/local/texlive/2016/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) + +(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: luatex.def on input line 225. + +(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-def/luatex.def +File: luatex.def 2016/08/17 v0.01g Graphics/Color for luaTeX + +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) +) +\Gread@gobject=\count91 +) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352. +Package xcolor Info: Model `RGB' extended on input line 1364. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/base/ifthen.sty +Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC) +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2015/08/02 v2.2a e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count92 +) +(/usr/local/texlive/2016/texmf-dist/tex/luatex/luamplib/luamplib.sty +Package: luamplib 2016/03/31 v2.11.3 mplib package for LuaTeX +Lua module: luamplib 2016/03/31 2.11.3 Lua package to typeset Metapost with LuaT +eX's MPLib. +\mplibstartlineno=\count93 +\everymplibtoks=\toks18 +\everyendmplibtoks=\toks19 +\mplibscratchbox=\box26 +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te +x +\pgfutil@everybye=\toks20 +\pgfutil@tempdima=\dimen111 +\pgfutil@tempdimb=\dimen112 + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-li +sts.tex)) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +\pgfutil@abb=\box27 +(/usr/local/texlive/2016/texmf-dist/tex/latex/ms/everyshi.sty +Package: everyshi 2001/05/15 v3.00 EveryShipout Package (MS) +)) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +Package: pgfrcs 2015/08/07 v3.0.1a (rcs-revision 1.31) +)) +Package: pgf 2015/08/07 v3.0.1a (rcs-revision 1.15) +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2016/07/10 v1.0t Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: luatex.def on input line 99. +) +\Gin@req@height=\dimen113 +\Gin@req@width=\dimen114 +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +Package: pgfsys 2014/07/09 v3.0.1a (rcs-revision 1.48) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +\pgfkeys@pathtoks=\toks21 +\pgfkeys@temptoks=\toks22 + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.c +ode.tex +\pgfkeys@tmptoks=\toks23 +)) +\pgf@x=\dimen115 +\pgf@y=\dimen116 +\pgf@xa=\dimen117 +\pgf@ya=\dimen118 +\pgf@xb=\dimen119 +\pgf@yb=\dimen120 +\pgf@xc=\dimen121 +\pgf@yc=\dimen122 +\w@pgf@writea=\write3 +\r@pgf@reada=\read1 +\c@pgf@counta=\count94 +\c@pgf@countb=\count95 +\c@pgf@countc=\count96 +\c@pgf@countd=\count97 +\t@pgf@toka=\toks24 +\t@pgf@tokb=\toks25 +\t@pgf@tokc=\toks26 + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +File: pgf.cfg 2008/05/14 (rcs-revision 1.7) +) +Driver file for pgf: pgfsys-luatex.def + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-luatex.d +ef +File: pgfsys-luatex.def 2014/10/11 (rcs-revision 1.35) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p +df.def +File: pgfsys-common-pdf.def 2013/10/10 (rcs-revision 1.13) +))) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. +code.tex +File: pgfsyssoftpath.code.tex 2013/09/09 (rcs-revision 1.9) +\pgfsyssoftpath@smallbuffer@items=\count98 +\pgfsyssoftpath@bigbuffer@items=\count99 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. +code.tex +File: pgfsysprotocol.code.tex 2006/10/16 (rcs-revision 1.4) +)) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +Package: pgfcore 2010/04/11 v3.0.1a (rcs-revision 1.7) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +\pgfmath@dimen=\dimen123 +\pgfmath@count=\count100 +\pgfmath@box=\box28 +\pgfmath@toks=\toks27 +\pgfmath@stack@operand=\toks28 +\pgfmath@stack@operation=\toks29 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. +tex +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic +.code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo +nometric.code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando +m.code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa +rison.code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. +code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round +.code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. +code.tex) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ +erarithmetics.code.tex))) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +\c@pgfmathroundto@lastzeros=\count101 +)) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co +de.tex +File: pgfcorepoints.code.tex 2013/10/07 (rcs-revision 1.27) +\pgf@picminx=\dimen124 +\pgf@picmaxx=\dimen125 +\pgf@picminy=\dimen126 +\pgf@picmaxy=\dimen127 +\pgf@pathminx=\dimen128 +\pgf@pathmaxx=\dimen129 +\pgf@pathminy=\dimen130 +\pgf@pathmaxy=\dimen131 +\pgf@xx=\dimen132 +\pgf@xy=\dimen133 +\pgf@yx=\dimen134 +\pgf@yy=\dimen135 +\pgf@zx=\dimen136 +\pgf@zy=\dimen137 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst +ruct.code.tex +File: pgfcorepathconstruct.code.tex 2013/10/07 (rcs-revision 1.29) +\pgf@path@lastx=\dimen138 +\pgf@path@lasty=\dimen139 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage +.code.tex +File: pgfcorepathusage.code.tex 2014/11/02 (rcs-revision 1.24) +\pgf@shorten@end@additional=\dimen140 +\pgf@shorten@start@additional=\dimen141 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co +de.tex +File: pgfcorescopes.code.tex 2015/05/08 (rcs-revision 1.46) +\pgfpic=\box29 +\pgf@hbox=\box30 +\pgf@layerbox@main=\box31 +\pgf@picture@serial@count=\count102 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst +ate.code.tex +File: pgfcoregraphicstate.code.tex 2014/11/02 (rcs-revision 1.12) +\pgflinewidth=\dimen142 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform +ations.code.tex +File: pgfcoretransformations.code.tex 2015/08/07 (rcs-revision 1.20) +\pgf@pt@x=\dimen143 +\pgf@pt@y=\dimen144 +\pgf@pt@temp=\dimen145 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod +e.tex +File: pgfcorequick.code.tex 2008/10/09 (rcs-revision 1.3) +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c +ode.tex +File: pgfcoreobjects.code.tex 2006/10/11 (rcs-revision 1.2) +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce +ssing.code.tex +File: pgfcorepathprocessing.code.tex 2013/09/09 (rcs-revision 1.9) +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co +de.tex +File: pgfcorearrows.code.tex 2015/05/14 (rcs-revision 1.43) +\pgfarrowsep=\dimen146 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod +e.tex +File: pgfcoreshade.code.tex 2013/07/15 (rcs-revision 1.15) +\pgf@max=\dimen147 +\pgf@sys@shading@range@num=\count103 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod +e.tex +File: pgfcoreimage.code.tex 2013/07/15 (rcs-revision 1.18) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. +code.tex +File: pgfcoreexternal.code.tex 2014/07/09 (rcs-revision 1.21) +\pgfexternal@startupbox=\box32 +)) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co +de.tex +File: pgfcorelayers.code.tex 2013/07/18 (rcs-revision 1.7) +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare +ncy.code.tex +File: pgfcoretransparency.code.tex 2013/09/30 (rcs-revision 1.5) +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. +code.tex +File: pgfcorepatterns.code.tex 2013/11/07 (rcs-revision 1.5) +))) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod +e.tex +File: pgfmoduleshapes.code.tex 2014/03/21 (rcs-revision 1.35) +\pgfnodeparttextbox=\box33 +) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. +tex +File: pgfmoduleplot.code.tex 2015/08/03 (rcs-revision 1.13) +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-0-65.sty +Package: pgfcomp-version-0-65 2007/07/03 v3.0.1a (rcs-revision 1.7) +\pgf@nodesepstart=\dimen148 +\pgf@nodesepend=\dimen149 +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-1-18.sty +Package: pgfcomp-version-1-18 2007/07/23 v3.0.1a (rcs-revision 1.1) +)) +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/utilities/pgffor.sty +(/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)) + (/usr/local/texlive/2016/texmf-dist/tex/latex/pgf/math/pgfmath.sty +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex +Package: pgffor 2013/12/13 v3.0.1a (rcs-revision 1.25) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex) +\pgffor@iter=\dimen150 +\pgffor@skip=\dimen151 +\pgffor@stack=\toks30 +\pgffor@toks=\toks31 +)) +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.cod +e.tex +Package: tikz 2015/08/07 v3.0.1a (rcs-revision 1.151) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothan +dlers.code.tex +File: pgflibraryplothandlers.code.tex 2013/08/31 v3.0.1a (rcs-revision 1.20) +\pgf@plot@mark@count=\count104 +\pgfplotmarksize=\dimen152 +) +\tikz@lastx=\dimen153 +\tikz@lasty=\dimen154 +\tikz@lastxsaved=\dimen155 +\tikz@lastysaved=\dimen156 +\tikzleveldistance=\dimen157 +\tikzsiblingdistance=\dimen158 +\tikz@figbox=\box34 +\tikz@figbox@bg=\box35 +\tikz@tempbox=\box36 +\tikz@tempbox@bg=\box37 +\tikztreelevel=\count105 +\tikznumberofchildren=\count106 +\tikznumberofcurrentchild=\count107 +\tikz@fig@count=\count108 + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.cod +e.tex +File: pgfmodulematrix.code.tex 2013/09/17 (rcs-revision 1.8) +\pgfmatrixcurrentrow=\count109 +\pgfmatrixcurrentcolumn=\count110 +\pgf@matrix@numberofcolumns=\count111 +) +\tikz@expandcount=\count112 + +(/usr/local/texlive/2016/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie +s/tikzlibrarytopaths.code.tex +File: tikzlibrarytopaths.code.tex 2008/06/17 v3.0.1a (rcs-revision 1.2) +)))) +(/usr/local/texlive/2016/texmf-dist/tex/latex/fontspec/fontspec.sty +(/usr/local/texlive/2016/texmf-dist/tex/latex/l3kernel/expl3.sty +Package: expl3 2016/05/18 v6512 L3 programming layer (loader) + +(/usr/local/texlive/2016/texmf-dist/tex/latex/l3kernel/expl3-code.tex +Package: expl3 2016/05/18 v6512 L3 programming layer (code) +L3 Module: l3bootstrap 2016/02/12 v6412 L3 Bootstrap code +\ucharcat@table=\catcodetable5 +L3 Module: l3names 2016/03/11 v6433 L3 Namespace for primitives +L3 Module: l3basics 2015/11/22 v6315 L3 Basic definitions +L3 Module: l3expan 2015/09/10 v5983 L3 Argument expansion +L3 Module: l3tl 2016/03/26 v6465 L3 Token lists +L3 Module: l3str 2016/03/24 v6441 L3 Strings +L3 Module: l3seq 2015/08/05 v5777 L3 Sequences and stacks +L3 Module: l3int 2016/03/24 v6441 L3 Integers +\c_max_int=\count113 +\l_tmpa_int=\count114 +\l_tmpb_int=\count115 +\g_tmpa_int=\count116 +\g_tmpb_int=\count117 +L3 Module: l3quark 2015/08/17 v5855 L3 Quarks +L3 Module: l3prg 2015/11/01 v6216 L3 Control structures +\g__prg_map_int=\count118 +L3 Module: l3clist 2015/09/02 v5901 L3 Comma separated lists +L3 Module: l3token 2016/04/03 v6470 L3 Experimental token manipulation +L3 Module: l3prop 2016/01/05 v6366 L3 Property lists +L3 Module: l3msg 2016/03/26 v6464 L3 Messages +L3 Module: l3file 2016/03/25 v6458 L3 File and I/O operations +\l_iow_line_count_int=\count119 +\l__iow_target_count_int=\count120 +\l__iow_current_line_int=\count121 +\l__iow_current_word_int=\count122 +\l__iow_current_indentation_int=\count123 +L3 Module: l3skip 2016/01/05 v6366 L3 Dimensions and skips +\c_zero_dim=\dimen159 +\c_max_dim=\dimen160 +\l_tmpa_dim=\dimen161 +\l_tmpb_dim=\dimen162 +\g_tmpa_dim=\dimen163 +\g_tmpb_dim=\dimen164 +\c_zero_skip=\skip43 +\c_max_skip=\skip44 +\l_tmpa_skip=\skip45 +\l_tmpb_skip=\skip46 +\g_tmpa_skip=\skip47 +\g_tmpb_skip=\skip48 +\c_zero_muskip=\muskip10 +\c_max_muskip=\muskip11 +\l_tmpa_muskip=\muskip12 +\l_tmpb_muskip=\muskip13 +\g_tmpa_muskip=\muskip14 +\g_tmpb_muskip=\muskip15 +L3 Module: l3keys 2015/11/17 v6284 L3 Key-value interfaces +\g__keyval_level_int=\count124 +\l_keys_choice_int=\count125 +L3 Module: l3fp 2016/03/26 v6465 L3 Floating points +\c__fp_leading_shift_int=\count126 +\c__fp_middle_shift_int=\count127 +\c__fp_trailing_shift_int=\count128 +\c__fp_big_leading_shift_int=\count129 +\c__fp_big_middle_shift_int=\count130 +\c__fp_big_trailing_shift_int=\count131 +\c__fp_Bigg_leading_shift_int=\count132 +\c__fp_Bigg_middle_shift_int=\count133 +\c__fp_Bigg_trailing_shift_int=\count134 +L3 Module: l3box 2015/08/09 v5822 L3 Experimental boxes +\c_empty_box=\box38 +\l_tmpa_box=\box39 +\l_tmpb_box=\box40 +\g_tmpa_box=\box41 +\g_tmpb_box=\box42 +L3 Module: l3coffins 2016/05/17 v6508 L3 Coffin code layer +\l__coffin_internal_box=\box43 +\l__coffin_internal_dim=\dimen165 +\l__coffin_offset_x_dim=\dimen166 +\l__coffin_offset_y_dim=\dimen167 +\l__coffin_x_dim=\dimen168 +\l__coffin_y_dim=\dimen169 +\l__coffin_x_prime_dim=\dimen170 +\l__coffin_y_prime_dim=\dimen171 +\c_empty_coffin=\box44 +\l__coffin_aligned_coffin=\box45 +\l__coffin_aligned_internal_coffin=\box46 +\l_tmpa_coffin=\box47 +\l_tmpb_coffin=\box48 +\l__coffin_display_coffin=\box49 +\l__coffin_display_coord_coffin=\box50 +\l__coffin_display_pole_coffin=\box51 +\l__coffin_display_offset_dim=\dimen172 +\l__coffin_display_x_dim=\dimen173 +\l__coffin_display_y_dim=\dimen174 +L3 Module: l3color 2014/08/23 v5354 L3 Experimental color support +L3 Module: l3sys 2015/09/25 v6087 L3 Experimental system/runtime functions +L3 Module: l3candidates 2016/05/13 v6484 L3 Experimental additions to l3kernel +\l__box_top_dim=\dimen175 +\l__box_bottom_dim=\dimen176 +\l__box_left_dim=\dimen177 +\l__box_right_dim=\dimen178 +\l__box_top_new_dim=\dimen179 +\l__box_bottom_new_dim=\dimen180 +\l__box_left_new_dim=\dimen181 +\l__box_right_new_dim=\dimen182 +\l__box_internal_box=\box52 +\l__coffin_bounding_shift_dim=\dimen183 +\l__coffin_left_corner_dim=\dimen184 +\l__coffin_right_corner_dim=\dimen185 +\l__coffin_bottom_corner_dim=\dimen186 +\l__coffin_top_corner_dim=\dimen187 +\l__coffin_scaled_total_height_dim=\dimen188 +\l__coffin_scaled_width_dim=\dimen189 +L3 Module: l3luatex 2016/03/26 v6465 L3 Experimental LuaTeX-specific functions +) +(/usr/local/texlive/2016/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +File: l3pdfmode.def 2016/03/26 v6465 L3 Experimental driver: PDF mode +\l__driver_color_stack_int=\count135 +\l__driver_tmp_box=\box53 +)) +(/usr/local/texlive/2016/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +Package: xparse 2016/05/18 v6512 L3 Experimental document command parser +\l__xparse_current_arg_int=\count136 +\l__xparse_m_args_int=\count137 +\l__xparse_mandatory_args_int=\count138 +\l__xparse_processor_int=\count139 +\l__xparse_v_nesting_int=\count140 +) +Package: fontspec 2016/02/01 v2.5a Font selection for XeLaTeX and LuaLaTeX + +(/usr/local/texlive/2016/texmf-dist/tex/luatex/luaotfload/luaotfload.sty +Package: luaotfload 2016/06/16 v2.7 OpenType layout system +Lua module: luaotfload-main 2016/06/16 2.70003 OpenType layout system. +Lua module: lualibs 2016-04-06 2.4 ConTeXt Lua standard libraries. +Lua module: lualibs-extended 2016-04-06 2.4 ConTeXt Lua libraries -- extended co +llection.(using write cache: /home/chupin/.texlive2016/texmf-var/luatex-cache/ge +neric)(using read cache: /usr/local/texlive/2016/texmf-var/luatex-cache/generic +/home/chupin/.texlive2016/texmf-var/luatex-cache/generic) +luaotfload | conf : Root cache directory is /home/chupin/.texlive2016/texmf-var/ +luatex-cache/generic/names. +luaotfload | init : Loading fontloader “fontloader-2016-06-16.lua” from kpse +-resolved path “/usr/local/texlive/2016/texmf-dist/tex/luatex/luaotfload/fontl +oader-2016-06-16.lua”. +Lua-only attribute luaotfload@state = 1 +Lua-only attribute luaotfload@noligature = 2 +Lua-only attribute luaotfload@syllabe = 3 +luaotfload | init : Context OpenType loader version “3.023” +Inserting `luaotfload.node_processor' at position 1 in `pre_linebreak_filter'. +Inserting `luaotfload.node_processor' at position 1 in `hpack_filter'. +Inserting `luaotfload.define_font' at position 1 in `define_font'. +Lua-only attribute luaotfload_color_attribute = 4 +luaotfload | conf : Root cache directory is /home/chupin/.texlive2016/texmf-var/ +luatex-cache/generic/names. +Inserting `luaotfload.aux.set_sscale_dimens' at position 1 in `luaotfload.patch_ +font'. +Inserting `luaotfload.aux.patch_cambria_domh' at position 2 in `luaotfload.patch +_font'. +Inserting `luaotfload.aux.fixup_fontdata' at position 1 in `luaotfload.patch_fon +t_unsafe'. +Inserting `luaotfload.aux.set_capheight' at position 3 in `luaotfload.patch_font +'. +Inserting `luaotfload.rewrite_fontname' at position 4 in `luaotfload.patch_font' +. +luaotfload | main : initialization completed in 0.087 seconds) +Lua module: fontspec 2016/02/01 2.5a Advanced font selection for LuaLaTeX. +(/usr/local/texlive/2016/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty +Package: fontspec-luatex 2016/02/01 v2.5a Font selection for XeLaTeX and LuaLaTe +X +\l_fontspec_script_int=\count141 +\l_fontspec_language_int=\count142 +\l_fontspec_strnum_int=\count143 +\l__fontspec_tmpa_dim=\dimen190 +\l__fontspec_tmpb_dim=\dimen191 +\l__fontspec_tmpc_dim=\dimen192 +\g__file_internal_ior=\read2 + +(/usr/local/texlive/2016/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2016/06/19 v1.99m Standard LaTeX package + +(/usr/local/texlive/2016/texmf-dist/tex/latex/euenc/eu2enc.def +File: eu2enc.def 2010/05/27 v0.1h Experimental Unicode font encodings +) +LaTeX Font Info: Try loading font information for EU2+lmr on input line 105. + +(/usr/local/texlive/2016/texmf-dist/tex/latex/euenc/eu2lmr.fd +File: eu2lmr.fd 2009/10/30 v1.6 Font defs for Latin Modern +) +luaotfload | db : Font names database loaded from /home/chupin/.texlive2016/texm +f-var/luatex-cache/generic/names/luaotfload-names.luc(compiling luc: /usr/local/ +texlive/2016/texmf-var/luatex-cache/generic/fonts/otl/lmroman10-regular.luc)(loa +d luc: /home/chupin/.texlive2016/texmf-var/luatex-cache/generic/fonts/otl/lmroma +n10-regular.luc)) +(/usr/local/texlive/2016/texmf-dist/tex/xelatex/xunicode/xunicode.sty +File: xunicode.sty 2011/09/09 v0.981 provides access to latin accents and many o +ther characters in Unicode lower plane + +(/usr/local/texlive/2016/texmf-dist/tex/latex/tipa/t3enc.def +File: t3enc.def 2001/12/31 T3 encoding +(compiling luc: /usr/local/texlive/2016/texmf-var/luatex-cache/generic/fonts/otl +/lmromanslant10-regular.luc)(load luc: /home/chupin/.texlive2016/texmf-var/luate +x-cache/generic/fonts/otl/lmromanslant10-regular.luc)(compiling luc: /usr/local/ +texlive/2016/texmf-var/luatex-cache/generic/fonts/otl/lmroman10-italic.luc)(load + luc: /home/chupin/.texlive2016/texmf-var/luatex-cache/generic/fonts/otl/lmroman +10-italic.luc)(compiling luc: /usr/local/texlive/2016/texmf-var/luatex-cache/gen +eric/fonts/otl/lmroman10-bold.luc)(load luc: /home/chupin/.texlive2016/texmf-var +/luatex-cache/generic/fonts/otl/lmroman10-bold.luc) +LaTeX Font Info: Try loading font information for EU2+lmss on input line 357. + + +(/usr/local/texlive/2016/texmf-dist/tex/latex/euenc/eu2lmss.fd +File: eu2lmss.fd 2009/10/30 v1.6 Font defs for Latin Modern +)(compiling luc: /usr/local/texlive/2016/texmf-var/luatex-cache/generic/fonts/ot +l/lmsans10-regular.luc)(load luc: /home/chupin/.texlive2016/texmf-var/luatex-cac +he/generic/fonts/otl/lmsans10-regular.luc)) +\tipaTiiicode=\count144 +\tipasavetokens=\toks32 +\tipachecktokens=\toks33 +) +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \__fontspec_post_arg:w with sig. 'mmO{}' on line 356. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \fontspec with sig. 'om' on line 358. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \setmainfont with sig. 'om' on line 368. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \setsansfont with sig. 'om' on line 378. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \setmonofont with sig. 'om' on line 388. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \setmathrm with sig. 'om' on line 402. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \setboldmathrm with sig. 'om' on line 410. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \setmathsf with sig. 'om' on line 418. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \setmathtt with sig. 'om' on line 426. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \newfontfamily with sig. 'mom' on line 440. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \newfontface with sig. 'mom' on line 456. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \defaultfontfeatures with sig. 't+om' on line 470. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \addfontfeatures with sig. 'm' on line 533. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \newfontfeature with sig. 'mm' on line 544. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \newAATfeature with sig. 'mmmm' on line 552. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \newopentypefeature with sig. 'mmm' on line 560. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \aliasfontfeature with sig. 'mm' on line 581. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \aliasfontfeatureoption with sig. 'mmm' on line 590. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \newfontscript with sig. 'mm' on line 594. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \newfontlanguage with sig. 'mm' on line 598. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \DeclareFontsExtensions with sig. 'm' on line 603. +................................................. +\l__fontspec_tmp_int=\count145 + +(/usr/local/texlive/2016/texmf-dist/tex/latex/fontspec/fontspec.cfg) +LaTeX Info: Redefining \itshape on input line 2629. +LaTeX Info: Redefining \slshape on input line 2634. +LaTeX Info: Redefining \scshape on input line 2639. +LaTeX Info: Redefining \upshape on input line 2644. +\l__fontspec_em_int=\count146 +\l__fontspec_emdef_int=\count147 +LaTeX Info: Redefining \em on input line 2660. +LaTeX Info: Redefining \emph on input line 2666. +LaTeX Info: Redefining \- on input line 2670. +................................................. +. LaTeX info: "xparse/redefine-command" +. +. Redefining command \oldstylenums with sig. 'm' on line 2765. +................................................. +................................................. +. LaTeX info: "xparse/define-command" +. +. Defining command \liningnums with sig. 'm' on line 2769. +................................................. +)) +(/usr/local/texlive/2016/texmf-dist/tex/latex/multido/multido.sty +Package: multido 2004/05/17 package wrapper for PSTricks `multido.tex', (HV/RN) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/multido/multido.tex + v1.42, 2010/05/14 +\multido@count=\count148 +\multidocount=\count149 +\multido@stuff=\toks34 +) +File: multido.tex 2010/05/14 v1.42 `multido' (tvz,hv) +) (./delaunay.aux) +\openout1 = delaunay.aux + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for EU2/lmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T3/cmr/m/n on input line 8. +LaTeX Font Info: Try loading font information for T3+cmr on input line 8. + +(/usr/local/texlive/2016/texmf-dist/tex/latex/tipa/t3cmr.fd +File: t3cmr.fd 2001/12/31 TIPA font definitions +) +LaTeX Font Info: ... okay on input line 8. + +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(71.13188pt, 472.03123pt, 71.13188pt) +* v-part:(T,H,B)=(71.13188pt, 652.70622pt, 71.13188pt) +* \paperwidth=614.295pt +* \paperheight=794.96999pt +* \textwidth=472.03123pt +* \textheight=652.70622pt +* \oddsidemargin=-1.1381pt +* \evensidemargin=-1.1381pt +* \topmargin=-38.1381pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=10.0pt +* \footskip=30.0pt +* \marginparwidth=65.0pt +* \marginparsep=11.0pt +* \columnsep=10.0pt +* \skip\footins=9.0pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +(/usr/local/texlive/2016/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count150 +\scratchdimen=\dimen193 +\scratchbox=\box54 +\nofMPsegments=\count151 +\nofMParguments=\count152 +\everyMPshowfont=\toks35 +\MPscratchCnt=\count153 +\MPscratchDim=\dimen194 +\MPnumerator=\count154 +\makeMPintoPDFobject=\count155 +\everyMPtoPDFconversion=\toks36 +) (/usr/local/texlive/2016/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf + +(/usr/local/texlive/2016/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty +Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) +)) +(/usr/local/texlive/2016/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty +Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/etexcmds.sty +Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) + +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ifluatex.sty +Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX detected. +)))) +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty +Package: pdftexcmds 2016/05/21 v0.22 Utility functions of pdfTeX for LuaTeX (HO) + +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. + +(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/luatex-loader.sty +Package: luatex-loader 2016/05/16 v0.6 Lua module loader (HO) + +(/usr/local/texlive/2016/texmf-dist/scripts/oberdiek/oberdiek.luatex.lua)) +\pdftexcmds@toks=\toks37 +) +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 43 +8. +Package grfext Info: Graphics extension search list: +(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPEG +,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 456. + +(/usr/local/texlive/2016/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live + +)) +ABD: EveryShipout initializing macros +................................................. +. fontspec info: "setup-math" +. +. Adjusting the maths setup (use [no-math] to avoid this). +................................................. +\symlegacymaths=\mathgroup4 +LaTeX Font Info: Overwriting symbol font `legacymaths' in version `bold' +(Font) OT1/cmr/m/n --> OT1/cmr/bx/n on input line 8. +LaTeX Font Info: Redeclaring math accent \acute on input line 8. +LaTeX Font Info: Redeclaring math accent \grave on input line 8. +LaTeX Font Info: Redeclaring math accent \ddot on input line 8. +LaTeX Font Info: Redeclaring math accent \tilde on input line 8. +LaTeX Font Info: Redeclaring math accent \bar on input line 8. +LaTeX Font Info: Redeclaring math accent \breve on input line 8. +LaTeX Font Info: Redeclaring math accent \check on input line 8. +LaTeX Font Info: Redeclaring math accent \hat on input line 8. +LaTeX Font Info: Redeclaring math accent \dot on input line 8. +LaTeX Font Info: Redeclaring math accent \mathring on input line 8. +LaTeX Font Info: Redeclaring math symbol \colon on input line 8. +LaTeX Font Info: Redeclaring math symbol \Gamma on input line 8. +LaTeX Font Info: Redeclaring math symbol \Delta on input line 8. +LaTeX Font Info: Redeclaring math symbol \Theta on input line 8. +LaTeX Font Info: Redeclaring math symbol \Lambda on input line 8. +LaTeX Font Info: Redeclaring math symbol \Xi on input line 8. +LaTeX Font Info: Redeclaring math symbol \Pi on input line 8. +LaTeX Font Info: Redeclaring math symbol \Sigma on input line 8. +LaTeX Font Info: Redeclaring math symbol \Upsilon on input line 8. +LaTeX Font Info: Redeclaring math symbol \Phi on input line 8. +LaTeX Font Info: Redeclaring math symbol \Psi on input line 8. +LaTeX Font Info: Redeclaring math symbol \Omega on input line 8. +LaTeX Font Info: Redeclaring math symbol \mathdollar on input line 8. +LaTeX Font Info: Redeclaring symbol font `operators' on input line 8. +LaTeX Font Info: Encoding `OT1' has changed to `EU2' for symbol font +(Font) `operators' in the math version `normal' on input line 8. +LaTeX Font Info: Overwriting symbol font `operators' in version `normal' +(Font) OT1/cmr/m/n --> EU2/lmr/m/n on input line 8. +LaTeX Font Info: Encoding `OT1' has changed to `EU2' for symbol font +(Font) `operators' in the math version `bold' on input line 8. +LaTeX Font Info: Overwriting symbol font `operators' in version `bold' +(Font) OT1/cmr/bx/n --> EU2/lmr/m/n on input line 8. +LaTeX Font Info: Overwriting symbol font `operators' in version `normal' +(Font) EU2/lmr/m/n --> EU2/lmr/m/n on input line 8. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' +(Font) OT1/cmr/m/it --> EU2/lmr/m/it on input line 8. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' +(Font) OT1/cmr/bx/n --> EU2/lmr/bx/n on input line 8. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal' +(Font) OT1/cmss/m/n --> EU2/lmss/m/n on input line 8. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal' +(Font) OT1/cmtt/m/n --> EU2/lmtt/m/n on input line 8. +LaTeX Font Info: Overwriting symbol font `operators' in version `bold' +(Font) EU2/lmr/m/n --> EU2/lmr/bx/n on input line 8. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' +(Font) OT1/cmr/bx/it --> EU2/lmr/bx/it on input line 8. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold' +(Font) OT1/cmss/bx/n --> EU2/lmss/bx/n on input line 8. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' +(Font) OT1/cmtt/m/n --> EU2/lmtt/bx/n on input line 8. +(compiling luc: /usr/local/texlive/2016/texmf-var/luatex-cache/generic/fonts/otl +/lmroman7-regular.luc)(load luc: /home/chupin/.texlive2016/texmf-var/luatex-cach +e/generic/fonts/otl/lmroman7-regular.luc)(compiling luc: /usr/local/texlive/2016 +/texmf-var/luatex-cache/generic/fonts/otl/lmroman5-regular.luc)(load luc: /home/ +chupin/.texlive2016/texmf-var/luatex-cache/generic/fonts/otl/lmroman5-regular.lu +c) +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 1. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 1. +Module luamplib Info: flushing figure 1 on input line 1 +Module luamplib Info: flushing figure 1 on input line 1 +Module luamplib Info: flushing figure 1 on input line 1 +Module luamplib Info: flushing figure 1 on input line 1 +Module luamplib Info: flushing figure 1 on input line 1 + [1 + +{/usr/local/texlive/2016/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] +Module luamplib Info: flushing figure 1 on input line 1 + [2] +Module luamplib Info: flushing figure 1 on input line 1 + [3] +Module luamplib Info: flushing figure 1 on input line 1 + [4] +Module luamplib Info: flushing figure 1 on input line 1 + [5] +Module luamplib Info: flushing figure 1 on input line 1 + [6] +Module luamplib Info: flushing figure 1 on input line 1 + [7] +Module luamplib Info: flushing figure 1 on input line 1 + [8] +Module luamplib Info: flushing figure 1 on input line 1 + [9] +Module luamplib Info: flushing figure 1 on input line 1 + +[10] (./delaunay.aux)) + +Here is how much of LuaTeX's memory you used: + 25566 strings out of 495118 + 125171,552014 words of node,token memory allocated + 396 words of node memory still in use: + 3 hlist, 1 vlist, 1 rule, 7 glue, 4 attribute, 44 glue_spec, 4 attribute_list +, 1 write nodes + avail lists: 1:3,2:642,3:723,4:5,5:14,6:75,7:232,8:2,9:154 + 28465 multiletter control sequences out of 65536+600000 + 31 fonts using 2114151 bytes + 62i,5n,56p,2237b,365s stack positions out of 5000i,500n,10000p,200000b,100000s + +Output written on delaunay.pdf (10 pages, 25488 bytes). + +PDF statistics: 46 PDF objects out of 1000 (max. 8388607) + 31 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 131072) + 16 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/test/delaunay.pdf b/test/delaunay.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b1232eef476e30e47123324bf3ebe5cf5dcf6448 GIT binary patch literal 25488 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

TbdOx z3cwXMI#rL&dJ1zA{cA-U=dl%rnS6bEJku-cNV8JaY%9AgFP0sDMR=gH%=>TN;r|VY zrR)SXb2T-0qF|7BHC8v*W&yJDf?0t8HppN2y9@Mh|KHC4+p>n*i~j}0Q!t40u>(O| zAP_r{ode7Z<~8QtJN;llyOec6AR2b2cTD zuWBxKY>E^dpubjiCubK5c6P4+XJcpoU&8z5QZ{T>fFA}ouC-RT2dor@SZaXkKN)gj`o2xN>&8;qpvXtk)HM)T9#uS3A!kRDnCpPO!46Y8BQ>sr20yWkz+ZbN78ufDYAT8wSGbuF&=TZ_mOyMmZ4ghCcQJxa!F`JB z@U~Z84)7smY5o#qC|DzaJ(E6Y--YQ*EGuob1|fZ9|HfR>RYdxa@5Y9?HN8!Y7TFqAgIzw{40O^GW}{8_2S0uwtgoXR(THG`9ox(-?mDdixKk(fC zQEZkkR@j?r%pN}taUqX)bXYj2c%!_AupfNULu7fjzenH|6A z@OXA$)#9;`@>?G=Iom@R&BGYJ&={7iShDi0o573?2RyG{BA^L6vx#8A z-8)a+^Br3SR^K-x?oQ-@=7y-6B?I2-7$4@r3X7Er0n=Rr@Yh-OP%h0yje6djy2tU3 zKVvRx%QfCj_+C1fP^UCW`Tu4w_&1vEf8>p}s<{Q5jJ=t;yB?5&llw1W-`dmsZ-q@u z4@ALE0Wx4yg+g5@IR8b#QT-ce0j1#l*M9Q1F0Lma0pS*tfPi=;Nd#hKIB>(?&>g;0d X