我不确定我是否做得太过分了,但我想我见过类似的事情。这会出现错误:
\documentclass{scrartcl}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \RULE {}
{
\rule{\l_tmpa_dim}{\l_tmpb_dim}
}
\keys_define:nn { foo / bar }
{
tmpa .dim_set:N = \l_tmpa_dim,
tmpb .dim_set:N = \l_tmpb_dim,
tmpa .initial:n = 1em,
tmpb .initial:n = 4em,
}
\NewDocumentCommand \dimsetup { m } { \keys_set:nn { foo } { #1 } }
\ExplSyntaxOff
\dimsetup{bar={tmpa=3em,tmpb=1em}}
\begin{document}
\RULE
\end{document}
导致
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! LaTeX error: "kernel/key-unknown" ! ! The key 'foo/bar' is unknown and is being ignored. ! ! See the LaTeX3 documentation for further information. ! ! For immediate help type H <return>. !...............................................
这是预期的结果吗?我如何才能轻松地在键内使用此键值(我是否需要定义bar
以便它传递选项?)。我想我已经见过这种情况,而且我认为这是可行的。
这是我想要实现的“手动”解决方法:
\dimsetup{bar/tmpa=3em,bar/tmpb=1em}
答案1
您似乎想将bar
两者都用作子路径,并将其本身用作键。例如
\documentclass{scrartcl}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \RULE {}
{
\rule { \l_tmpa_dim } { \l_tmpb_dim }
}
\keys_define:nn { foo }
{
bar .code:n = { \keys_set:nn { foo / bar } {#1} },
bar / tmpa .dim_set:N = \l_tmpa_dim,
bar / tmpb .dim_set:N = \l_tmpb_dim,
bar / tmpa .initial:n = 1em,
bar / tmpb .initial:n = 4em,
}
\NewDocumentCommand \dimsetup { m } { \keys_set:nn { foo } { #1 } }
\ExplSyntaxOff
\dimsetup{bar={tmpa=3em,tmpb=1em}}
\begin{document}
\RULE
\end{document}
会这样做。您可能还想查看l3keys
文档中的键分组。
请注意,你也可以这样做
\keys_define:nn { foo }
{
bar .code:n = { \keys_set:nn { foo / bar } {#1} },
}
\keys_define:nn { foo / bar }
{
tmpa .dim_set:N = \l_tmpa_dim,
tmpb .dim_set:N = \l_tmpb_dim,
tmpa .initial:n = 1em,
tmpb .initial:n = 4em,
}
如果你喜欢的话。(在 中l3keys
, 的主要功能/
是创建选择键,ETC。)