为什么即使设置了其他/活动的 catcode,换行符仍然会消失?

为什么即使设置了其他/活动的 catcode,换行符仍然会消失?

例如,使用此代码

%! TEX program = lualatex
\documentclass{article}
\begin{document}

\ExplSyntaxOn
\char_set_catcode_other:N \%
\tl_set:Nn\var{%}
\tl_analysis_show:N\var
\ExplSyntaxOff

\end{document}

输出为

The token list \var contains the tokens:
>  % (the character %).

正如预期的那样,它也能处理所有其他特殊字符。但是当我尝试使用换行符(在 UNIX 上用值为 10 的字节编码)时

\char_set_catcode_other:n {10}
\tl_set:Nn\var{
}
\tl_analysis_show:N\var

输出是

The token list \var is empty

为什么会发生这种情况?(^^J^^M导致相同的输出,而文字换行符导致下面的输出)

The token list \var contains the tokens:
>    (the character  ).

答案1

范围内的\ExplSyntaxOn\endlinechar设置为32(空格),并且空格的类别代码设置为9(忽略)。

因此您的代码等效于\tl_set:Nn \var {}并且令牌列表确实是空的。

设置 Unix 换行符(字符 10)的类别代码是无关紧要的,因为这个字符无处不在:当 TeX 读取一条记录(一行输入)时,它会立即丢弃记录结束操作系统特定字符并将其替换为\endlinechar

相关内容