在 expl3 中以编程方式构建 tblr

在 expl3 中以编程方式构建 tblr

当以下 LaTeX 代码:

\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{}0&1&2&3\end{tblr}
\end{document}

使用 2022 LuaLaTeX 引擎在 Overleaf 中编译,产生以下输出:0 1 2 3

但是,如果该表是按照 expl3 标记列表逐个构建的,如下所示:

\documentclass{article}
\usepackage{tabularray}
\begin{document}
\ExplSyntaxOn
\tl_new:N\mytl
\tl_set:Nn\mytl{\begin{tblr}{}}
\tl_put_right:Nx\mytl{0\int_step_inline:nnn{1}{3}{&#1}}
\tl_put_right:Nn\mytl{\end{tblr}}
\mytl
\ExplSyntaxOff
\end{document}

出现以下错误消息:

\__int_map_4:w #1->&
                    #1
l.9 \mytl
       
I can't figure out why you would want to use a tab mark
here.

为什么 expl3 程序失败了?我该如何纠正?

答案1

这行代码有两个问题。第一个问题是,当使用嵌套宏定义时,你必须将每一层嵌套的标记\tl_put_right:Nx\mytl{0\int_step_inline:nnn{1}{3}{&#1}}数加倍(参见#这个帖子)。

更改\tl_put_right:Nx\mytl{0\int_step_inline:nnn{1}{3}{&#1}}\tl_put_right:Nx\mytl{0\int_step_inline:nnn{1}{3}{&##1}} 仍然不能解决问题。请考虑以下代码

\documentclass{article}
\usepackage{tabularray}
\begin{document}
\ExplSyntaxOn
\tl_new:N\mytl
\tl_set:Nn\mytl{\begin{tblr}{}}
\tl_put_right:Nx\mytl{0\int_step_inline:nnn{1}{3}{&#1}}
\tl_put_right:Nn\mytl{\end{tblr}}
\tl_log:N\mytl
\ExplSyntaxOff
\end{document}

编译此文件后查看日志文件,您将看到以下行> \mytl=\begin {tblr}{}0\int_step_inline:nnn {1}{3}{&##1}\end {tblr}.。我们可以看到该函数\int_step_inline:nnn没有展开(因为它受到保护,请在文档中写入 \ShowCommand\int_step_inline:nnn 并检查日志文件),因此没有tblr看到任何显式&标记。

根据 Ulrike 的建议,你可以将函数移到\int_step_inline:nnn外面

\documentclass{article}
\usepackage{tabularray}
\begin{document}
    \ExplSyntaxOn
    \tl_new:N\mytl
    \tl_set:Nn\mytl{\begin{tblr}{}0}
        \int_step_inline:nnn{1}{3}{ \tl_put_right:Nn\mytl{&#1}}
        \tl_put_right:Nn\mytl{\end{tblr}}
    \mytl
    \ExplSyntaxOff
\end{document}

相关内容