Date:
Tue, 19 Aug 2014 21:58:28 +0200
MIME-Version:
1.0
Content-Type:
text/plain; charset=UTF-8
|
On 8/19/14, Stephan Hennig <[log in to unmask]> wrote:
> Am 19.08.2014 um 19:21 schrieb Heiko Oberdiek:
>
>>> \ExplSyntaxOn
>>> \directlua{
>>> local myarg = '\mymacro'
>>> texio.write_nl('l3: argument is ' .. tostring(myarg))
>>> }
>>> [...]
>>> First, spaces are gone in Lua code. Though, spaces are significant in
>>> Lua.
>>
>> `\ExplSyntaxOn' says that spaces are gone, that's the purpose of this
>> command. Explicit spaces are available via `~':
>
> Have already seen that when using l3's message mechanism, but didn't try
> in \directlua. Thanks!
>
>
>>> Second, variable myarg is nil with \ExplSyntaxOn. (I don't understand
>>> why.)
>>
>> Without spaces you get:
>>
>> localmyarg='\mymacro'
>
> Should have seen that by myself. Thanks again!
>
>
>> BTW, this is quite a risky way to pass the contents of user variables ot
>> Lua code. Consider syntax errors, if "\mymacro" contains ', or
>> "\mymacro" could even contain containing something like:
>> '; very evil code; local dummy='
>>
>> There is \luaescapestring/\luatexluaescapestring:
>>
>> '\luatexluaescapestring{\mymacro}'
>
> It's actually a language string that I'm evaluating to a number via
>
> \the\csname l@#1\endcsname or
> \int_use:N\cs:w l@#1\cs_end: in LaTeX3
>
> If #1 contains no valid language identifier, the expression should throw
> an error. So, I think I'm safe here. I'm indeed using \luaescapestring
> in other circumstances.
>
> Thanks!
> Stephan Hennig
Avoid using \cs:w ... \cs_end: constructions. It is much better to
use a c-type argument, so for your case, \int_use:c { l@#1 }.
Regards,
Bruno
|
|
|