20 LaTeX3中l3keys模块里对.usage:n属性的疑惑?

发布于 2023-07-28 15:06:37

在LaTeX3中的l3keys模块遇到这样两个函数(具体在interface3.pdf的26.4小节240页),原文截取图如下:
1.png
我不是很理解它的作用,大佬能否举几个例子解释一下它的作用,它的三个取值generalpreambleload应该在何种情况下使用。另外,能否顺便解释下\l_keys_usage_load_prop\l_keys_usage_preamble_prop这两个变量的作用?

查看更多

关注者
0
被浏览
815
雾月
雾月 2023-07-28
这家伙很懒,什么也没写!

load:该键只能作为宏包选项(或文档类选项)被设置;
preamble:该键只能在导言区设置;
general:该键只要有定义就能设置。

使用了 load 的键,只在使用 \SetKeys 时才能正确处理。使用 l3keys2e 宏包的设置键的命令不会正确处理。

使用了 preamble 的键,可以在导言区以及 begindocument/before 钩子(以及 etoolbox\AtEndPreamble)中被设置,无法在其它位置设置。

general,清除 loadgeneral 的效果,这是默认的情形。

设置 .usage:n 时,只是把键保存到 \l_keys_usage_load_prop\l_keys_usage_preamble_prop 中,等到设置键时,再根据键是否在它们中而决定是否能被设置(实际上,在加载宏包、在导言区之后,会重新定义这两个 prop 里的键,使得它们无法再被设置)。

下例中,有两个位置出错,因为它们在不正确的位置设置了某些键。
\DeclareKeys\SetKeys 由 LaTeX2e 内核提供,模块名是可选参数。

\documentclass{article}
\begin{filecontents}[force]{mypkg.sty}
\DeclareKeys[mypkg]{
  faa.store=\mypkgfaa,
  faa.usage=load,
  fbb.store=\mypkgfbb,
  fbb.usage=preamble,
  fcc.store=\mypkgfcc,
}
\ProcessKeyOptions[mypkg]
\end{filecontents}

\usepackage[faa=1,fbb=1,fcc=1]{mypkg}

\SetKeys[mypkg]{faa=2,fbb=2,fcc=2} % 出错:faa=2

\begin{document}
\SetKeys[mypkg]{fbb=3,fcc=3} % 出错:fbb=3

hello.
aa: \mypkgfaa,
bb: \mypkgfbb,
cc: \mypkgfcc.

\ExplSyntaxOn
\prop_show:N \l_keys_usage_preamble_prop
\ExplSyntaxOff

\end{document}
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览