LaTeX 2022-06-01 预发布版已准备好进行测试
我们最近向 CTAN 提交了 LaTeX 2022-06-01 内核的最新预发布版本。它现在应该已经进入了 TeX Live(包括 2021 和 2022 预测试版),供大家使用,因此用户可以尝试了。
它已经包含了 LaTeX 格式的大部分更新,这些更新将在六月份成为标准的一部分;因此,现在对其进行测试将有助于识别需要升级的软件包,并在六月份正式发布之前发现任何潜伏的错误;请参阅下文了解如何以安全的方式进行测试。
下文简要讨论了重点内容,更多细节以及此处未涵盖的较小错误修复和改进可以在 LaTeX2e News Issue 35 新闻通讯的草稿版本中找到。
内核中的新功能(重点)
对于用户
代码中最显著的变化之一是用户(希望如此)不会注意到的变化:pdfTeX 中 UTF-8 字符的定义。我们使这些字符受到引擎保护,这应该使在 expl3
中处理它们变得容易得多。更改的设置方式意味着我们不希望用户实际看到差异,但我们确实想了解它的工作情况。因此,请取出您复杂的变音符号,并在 pdfTeX 中到处尝试。(LuaTeX 和 XeTeX 用户甚至不需要担心。)与此更改相关的一件事是我们更新了 \MakeUppercase
和 \MakeLowercase
的定义,因此它们在“幕后”使用了 Unicode 感知的 expl3
代码。同样,这对用户应该是透明的,但很高兴听到它在实际应用中的效果。
更明显的是我们在此预发布版本中添加的一小组新命令。我们将 \fpeval
和 \inteval
从 xfp
软件包直接移到内核中。我们还添加了 \ExpandArgs
和 \UseName
,这些想法同样来自 expl3
。这些命令允许控制扩展,因此您可以在文档命令中执行一系列基本扩展任务,而无需 TeX 编程或使用 expl3
。例如,您现在可以执行
\NewDocumentCommand\newcopyedit{mO{red}}
{\newcounter{todo#1}%
\ExpandArgs{c}\NewDocumentCommand{#1}{s m}%
{\stepcounter{todo#1}%
\IfBooleanTF {##1}%
{\todo[color=#2!10]%
{\UseName{thetodo#1}: ##2}}%
{\todo[inline,color=#2!10]%
{\UseName{thetodo#1}: ##2}}%
}%
}
这可以按名称创建文档命令:这是人们多年来一直要求的。
来自 expl3
想法的另一个补充是 \IfBlankTF
:这可以测试是否已给出完全空白的参数。在这里,空白意味着空或仅空格:这种情况非常常见。
对于软件包作者
软件包作者很可能会选择使用上述功能。但是,有一个针对软件包的重大更改:基于 keyval 的选项处理。我们引入了一组新命令 \DeclareKeys
、\ProcessKeyOptions
和 \SetKeys
,这些命令可用于创建 keyval 并将其用作软件包选项。\DeclareKeys
使用与 expl3
函数 \keys_define:nn
相同的方法来创建键:每个键都具有一个或多个“属性”,这些属性控制其行为。在此阶段,我们提供了一些常见的属性,用于在宏中存储键值、设置开关和执行某些代码。我们还提供了一种定义键用法的方法:它们是否仅在软件包加载时可用、在序言中可用,或者也可以在文档正文中使用。
\DeclareKeys
{
draft.if = @mypkg@draft ,
draft.usage = preamble ,
name.store = \@mypkg@name ,
name.usage = load ,
command.code = \showtokens{#1}
}
然后可以使用 \ProcessKeyOptions
处理软件包选项,这将设置由 \DeclareKeys
定义的键。也可以使用 \SetKeys
在文档正文中设置键。所有这些新命令都接受一个可选参数来定义键族:键的命名空间。默认情况下,这是当前软件包文件的名称。
更高级的键类型可以直接使用 expl3
(l3keys
) 创建:由 \DefineKeys
创建的键是标准的 expl3
键。
与传统的软件包选项不同,多次使用不同的选项加载使用 \ProcessKeyOptions
的软件包不会导致冲突错误。相反,这些选项将简单地传递给同一个键处理程序。这意味着软件包作者可以控制如何处理重复设置相同键的情况。
\DocumentMetadata
内核中又增加了一个用于文档顶部的功能:\DocumentMetadata
。它是告诉 LaTeX 当前文档是新的/现代文档的触发器,该文档应使用传统 LaTeX2e 文档中不可用的概念,例如,为 PDF 标记项目开发的所有内容。
这个新命令必须首先出现在 LaTeX 文档中,在 \documentclass
之前。顾名思义,它用于设置有关整个文档的元数据,但在 PDF 标记项目正在进行时,它也用于启用此项目中的新代码(请参阅下文对 latex-lab
的讨论)。
即使使用空参数,它目前也已经显示出一些效果,通过加载新的 pdfmanagement
,它为需要设置或查询 PDF 资源的软件包(例如 hyperref
、media9
等)提供了可靠且一致的接口,以便它们可以共存而不会以随机方式覆盖其设置。
例如,如果使用了 \DocumentMetadata
声明,hyperref
软件包将切换到具有扩展可能性的新驱动程序,您可以通过以下简单文档看到这一点,该文档显示了新驱动程序的新默认链接颜色。
\DocumentMetadata{}
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\tableofcontents
\section{A link} \url{https://latex-project.cn}
\end{document}
LaTeX-lab 捆绑包
这是一个探索我们认为可能会添加到 LaTeX 中的想法的新空间。这些实验性想法仅在 \DocumentMetadata
的参数中存在正确的键时才会被激活,也就是说,它们不会影响不希望尝试新功能的用户。例如,键 testphase
可用于启用为 PDF 标记项目开发的代码。我们目前处于标记项目的 testphase II 阶段,可以使用以下方式激活
\DocumentMetadata{testphase = phase-II}
然后,这将从 latex-lab
加载 tagpdf
和其他支持代码,并生成带有段落文本和脚注标记的文档;作为此阶段的一部分,其他文档元素(例如,标题和列表)将很快跟进。
latex-lab
空间也可能包含我们正在移至内核的代码,但我们首先希望在没有中断风险的情况下进行测试,例如,目前它托管了独立标记的新管理代码,该代码将在六月或年底之前移至格式。
实验室中的某些想法可能会被放弃或修改:使用它们的任何人都应注意这一点。但是,我们预计大多数最终会移至内核。标记始终需要存在 \DocumentMetadata
,但随着时间的推移,使用 testphase
键激活它的需求将被消除。
展望
我们预计在四月底左右发布另一个预发布版本,这将给我们时间在六月份完成发布。请帮助进行测试
使用预发布版本处理您的文档非常简单。您所要做的就是通过将 -dev 附加到可执行文件来替换调用命令,例如,在命令行中,您将运行
pdflatex-dev myfile
orlualatex-dev myfile
orxelatex-dev myfile
而不是使用 pdflatex
、lualatex
或 xelatex
。如果您使用集成编辑环境,则取决于系统如何配置它以使用替代格式;但在任何情况下,必要的修改都应该很简单。
祝您使用愉快 — Joseph & Frank