On Tue, 13 Oct 2020, Pablo Rodriguez wrote: > Dear list, > > I have the following sample: > > \starttext > \def\numbersfname > {\cldcontext{string.match([[\env{fname}]], "\letterpercent d+")}} > \ctxlua{ c = context.getvariable("environment", "fname") or "a" } > \ctxlua{ d = [[\env{fname}]] } > > tex: \numbersfname\\ > \doifelse{} > {123}{yes}{no}\\ > c: \cldcontext{c}\\ > \doifelse{\cldcontext{c:match("\letterpercent d+")}} > {123}{yes}{no}\\ > d: \cldcontext{d}\\ > \doifelse{\cldcontext{d:match("\letterpercent d+")}} > {123}{yes}{no} > \stoptext > > For compilation, I run the command: > > context --purgeall --arguments=fname={abc123} test-file.tex > > These things are failing: > > 1. I don’t know how to get \numbersfname equal to "123". I don’t know > what I’m doing wrong. > > 2. Is there no Lua version of \getvariable{...}{...}? > > 3. I’m trying this on a Linux box, but on Windows I would say that Lua > variable "d" is empty. > > I need to get the number from \env{fname} and I don’t know what I’m > missing. \doif is the way to test whether it’s right. > > Could anyone explain me what I’m missing here? I find it simpler to write macros where there is clean communicating between tex and lua. For example: \startluacode userdata = userdata or {} function userdata.numbersfname(name) return string.match(name, "%d+") end \stopluacode \define[1]\numbersfname {\cldcontext{userdata.numbersfname([==[#1]==])}} \starttext \numbersfname{abc123} \numbersfname{\env{fname}} \stoptext Aditya