使用 expl3 字符串时使用双“#”(哈希)字符

使用 expl3 字符串时使用双“#”(哈希)字符
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\catcode`#=11
\str_set:Nn \l_tmpa_str {#}
\tl_analysis_show:N \l_tmpa_str
\str_set:Nn \l_tmpb_str {#}
\tl_analysis_show:N \l_tmpb_str
\ExplSyntaxOff

上面的代码给出了

The token list \l_tmpa_str contains the tokens:
>  # (the character #)
>  # (the character #).
<recently read> }

l.7 \tl_analysis_show:N \l_tmpa_str

?
The token list \l_tmpb_str contains the tokens:
>  # (the character #).
<recently read> }

l.9 \tl_analysis_show:N \l_tmpb_str

?

#为什么中有两个\l_tmpa_str而 中只有一个\l_tmpb_str

答案1

不要忘记,\ExplSyntaxOn行尾没有空格,因此您的输入基本与以下内容相同:

\catcode`#=11\str_set:Nn\l_tmpa_str{#}

然后 TeX 寻找整数 的终止符11,展开\str_set:Nn,抓住,冻结其 catcode,然后将其翻倍(在 中),然后看到。使用适当的函数更改 catcodes 可以解决问题(或在行尾添加 ):#6\tl_to_str:n\str_set:Nn\tl_analysis_show:N#12#12expl3~

\char_set_catcode_letter:N \#
% \catcode`\#=11~
\str_set:Nn \l_tmpa_str {#}
\tl_analysis_show:N \l_tmpa_str

相关内容