Hi Hraban, On Sun, 2024-06-09 at 22:12 +0200, Henning Hraban Ramm wrote:
when I define a measure on the TeX side, I used to get at the value in Lua with tex.getdim, like:
\definemeasure[Bleed][3mm]
tex.getdimen("Bleed")
But now I get "incorrect dimen name". I need it as a dimension, since I do calculations with other dimensions like "topspace".
How should I do this correctly?
There doesn't appear to be any official interfaces to get the value of a measure from Lua, but the following should work okay: \definemeasure[mymeasure][10pt] \newdimen\mydimen \mydimen=10pt \definemeasure[measureexpr][1in + 27.73pt] \startluacode -- Returns the unexpanded value of some variable in a namespace. local function get_variable(namespace, variable) -- -- Doesn't work since "measure" is defined as a "system namespace". -- namespace = interfaces.getnamespace(namespace) namespace = tokens.getters.macro("??" .. namespace) return tokens.getters.macro(namespace .. variable) end -- Gets the value of a measure and converts it to an integer in sp units. local function get_measure(name) return tex.sp(get_variable("measure", name)) end -- Gets the \dimexpr-evaluated value of a measure, in sp units. local function get_measure_expr(name) local namespace = tokens.getters.macro("??measure") -- Undocumented, but seems to work as expected. return tex.getdimensionvalue(namespace .. name) end -- Print the values of the lengths. print(("="):rep(80)) print("mymeasure:" , get_measure("mymeasure") ) print("mydimen:" , tex.dimen["mydimen"] ) print("measureexpr:", get_measure_expr("measureexpr")) print(("="):rep(80)) \stopluacode \startTEXpage \measure{mymeasure} \the\mydimen \measure{measureexpr} \stopTEXpage Thanks, -- Max