On Sat, 20 Mar 2021, Hans Hagen wrote: > On 3/20/2021 4:00 PM, Christoph Reller wrote: > > On Sat, Mar 20, 2021 at 12:12 PM Hans Hagen > > wrote: > > > > On 3/20/2021 8:24 AM, Aditya Mahajan wrote: > > > On Sat, 20 Mar 2021, Christoph Reller wrote: > > >> Of course we can do this in lua: > > >> > > >> if tex.modes["A"] and not tex.modes{"B"] then > > >> ... > > >> end > > > > > > ... which means that you can use that at the context end as well > > (old feature). > > > Save the following as test.mkix (or add "% macros=mkix" as the > > first line): > > > > > > ``` > > > \starttext > > > > > > \starttyping > > > A and not B > > > \stoptyping > > > > > > \starttyping > > > not (A and not B) > > > \stoptyping > > > > > > \stoptext > > a neat application! > > > > > > Thank you for this hint, Aditya. This would be a very nice solution > > indeed. But it does not seem to work: > > > > % macros=mkix > > \definemode[A][yes] > > \starttext > > \startluacode > >   if tex.modes['A'] then > >     context("A") > >   end > > \stopluacode > > > > A > > > > \stoptext > > > > With ConTeXt LMTX 2021.03.17 the output of the above is a single "A". I > > would expect two. What am I doing wrong? > > When the file gets preprocessed the mode is not known > > context --mode=A foo.tex > > it does of course also work when you set the mode in a parent file and > then include foo.tex I wonder if we could have an environment, say \startluatemplate ... \stopluatemplate, which is evaluated on the fly rather than when loading a file. Aditya