场景 1

场景 1

我正在使用 设置一些字体和字体相关命令l3keys,并且运行正常 — 但通过 设置相同的键时似乎存在问题l3keys2e。这是预期行为吗?有办法解决吗?

以下是 MWE:

\documentclass[border=4pt]{standalone}
\usepackage{filecontents}
\begin{filecontents}{keydebug.sty}

\RequirePackage{expl3}

\ProvidesExplPackage
    {keydebug} {2019/00/00}
    {0.0}      {}

\RequirePackage{l3keys2e}

\keys_define:nn { keydebug } {
    myfont      .tl_set:N       = \myfont,
    myfont      .initial:n      = \it,               % 1
}

\ProcessKeysOptions { keydebug }

% \keys_set:nn { keydebug } { myfont = \it }         % 4

\end{filecontents}

\usepackage{keydebug}                                % 1
% \usepackage[myfont=\relax]{keydebug}               % 2
% \usepackage[myfont=\it]{keydebug}                  % 3-4

\begin{document}
{\myfont Hello, world!}
\end{document}

右边的数字表示四种情况,以及每种情况下应该取消注释/激活哪一行。

场景 1

通过属性进行初始化.initial工作正常,结果如下:

使用 .initial

场景 2

在这里,我通过包选项提供了一个命令 — 在本例中是\relax,但其他命令似乎通常也能正常工作。在本例中,结果如下,正如预期的那样:

使用 \relax

场景 3

现在问题来了。如果我尝试提供诸如\it\bfseries之类的字体命令,我会收到以下错误:

./keydebug.tex:27: Missing control sequence inserted.
<inserted text>
                \inaccessible
l.27

场景 4

它不是供给有问题的命令 — 稍后会使用它。如果我确保覆盖它(仍然在前言中,这里),一切都很好:

覆盖

那么...有修复或解决方法的任何建议吗?

答案1

这超出了 的控制范围l3keys2e。LaTeX2e 内核在将选项传递给包之前对其进行处理,而执行此操作的代码(编写于 20 世纪 90 年代初)会进行\edef扩展。它是基于选项将是简单的单词列表,而不是键值,当然也不是命令而编写的。LaTeX 团队正在探索“修复”此问题的方法,但存在一些不小的问题。目前,对于任何不严格要求字符串的键,您应坚持使用“设置”方法。

相关内容