On 4/1/19 12:52, Benjamin Berg wrote: > On Mon, 2019-04-01 at 09:41 +0200, David Kastrup wrote: >> Benjamin Berg <[log in to unmask]> writes: >> >>> Hi, >>> >>> On Sun, 2019-03-31 at 18:57 -0300, Phelype Oleinik wrote: >>>> If you can't switch the catcode of & before looking for the >>>> optional argument, as David suggests >>> >>> David has a good point, I could handle the optional argument parsing >>> myself and ensure that the case works correctly. It may not be trivial, >>> but it should be reasonably easy. >> >> It should be trivial. You just use the provided mechanism exactly as >> you did before (though naming it differently) and call it last thing in >> your argumentless wrapper environment after setting up catcodes. That >> way the argument scanning only commences once catcodes are settled. > > Well, I do have an optional parameter that disables the catcode changes > (which I know realize might have been a bad idea). That said, it would > still be rather safe to make the change, parse the optional parameter > and undo the change again afterwards when desired. > > Or maybe I should just bite the bullet and create two almost identical > environments for this. > > Benjamin > Other option: use an xparse environment with "o" signature as you are doing, then end the code with \peek_charcode:NT & { ... } { ... } to detect "&" and replace it by an active "&" (or rather by the definition you have for it. Bruno