Hi, list! I'm doing the following to scale squares and other stuff in MetaPost/MetaFun. Although the following kinda works (maybe I'm just lucky with this), I want to know how to do a better piece from it. I'm concerned with passing data from Lua and TeX to Metapost and better ways to do it in ConTeXt. Thank you in advance. \starttext My text \startMPinitializations numeric myunit; myunit := \the\dimexpr1em\relax; \stopMPinitializations \startluacode userdata = userdata or {} userdata.dummydata = { {1, 2}, {3, 4} } context.startMPcode() for j=1,#userdata.dummydata do for i=1,#userdata.dummydata[1] do context("draw unitsquare scaled myunit shifted ((%d,%d)*myunit);", userdata.dummydata[i][j], userdata.dummydata[i][j]) end end context.stopMPcode() \stopluacode \stoptext Jairo :)
On 8/9/2020 5:39 PM, Jairo A. del Rio wrote:
Hi, list! I'm doing the following to scale squares and other stuff in MetaPost/MetaFun. Although the following kinda works (maybe I'm just lucky with this), I want to know how to do a better piece from it. I'm concerned with passing data from Lua and TeX to Metapost and better ways to do it in ConTeXt. Thank you in advance.
\starttext My text
\startMPinitializations numeric myunit; myunit := \the\dimexpr1em\relax; \stopMPinitializations \startluacode
userdata = userdata or {} userdata.dummydata = { {1, 2}, {3, 4} }
context.startMPcode()
for j=1,#userdata.dummydata do for i=1,#userdata.dummydata[1] do context("draw unitsquare scaled myunit shifted ((%d,%d)*myunit);", userdata.dummydata[i][j], userdata.dummydata[i][j]) end end
context.stopMPcode()
\stopluacode \stoptext Something:
\starttext \startluacode userdata = userdata or {} userdata.dummydata = { {1, 2}, {3, 4} } function MP.GetI() mp.print(#userdata.dummydata) end function MP.GetJ(i) mp.print(#userdata.dummydata[i]) end function MP.GetIJ(i,j) mp.pair(userdata.dummydata[i][j],userdata.dummydata[i][j]) end \stopluacode \startMPcode numeric myunit ; myunit := EmWidth; for i = 1 upto lua.MP.GetI() : for j = 1 upto lua.MP.GetJ(i) : draw unitsquare scaled myunit shifted (myunit * (lua.MP.GetIJ(i,j))); endfor ; endfor ; \stopMPcode \stoptext There are of course also other ways but this is more educational as start. Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Oh, thank you a lot, Hans, that's a really cleaner way than mine. One more question, is there something similar to EmWidth for \textwidth or \linewidth? Better, a better way to access TeX dimensions? Thank you again. Jairo :) El dom., 9 de ago. de 2020 a la(s) 12:46, Hans Hagen (j.hagen@xs4all.nl) escribió:
On 8/9/2020 5:39 PM, Jairo A. del Rio wrote:
Hi, list! I'm doing the following to scale squares and other stuff in MetaPost/MetaFun. Although the following kinda works (maybe I'm just lucky with this), I want to know how to do a better piece from it. I'm concerned with passing data from Lua and TeX to Metapost and better ways to do it in ConTeXt. Thank you in advance.
\starttext My text
\startMPinitializations numeric myunit; myunit := \the\dimexpr1em\relax; \stopMPinitializations \startluacode
userdata = userdata or {} userdata.dummydata = { {1, 2}, {3, 4} }
context.startMPcode()
for j=1,#userdata.dummydata do for i=1,#userdata.dummydata[1] do context("draw unitsquare scaled myunit shifted ((%d,%d)*myunit);", userdata.dummydata[i][j], userdata.dummydata[i][j]) end end
context.stopMPcode()
\stopluacode \stoptext Something:
\starttext
\startluacode
userdata = userdata or {} userdata.dummydata = { {1, 2}, {3, 4} }
function MP.GetI() mp.print(#userdata.dummydata) end function MP.GetJ(i) mp.print(#userdata.dummydata[i]) end function MP.GetIJ(i,j) mp.pair(userdata.dummydata[i][j],userdata.dummydata[i][j]) end
\stopluacode
\startMPcode numeric myunit ; myunit := EmWidth; for i = 1 upto lua.MP.GetI() : for j = 1 upto lua.MP.GetJ(i) : draw unitsquare scaled myunit shifted (myunit * (lua.MP.GetIJ(i,j))); endfor ; endfor ; \stopMPcode
\stoptext
There are of course also other ways but this is more educational as start.
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 8/9/2020 8:03 PM, Jairo A. del Rio wrote:
Oh, thank you a lot, Hans, that's a really cleaner way than mine. One more question, is there something similar to EmWidth for \textwidth or \linewidth? Better, a better way to access TeX dimensions? Thank you again. When you grep for EmWidth ...
LineWidth TextWidth and plenty more like that Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Nice, I'm reading results right now. Thank you a lot, Hans. Jairo :) El dom., 9 de ago. de 2020 a la(s) 13:05, Hans Hagen (j.hagen@xs4all.nl) escribió:
On 8/9/2020 8:03 PM, Jairo A. del Rio wrote:
Oh, thank you a lot, Hans, that's a really cleaner way than mine. One more question, is there something similar to EmWidth for \textwidth or \linewidth? Better, a better way to access TeX dimensions? Thank you again. When you grep for EmWidth ...
LineWidth TextWidth
and plenty more like that
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
participants (2)
-
Hans Hagen
-
Jairo A. del Rio