我已经看到了一些解决方法在内部识别空间\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 的字符,它可以构成空格标记,就像来自文档设置中的空格一样。