On 6/8/2021 10:11 PM, Wolfgang Schuster wrote:
Rik Kabel schrieb am 08.06.2021 um 18:14:
Hello all,
Odd issue with LMTX (works fine with --luatex). \doifelsemode causes a failure if it is used to set a simple value such as on, off, yes, no, ..., but works with a dimension. Perhaps better illustrated by an example:
\definemode [aaa] [keep] \setuplayout [ marking=\doifmodeelse{aaa}{off}{on}, % marking=on, grid=\doifmodeelse{aaa}{yes}{no}, % grid=yes, bottom=\doifmodeelse{aaa}{10mm}{20mm}, ] \starttext This is only a test. \stoptext
The problem occurs whether or not the mode is enabled. In the example, it fails with the mode test in the either the marking= or grid= keys, but has no problem with it in the bottom= key.
The error message says:
The control sequence marked <to be read again> should not appear between \csname and \endcsname.
pointing to the enabled \doifmodeelse line.
The same issue occurs with the following, using \doifmode:
\definemode [aaa] [keep] \setuplayout [ marking=on, marking=\doifmode{aaa}{off}, ] \starttext This is only a test. \stoptext
This did work without complaint a few months ago.
You can never be sure if these combinations (\doifXXX within \setupXXX) work without problems. The only reliable method in this case is:
% default setup
\setuplayout [marking=on]
% mode dependent setup
\startmode[aaa]
\setuplayout [marking=off]
\stopmode Indeed. I'll make the test more robust (not come up with an error) but as Wolfgang says, it won't work anyway because \doifmode is a protected macro.
There is actually a trick: \expand\doifmode{aaa}{on} will ignore the protection .. compare \edef\foo{\doifmode{aaa}{on}} [[\meaningless\foo]] \edef\foo{\expand\doifmode{aaa}{on}} [[\meaningless\foo]] only in luametatex/lmtx Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------