我正在使用 设置一些字体和字体相关命令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
工作正常,结果如下:
场景 2
在这里,我通过包选项提供了一个命令 — 在本例中是\relax
,但其他命令似乎通常也能正常工作。在本例中,结果如下,正如预期的那样:
场景 3
现在问题来了。如果我尝试提供诸如\it
或\bfseries
之类的字体命令,我会收到以下错误:
./keydebug.tex:27: Missing control sequence inserted.
<inserted text>
\inaccessible
l.27
场景 4
它不是供给有问题的命令 — 稍后会使用它。如果我确保覆盖它(仍然在前言中,这里),一切都很好:
那么...有修复或解决方法的任何建议吗?
答案1
这超出了 的控制范围l3keys2e
。LaTeX2e 内核在将选项传递给包之前对其进行处理,而执行此操作的代码(编写于 20 世纪 90 年代初)会进行\edef
扩展。它是基于选项将是简单的单词列表,而不是键值,当然也不是命令而编写的。LaTeX 团队正在探索“修复”此问题的方法,但存在一些不小的问题。目前,对于任何不严格要求字符串的键,您应坚持使用“设置”方法。