我使用以下 expl3 代码将程序字符串的第一个字符大写。该代码来自控制序列定义的主体,不应完全扩展。
\tl_set:Nn
\l_tmpa_tl
{ \str_uppercase:n { #1 } }
\tl_set:Nx
\l_tmpb_tl
{
\tl_head:f { \l_tmpa_tl }
\tl_tail:n { #1 }
}
但是,我需要我的代码与 TeX Live 2019 一起使用,而\str_uppercase:n
TeX Live 2019 中无法使用控制序列。由于我知道#1
只包含 ASCII 字母,所以我假设我可以用 替换\str_uppercase:n
。\uppercase
但是,\uppercase
似乎无法扩展,因此\tl_head:f { \l_tmpa_tl }
会产生\uppercase
标记而不是第一个大写字符。
答案1
但是,
\uppercase
似乎无法扩展,因此\tl_head:f { \l_tmpa_tl }
会产生 \uppercase 标记而不是第一个大写字符。
这是因为\uppercase
原语不可扩展,并且由执行处理器而不是扩展处理器处理,另请参见\expandafter
和\uppercase
。
我需要我的代码与 TeX Live 2019 一起使用,但
\str_uppercase:n
控制序列在 TeX Live 2019 中不可用。
根据2016 年 11 月的 LaTeX 3 新闻通讯,该\str_upper_case:n
命令自 TeX Live 2017 起可用。2020 年,它已重命名\str_uppercase:n
为已弃用。不过,弃用的命令\str_upper_case:n
仍然可用。