expl3: \l_keys_key_tl 和 \text_titlecase_first:n 的结果错误

expl3: \l_keys_key_tl 和 \text_titlecase_first:n 的结果错误

以下代码尝试将参数作为键处理,并将一个未知键的名称存储到标记列表中。令我困惑的是,如果参数是text,当我要求宏显示存储的标记列表时,它会正确显示text,但当我尝试\text_titlecase_first:n这样做时,结果变成TEXTText

如果我\l_keys_key_tl直接更改为文本text,则一切正常。这是因为我使用\l_keys_key_tl错误吗?

\documentclass{article}

\ExplSyntaxOn

\tl_new:N \l__mymodule_text_tl
\keys_define:nn { my-keys }
  {
    , unknown .code:n = { \tl_set:No \l__mymodule_text_tl { \l_keys_key_tl } }
  }

\NewDocumentCommand \TestFunction { m }
  {
    \keys_set:nn { my-keys } { #1 }
    \l__mymodule_text_tl\par
    \text_titlecase_first:n { \l__mymodule_text_tl }
  }

\ExplSyntaxOff

\begin{document}

\TestFunction{text}

\end{document}

在此处输入图片描述

答案1

标题大小写代码目前根据 catcode 确定是否找到了“字母”。由于键名已被去标记化,因此它们都不是字母,因此“文本”尚未开始。此行为可使用以下方式控制\l_text_titlecase_check_letter_bool

\documentclass{article}

\ExplSyntaxOn

\tl_new:N \l__mymodule_text_tl
\keys_define:nn { my-keys }
  {
    , unknown .code:n = { \tl_set_eq:NN \l__mymodule_text_tl \l_keys_key_tl }
  }

\NewDocumentCommand \TestFunction { m }
  {
    \keys_set:nn { my-keys } {#1}
    \text_titlecase_first:n { \l__mymodule_text_tl }
  }

\ExplSyntaxOff

\begin{document}
\TestFunction{text}
\ExplSyntaxOn
\bool_set_false:N \l_text_titlecase_check_letter_bool
\ExplSyntaxOff
\TestFunction{text}
\end{document}

(有可能修改此代码以使用 Unicode 通用类别以避免 catcode 的影响,但尚未决定。)

相关内容