On 10/28/11 08:44, Patrick Gundlach wrote:
context.blackrule{ width = number.topoints(tex.dimen["textwidth"]/2) }
or just tex.dimen["textwidth"]/2 .. "sp"
Wait, just so I understand: your solution would imply that tex.dimen["textwidth"] holds a number, not a dimension, right? (Because you simply concatenate it with a dimension unit). Which makes sense when I think of it because lua has no concept of dimensions, only of strings, functions, tables, numbers... Whereas the Wolfgang implies that the result is already in sp. So who's right?
both :)
tex.dimen holds a number, that is the size in points, multiplied by 65536/1pt, so for example 3pt becomes
3pt * 65536 ----------- = 3 * 65536 = 196608 1pt
This number is also known "sp". So if you store the number 3*65536 in tex.dimen[...], you can say:
my width is \directlua{ tex.dimen[...] / 2}sp (results to "my width is 196608sp", which you can use as an argument to whatever needs a length)
or
my width is \directlua{ number_to_points(tex.dimen[...]) } where number_to_points is something like
number_to_points = function (amount_in_sp) in_pt = tostring(amount_in_sp / 65536) return in_pt .. "pt" end
which gives "3pt".
Patrick
Luigi, Patrick, thanks for your explanations! The point of my question was: can I feed the content of tex.dimen["textwidth"] directly back to TeX, and the answer to this appears to be "no"; you need to add some unit to it (otherwise, you get an error message). Which was a bit confusing to me at first, because the name tex.dimen implies that it holds a "real" dimension, like \newdim does. Thomas