以下代码尝试将参数作为键处理,并将一个未知键的名称存储到标记列表中。令我困惑的是,如果参数是text
,当我要求宏显示存储的标记列表时,它会正确显示text
,但当我尝试\text_titlecase_first:n
这样做时,结果变成TEXT
了Text
。
如果我\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 的影响,但尚未决定。)