Getting dimensions in Lua
![](https://secure.gravatar.com/avatar/23c65792d6f3eb5f6194f6ec9eadc2ac.jpg?s=120&d=mm&r=g)
Hi, list. I want to get some dimensions in Lua. See, for instance \starttext \the\dimexpr\availablehsize\relax %say, 426pt \stoptext Is there an equivalent in ConTeXt for Lua, i.e. without passing values from TeX or, at least, using only Lua commands? Thank you in advance. Best wishes, Jairo
![](https://secure.gravatar.com/avatar/46562c7d27388490d62e8d7a5bc960dd.jpg?s=120&d=mm&r=g)
On 1/18/2021 1:58 AM, Jairo A. del Rio wrote:
Hi, list.
I want to get some dimensions in Lua. See, for instance
\starttext
\the\dimexpr\availablehsize\relax %say, 426pt
\stoptext
Is there an equivalent in ConTeXt for Lua, i.e. without passing values from TeX or, at least, using only Lua commands? Thank you in advance. tex being tex, there is always a way ...
1: \number\dimexpr\availablehsize\relax 2: \startluacode token.set_macro(tex.ctxcatcodes,"temp","\\scratchdimen\\availablehsize") token.expand_macro("temp") context(tex.getdimen("scratchdimen")) \stopluacode 3: \startluacode token.set_macro(tex.ctxcatcodes,"temp","\\scratchdimen\\availablehsize") tex.runlocal("temp") context(tex.getdimen("scratchdimen")) \stopluacode 4: \startluacode tex.print("\\scratchdimen\\availablehsize") tex.pushlocal() tex.poplocal() context(tex.getdimen("scratchdimen")) \stopluacode 5: \startluacode tex.print("\\dimensiondef\\temp\\availablehsize") tex.pushlocal() tex.poplocal() context(tex.getdimensionvalue("temp")) \stopluacode \def\calculateavailablehsize{\dimensiondef\temp\availablehsize} 6: \startluacode token.expand_macro("calculateavailablehsize") context(tex.getdimensionvalue("temp")) \stopluacode \newtoks\tcalculateavailablehsize \tcalculateavailablehsize{\dimensiondef\temp\availablehsize} 7: \startluacode -- mkiv tex.runtoks("tcalculateavailablehsize") context(tex.getdimensionvalue("temp")) \stopluacode i'm (still) considering a way to flag a macro to be an expression (or value) but there are several variants possible but normally it takes a while before i decide what makes most sense (as i need to apply it in real code to see if it looks nice) 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 -----------------------------------------------------------------
![](https://secure.gravatar.com/avatar/d4db251f6da966f841fc5b1a9822eb56.jpg?s=120&d=mm&r=g)
On 18 Jan 2021, at 10:45, Hans Hagen
wrote: On 1/18/2021 1:58 AM, Jairo A. del Rio wrote:
Hi, list. I want to get some dimensions in Lua. See, for instance \starttext \the\dimexpr\availablehsize\relax %say, 426pt \stoptext Is there an equivalent in ConTeXt for Lua, i.e. without passing values from TeX or, at least, using only Lua commands? Thank you in advance. tex being tex, there is always a way ...
There is also this option: % function returns scaled points \startluacode function availablehsize() local l = tex.dimen.hsize - tex.skip.leftskip.width - tex.skip.rightskip.width if tex.count.hangafter<0 then local h = tex.dimen.hangindent if h>0 then l = l - h else l = l + h end end return l end \stopluacode But I suspect that there are multiple cases where this does not work (like when used in horizontal mode, for example if the par setting changes before the \par is seen, or when there is data in the local par node) Best wishes, Taco — Taco Hoekwater E: taco@bittext.nl genderfluid (all pronouns)
![](https://secure.gravatar.com/avatar/23c65792d6f3eb5f6194f6ec9eadc2ac.jpg?s=120&d=mm&r=g)
Woah, nice! I was trying to pass some values to MetaPost via Lua (usual laziness to learn macro languages). Thank you a lot, especially because I was looking at the wrong functions in the token namespace. I'll upload a more specific example soon while I polish some code. Very thankful. Jairo :) El lun, 18 de ene. de 2021 a la(s) 05:02, Taco Hoekwater (taco@bittext.nl) escribió:
On 18 Jan 2021, at 10:45, Hans Hagen
wrote: On 1/18/2021 1:58 AM, Jairo A. del Rio wrote:
Hi, list. I want to get some dimensions in Lua. See, for instance \starttext \the\dimexpr\availablehsize\relax %say, 426pt \stoptext Is there an equivalent in ConTeXt for Lua, i.e. without passing values from TeX or, at least, using only Lua commands? Thank you in advance. tex being tex, there is always a way ...
There is also this option:
% function returns scaled points \startluacode function availablehsize() local l = tex.dimen.hsize - tex.skip.leftskip.width - tex.skip.rightskip.width if tex.count.hangafter<0 then local h = tex.dimen.hangindent if h>0 then l = l - h else l = l + h end end return l end \stopluacode
But I suspect that there are multiple cases where this does not work (like when used in horizontal mode, for example if the par setting changes before the \par is seen, or when there is data in the local par node)
Best wishes, Taco
— Taco Hoekwater E: taco@bittext.nl genderfluid (all pronouns)
![](https://secure.gravatar.com/avatar/23c65792d6f3eb5f6194f6ec9eadc2ac.jpg?s=120&d=mm&r=g)
To be wikified (by me, obviously). Thank you for such a great number of alternatives. Jairo :) El lun, 18 de ene. de 2021 a la(s) 04:45, Hans Hagen (j.hagen@xs4all.nl) escribió:
On 1/18/2021 1:58 AM, Jairo A. del Rio wrote:
Hi, list.
I want to get some dimensions in Lua. See, for instance
\starttext
\the\dimexpr\availablehsize\relax %say, 426pt
\stoptext
Is there an equivalent in ConTeXt for Lua, i.e. without passing values from TeX or, at least, using only Lua commands? Thank you in advance. tex being tex, there is always a way ...
1: \number\dimexpr\availablehsize\relax
2: \startluacode
token.set_macro(tex.ctxcatcodes,"temp","\\scratchdimen\\availablehsize") token.expand_macro("temp") context(tex.getdimen("scratchdimen")) \stopluacode
3: \startluacode
token.set_macro(tex.ctxcatcodes,"temp","\\scratchdimen\\availablehsize") tex.runlocal("temp") context(tex.getdimen("scratchdimen")) \stopluacode
4: \startluacode tex.print("\\scratchdimen\\availablehsize") tex.pushlocal() tex.poplocal() context(tex.getdimen("scratchdimen")) \stopluacode
5: \startluacode tex.print("\\dimensiondef\\temp\\availablehsize") tex.pushlocal() tex.poplocal() context(tex.getdimensionvalue("temp")) \stopluacode
\def\calculateavailablehsize{\dimensiondef\temp\availablehsize}
6: \startluacode token.expand_macro("calculateavailablehsize") context(tex.getdimensionvalue("temp")) \stopluacode
\newtoks\tcalculateavailablehsize \tcalculateavailablehsize{\dimensiondef\temp\availablehsize}
7: \startluacode -- mkiv tex.runtoks("tcalculateavailablehsize") context(tex.getdimensionvalue("temp")) \stopluacode
i'm (still) considering a way to flag a macro to be an expression (or value) but there are several variants possible but normally it takes a while before i decide what makes most sense (as i need to apply it in real code to see if it looks nice)
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 (3)
-
Hans Hagen
-
Jairo A. del Rio
-
Taco Hoekwater