Почему пробелы игнорируются даже в текстовых аргументах внутри \ExplSyntaxOn... \ExplSyntaxOff?

Почему пробелы игнорируются даже в текстовых аргументах внутри \ExplSyntaxOn... \ExplSyntaxOff?

Я видел обходные пути дляимея пробелы, признанные в пределах\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 призван избежать.

Обратите внимание, что в этом контексте ~активный символ не создает неразрывную конструкцию пробела, это просто символ с кодом пробела, который создает маркер пробела, как будто из пробела в настройке документа.

Связанный контент