[luatex] Manipulating arguments

Joseph Wright joseph.wright at morningstar2.co.uk
Thu Aug 13 09:31:20 CEST 2009


Taco Hoekwater wrote:
> Joseph Wright wrote:
>> Hello all,
>>
>> A couple of things have come up on the LaTeX-L list (readers of that
>> list will soon spot where) that I'd like to get a feel of in a LuaTeX
>> context. Both are to do with arguments.
>>
>> 1) How does Lua affect TeX argument parsing.  
> 
> Nothing much has changed at all (yet), we have been focusing on
> completely different things than the input macro language.
> 
>> Is it possible, for
>> example, to use LuaTeX to allow the currently impossible LaTeX:
>>
>> \footnote{\verb|%|}
> 
> Not really.
> 
> You can read input one token at a time using lua, but that only
> assigns catcodes when luatex is reading a file at that time.
> Inside a token list like a macro argument, the lua get_next
> function just receives the next token in the list.
> 
> What you could do is apply preprocessing to the input stream before
> catcodes are even assigned, but at that point it is just a line of
> bytes and you would have to do all parsing yourself. That solution
> is comparable to running an external preprocessor (and equally hard).
> 
>> 2) Can Lua be used to replace numbered arguments with names ones (at
>> least when delimited argument are not needed):
>>
>> \def\foo #text{Stuff using #text}
> 
> Not really (again).
> 
> You could parse this with lua by redefining \def to read one token
> at a time until the end of the macro body is reached, but that you
> have to convert it back to a string with #1's in it to feed it back
> into the 'real' \def.
> 
> If we ever support this directly, it will be either in the macro
> language itself via a direct extension to the \def command, or by
> having a pure lua method of defining control sequences, more like
> this:
> 
>   function do_stuff (text)
>      tex.print ("Stuff using " .. text)
>   end
> 
>   tex.define('foo',
>              'macro',  -- the command code
>              { {["param"] = "text"} }, -- the argument mapping
>              do_stuff}  -- the macro body
> 
> (argument mapping needs careful designing)
> 
> 
>> (A bonus question for people with the correct knowledge: is ConTeXt Mark
>> IV still using TeX to do basic parsing of input at the user level, or
> 
> Yes.
> 
> Best wishes,
> Taco
> 

Hello Taco,

Thanks for the quick reply.  My reading of the LuaTeX stuff I've read
made me suspect that, but I was not sure if I'd missed something. (The
reason for the questions was that it's been suggested to write LaTeX3 as
a pre-parser in a scripting language with TeX reserved purely for
typesetting. So I wondered if anyone had tried to do something similar
in Lua.)
-- 
Joseph Wright


More information about the luatex mailing list