我有一些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
,对于lower
,upper
,和mixed
情况;\str_<some>_case:n
→\str_<some>case:n
,对于lower
,upper
,和fold
情况;\char_<some>_case:N
→\char_<some>case:N
,对于lower
,upper
,mixed
,和fold
情况;\char_str_<some>_case:N
→\char_str_<some>case:N
,对于lower
,upper
,mixed
,和fold
情况。
特别是,<some>_case
被替换<some>case
为单个单词,mixed
case被重命名为title
case,更重要的是,处理一般文本输入的函数从(标记列表)中删除,转移到用于一般文本操作工具的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 字符串。