On Fri, 19 Mar 2021, 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.)
Has to be with how tex works. The argument of any macro (\doifmode{mode}{...} in this case) is scanned under the current catcode regime. So, any environment (like typing) which changes catcodes does work inside the argument to another macro. So, either use the environment version of \doifmode (which doesn't _capture_ it content): \definetyping[T] \definemode[mode][yes] \starttext \startmode[mode] \startT Bla \stopT \stopmode \stoptext Or use buffers (to avoid catcode all together): \definetyping[T] \definemode[mode][yes] \starttext \startbuffer[code] \startT Bla \stopT \stopbuffer \doifmode{mode}{\getbuffer[code]} \stoptext or (note type**T**buffer so that the output is formatting according to the options of \definetyping[T]) \definetyping[T] \definemode[mode][yes] \starttext \startbuffer[code] Bla \stopbuffer \doifmode{mode}{\typeTbuffer[code]} \stoptext Perhaps this should be added to the FAQ on the wiki. Aditya