LaTeX 2022-11-01 预发布版本已准备好进行测试
我们最近向 CTAN 提交了 LaTeX 2022-11-01 内核的第一个预发布版本。它应该已经进入 TeX Live,或者很快就会对所有人可见。
它已经包含了 LaTeX 格式的大部分更新和改进,这些更新和改进将成为 11 月份标准的一部分;因此,现在对其进行测试将有助于识别需要升级的软件包,并在正式发布之前发现任何潜伏的错误;请参阅下文,了解如何安全地进行测试。
主要亮点在下面简要讨论,更多细节以及此处未涵盖的较小错误修复和改进可以在 LaTeX2e News Issue 36 新闻通讯的草稿版本中找到。
内核中的新功能(亮点)
对于开发者
LaTeX 内核中最重要的改进是为命令中接收和操作键/值参数提供了一种标准机制。这在 \DeclareDocumentCommand
接口中实现,并提供了一种可靠的方法,允许(可选)参数包含键/值列表,或者如果内容不包含此类键/值列表,则将其解释为普通参数。在后一种情况下,该内容被解释为命令声明中指定的键的值。例如,\caption
命令可以声明为
\DeclareDocumentCommand \caption {s ={short-text}+O{#3} +m}
{...}
这意味着它期望一个可选的星号 (s
) 和一个可以包含 \par
命令 (+m
) 的必需参数。它还有一个可选参数(在必需参数之前),如果未给出,则其默认值是必需参数的内容 (+O{#3}
),这就是为什么它引用 #3
的原因。通过使用 ={short-text}
作为前缀,我们声明此可选参数应检查键/值列表,如果未找到此类列表,则应将其参数内容分配给键 short-text
以进行进一步处理。然后,对此参数的处理始终可以假定它获得了键/值列表,无论是指定的列表还是仅包含 short-text
键的简单列表。
目前,仅提供此功能,并且主要面向开发人员。但是,一旦命令使用该功能(从项目团队的角度来看,我们肯定打算在即将发布的版本中使用它),它也与用户相关,因为那时他们将能够在多个地方指定键/值参数,同时保留对“自由文本参数”的支持。
虽然从技术上讲,此功能可以与任何参数一起使用,但我们打算仅将其用于命令的第一个可选参数,并建议开发人员也这样做,以便(大多数)LaTeX 命令使用类似的界面,从而使用户可以轻松使用,即,
\cmd * [<arg with key/val or free text>] <other mandatory or optional arguments>
当然,更简单的命令可以提供
- 没有
*
形式,或者 - 始终期望键/值列表的可选参数,或者
- 没有键/值支持的参数,或者
- 根本没有可选参数。
对于开发者和用户
您可能想知道使用什么规则来确定参数是否被解释为键/值列表。它们相当简单,但在(我们希望)几乎所有用例中都足够用。基本上,参数文本会搜索一个或多个 =
符号,这些符号既不在显式花括号组 {...}
内,也不属于内联数学模式,或者更准确地说,不在 $...$
或 \(...\)
内。目前不考虑其他构造,例如,如果您真的使用 \begin{math}...\end{math}
或某些包含等号的显示数学,则在不进行调整的情况下,它将无法在此类参数内工作。如果内容被错误地解释为键/值列表,则用户的补救方法是将内容隐藏在花括号组中,例如,
\caption[The form: \begin{math} a=b\end{math}] {...} % fails
\caption[{The form: \begin{math} a=b\end{math}}]{...} % works
还有一种方法可以通过在参数前面加上 =,
来强制解释为键/值列表,这在某些情况下对于无值键可能很有用。更多详细信息可以在文档中找到。
展望
我们预计在下一个主要版本之前会发布另一个预发布版本,但这很可能仅包含对 latex-lab 代码的一些进一步更新,以及可能的一些小更新以修复一个或另一个小的待解决问题。请通过将此预发布版本用于您的文档或针对您自己的软件包进行测试来帮助测试。
使用预发布版本处理文档非常简单。您所要做的就是通过将 -dev 附加到可执行文件来替换调用命令,例如,在命令行中,您将运行
pdflatex-dev myfile
或lualatex-dev myfile
或xelatex-dev myfile
而不是使用 pdflatex
、lualatex
或 xelatex
。如果您使用集成编辑环境,则取决于系统如何配置它以使用替代格式;但在任何情况下,必要的修改都应该很简单。
祝您使用愉快 — Frank & Joseph