[NTG-context] Typing within doifmode leads to error

Christoph Reller christoph.reller at gmail.com
Sat Mar 20 06:24:03 CET 2021


On Fri, Mar 19, 2021 at 9:49 AM Hans Hagen <j.hagen at xs4all.nl> wrote:

> On 3/19/2021 4:58 AM, Christoph Reller wrote:
> > Hi,
> >
> > Consider the following MWE:
> >
> > \definetyping[T]
> > \definemode[mode][yes]
> > \starttext
> > \doifmode{mode}{%
> >    \startT
> >      Bla
> >    \stopT}
> > \stoptext
> >
> > Compilation with the currently latest ConTeXt LMTX (ver: 2021.03.17
> > 17:46 LMTX  fmt: 2021.3.18) fails with:
> >
> > tex error       > runaway error: end of file encountered
> > mtx-context     | fatal error: return code: 1
> >
> > Compilation is successful if I replace doifmode{mode}{...} by
> > \startmode[mode]...\stopmode.
> >
> > Is there anything I'm missing? (This could be a bug.)
> not a bug, just the way tex works .. modes cannot know that what goes
> into an argument is something verbose
>
> but you can use this (also more efficient here):
>
> \definetyping[T]
> \definemode[mode][yes]
> \starttext
> \startmode[mode]
> \startT
>      Bla
> \stopT
> \stopmode
> \stoptext
>
> % there's also \startnotmode
>
>
Thank you for hinting at the environment form. The problem with this is,
that it cannot be nested, and that there is no "else" form.
E.g:

\startmode[A]
... mode A
\startmode[B]
... mode A and mode B
\elsemode
... mode A and not mode B
\stopmode
\stopmode

I know that there is \start(not)mode and \start(not)allmodes, but there
seems to be no way to use a general boolean expression such as:

\startmodes[A and not B]
...
\stopmodes

Of course we can do this in lua:

if tex.modes["A"] and not tex.modes{"B"] then
...
end

Keep up your excellent work! Cheers,

Christoph
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ntg.nl/pipermail/ntg-context/attachments/20210320/4337d216/attachment.htm>


More information about the ntg-context mailing list