expl3
如果我将空格字符重新定义为 catcode 10,那么哪些功能(如果有)会中断?
\ExplSyntaxOn
\char_set_catcode_space:n {32}
...
% Does everything work as before?
...
\ExplSyntaxOff
答案1
事情往往会悄无声息地出错,几乎没有任何警告。函数本身当然不受文档中的 catcode 的影响,但文档中的空格被解释为不同,因此期望正常上下文的代码片段将会中断。
给了我一个借口来破解 egreg 的一些代码。假设你从
https://tex.stackexchange.com/a/24067
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
%\catcode`\ =10\relax
\cs_new:Npn \exampleone:nn #1 #2 {[#1 #2]}
\cs_new:Nn \exampletwo:nn{#1 #2}
\texttt{\cs_meaning:N \exampleone:nn}\par
\texttt{\cs_meaning:N \exampletwo:nn}\par
\exampleone:nn{aa}{bb} cc dd
\ExplSyntaxOff
\end{document}
生产
[aabb]ccdd
这正是预期的结果。
如果你取消注释 catcode 设置,那么你会得到
[aabb cc]dd
这可能符合或不符合你的期望,取决于你的期望。