尝试将选择的 l3keys 参数从外部环境转发到 tblr:“列类型内不可扩展的命令”

尝试将选择的 l3keys 参数从外部环境转发到 tblr:“列类型内不可扩展的命令”

我正在尝试创建一个环境,将其参数作为键值对,使用其中一些,然后将其余部分转发到tblrtabularray 的环境。

这会导致 colspec 参数出现“列类型内无法扩展的命令 \l_foo_colspec_str”错误,虽然 style 变量不会产生错误,但也不会hlines转发到tblr

我相当确定问题出在 l3keys 方面,而不是 tabularray 方面,因为tblrtabular替换(并删除 hlines 位)也会失败(出现“Illegal pream-token”错误)。

我想任何一个

  1. 将具体参数单独传递给 tblr
  2. 从 #1 中删除特定的键值对,然后执行\begin{tblr}{#1}

(可以通过分别传递“外部”参数列表和 tblr 参数列表来使其工作(\begin{tbl}{colspec=llx,hlines}{foo=bar}),但这是一个不太优雅的界面。)

\ExplSyntaxOn
\keys_define:nn { foo } {
    bar .tl_set:N = \l_foo_bar_str,
    colspec .tl_set:N = \l_foo_colspec_str,
    style .tl_set:N = \l_foo_style_clist,
}

\newenvironment{tbl}[1]
{
    \keys_set:nn{foo}{#1}
    \l_foo_bar_str
    \begin{tblr}{colspec=\l_foo_colspec_str,\l_foo_style_clist}%
}
{
    \end{tblr}
}
\ExplSyntaxOff

\begin{document}
\begin{tbl}{
    bar=baz,
    colspec=llx,
    style={hlines},
}
a & b & c \\
a & b & c \\
a & b & c \\
\end{tbl}
\end{document}

答案1

由于是tblr根据 的+b参数类型定义的\NewDocumentEnvironment,因此通过它定义的环境也必须符合要求。您还需要在将参数提供给 之前对其进行扩展\begin{tblr}

\documentclass{article}
\usepackage{tabularray}

\ExplSyntaxOn
\keys_define:nn { foo } {
    bar .tl_set:N = \l_foo_bar_tl,
    colspec .tl_set:N = \l_foo_colspec_tl,
    style .tl_set:N = \l_foo_style_clist,
}

\NewDocumentEnvironment{tbl}{m +b}
{
    \keys_set:nn{foo}{#1}
    \l_foo_bar_tl
    \exp_args:Nne \begin{tblr}{colspec=\l_foo_colspec_tl,\l_foo_style_clist}
    #2
    \end{tblr}
}{}
\ExplSyntaxOff

\begin{document}

\begin{tbl}{
    bar=baz,
    colspec=llX,
    style={hlines},
}
a & b & c \\
a & b & c \\
a & b & c \\
\end{tbl}

\end{document}

请使用,tl而不是str用于标记列表变量。

在此处输入图片描述

相关内容