Hi Benjamin, If you can't switch the catcode of & before looking for the optional argument, as David suggests, you can use the ! argument modifier to disallow a space token before the first “[”: \NewDocumentEnvironment { sdapsarray } { !o } in which case: \begin{sdapsarray} & b \end{sdapsarray} will work as expected, but: \begin{sdapsarray} [] % note the space before the [] & b \end{sdapsarray} and: \begin{sdapsarray} [] & b \end{sdapsarray} won't see the optional argument anymore. Best, Phelype