为什么即使在 \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 语法就是为了避免这种情况而设计的。

请注意,在这种情况下,~活动字符并不是构成不可破坏的空格构造,它只是一个具有空格 catcode 的字符,它可以构成空格标记,就像来自文档设置中的空格一样。

相关内容