当以下 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}{}}
\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}{}}
数加倍(参见#
这个帖子)。
更改\tl_put_right:Nx\mytl{0\int_step_inline:nnn{1}{3}{}}
为\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}{}}
\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{}}
\tl_put_right:Nn\mytl{\end{tblr}}
\mytl
\ExplSyntaxOff
\end{document}