expl3 的大小写转换函数发生了什么变化?(例如 \tl_upper_case:n 和 \tl_lower_case:n)

expl3 的大小写转换函数发生了什么变化?(例如 \tl_upper_case:n 和 \tl_lower_case:n)

我有一些expl3代码依赖于\tl_upper_case:n进行一些可扩展的大小写更改。但是今天我更新了我的 TeX 发行版,代码现在抛出了一个错误:

! LaTeX3 Error: '\tl_upper_case:n' deprecated on 2022-01-01. Use
(LaTeX3)        '\text_uppercase:n '.

Type <return> to continue.
 ...                                              

l.6 \tl_upper_case:n
                     { oh~no! }
?

事实上,所有:

\tl_<some>_case:n(n)    % <some> = (upper|lower|mixed)
\str_<some>_case:n      % <some> = (upper|lower|fold)
\char_<some>_case:N     % <some> = (upper|lower|mixed|fold)
\char_str_<some>_case:N % <some> = (upper|lower|mixed|fold)

引发类似错误。发生了什么?

答案1

正如错误消息所示,该函数\tl_upper_case:n现已弃用,应替换为\text_uppercase:n。完整列表如下:

  • \tl_<some>_case:n(n)\text_<some>case:n,对于lowerupper,和mixed情况;
  • \str_<some>_case:n\str_<some>case:n,对于lowerupper,和fold情况;
  • \char_<some>_case:N\char_<some>case:N,对于loweruppermixed,和fold情况;
  • \char_str_<some>_case:N\char_str_<some>case:N,对于loweruppermixed,和fold情况。

特别是,<some>_case被替换<some>case为单个单词,mixedcase被重命名为titlecase,更重要的是,处理一般文本输入的函数从(标记列表)中删除,转移到用于一般文本操作工具的l3tl更具体的模块中。l3text

您可以在l3text包裹”接口文档的一部分expl3这篇博文,其中包含对这些函数的主要特性的简要讨论,包括与语言相关的变化,以及使用示例。


在上述更新之前,这些功能(大约四年)一直l3tl作为实验性功能(因此可能会发生变化)存在于模块中,但它们(这些\tl_<some>_case:n功能)并不真正适合l3tl,而且对文本操作模块的需求日益增加。现在,l3text它们在模块中被标记为稳定,因此应该不会再有界面变化。

此举是向 LaTeX3 内核添加其他文本处理工具的大型更新的第一步。这些功能的基础是新添加的\text_expand:n,它的功能与宣传的一样:扩展输入文本。此功能或多或少相当于 LaTeX2ε 的\protected@edef,但它由 提供支持\expanded,因此是可扩展的!

新模块中将添加更多功能l3text,例如\text_purify:n,它将是的可扩展等效项,hyperref可以\pdfstringdef从用户输入生成有效的 PDF 字符串。

相关内容