Я видел обходные пути дляимея пробелы, признанные в пределах\ExplSyntaxOn... \ExplSyntaxOff
. Но мне интересно, почему пробелы не распознаются даже для аргументов макросов (LaTeX3), несомненно ожидающих текст, например, ⟨text⟩
и ⟨more text⟩
в:
\msg_new:nnnn { ⟨module⟩ } { ⟨message⟩ } { ⟨text⟩ } { ⟨more text⟩ }
решение1
пробелу присваивается catcode игнорирования, поэтому он вообще не создает токен, используйте ~
для создания обычного токена пробела
\msg_new:nnnn { ⟨module⟩ } { ⟨message⟩ } { ⟨text⟩ } { ⟨more ~ text⟩ }
Альтернативой было бы сделать что-то другое, но что бы это ни было, оно, скорее всего, будет иметь те же проблемы, что и \verb
в том, что оно требует изменений в коде catcode и поэтому работает на верхнем уровне, но не в аргументах другой команды, или это потребует сложного предварительного сканирования для удаления или удаления пробельных токенов, что означало бы, что иногда вам нужно будет скрыть пробел в %
конце строки, чего синтаксис L3 призван избежать.
Обратите внимание, что в этом контексте ~
активный символ не создает неразрывную конструкцию пробела, это просто символ с кодом пробела, который создает маркер пробела, как будто из пробела в настройке документа.