TeX Live 2019 中使用 expl3 将程序数据转换为大写

TeX Live 2019 中使用 expl3 将程序数据转换为大写

我使用以下 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:nTeX 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仍然可用。

相关内容