[luatex] First (optional?) arguments of tex.getcount and friends.

Paul Isambert zappathustra at free.fr
Tue May 10 16:40:12 CEST 2011



Le 10/05/2011 16:32, Dirk Laurie a écrit :
> On Tue, May 10, 2011 at 03:44:48PM +0200, Taco Hoekwater wrote:
>> On 05/10/2011 03:42 PM, Paul Isambert wrote:
>>> Hello all,
>>>
>>> I have noticed that the function tex.getcount() and similar can take any
>>> number of arguments and ignore them all but the last. E.g.:
>>>
>>> \directlua{
>>> texio.write_nl(tex.getcount("a string", nothing, node.new(11), 55, 0))
>>> }
>>>
>>> returns "1", i.e. the value of count 0, ignoring the string, the nil
>>> value, the node, and the number.
>>>
>>> Is that normal? Am I missing something? My LuaTeX is 0.71.
>> I am not surprised: lua pushes the arguments on a stack, and then the
>> getcount function takes the topmost entry. I could add an explicit
>> test for the number of arguments, but that is a bit of wasted effort,
>> in Hans' and my opinion.
> It is normal in Lua to ignore any extra arguments, but functions written
> in Lua that use only one argument would ignore all except the _first_.
> It is easy to achieve that from C too: the Lua manual says:
>      More specifically, if the stack has n elements, then index 1
>      represents the first element (that is, the element that was
>      pushed onto the stack first) and index n represents the last
>      element; index -1 also represents the last element (that is,
>      the element at the top) and index -n represents the first element.
> So it's a question of using index 1 instead of index -1.
>
> But should we be using the function tex.getcount()?  It is not documented
> in luatexref-t.pdf (at least, my PDF viewer's search function does not
> find it).  Since even documented functions “can (and will) be changed
> without prior notice”, aren't undocumented ones not even more dangerous?

The function is documented implicitly with tex.getskip(). The 
documentation reads (section 4.13.4):

``As an alternative to array addressing, there are also accessor 
functions defined for all cases, for example, here is the set of 
possibilities for \skip registers: [examples of tex.setskip() and 
tex.getskip()]''

Best,
Paul


More information about the luatex mailing list