如果将空格字符重新定义为 catcode 10,哪些 expl3 功能将会中断?

如果将空格字符重新定义为 catcode 10,哪些 expl3 功能将会中断?

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

这可能符合或不符合你的期望,取决于你的期望。

相关内容