我正在尝试扩展包含变量的环境\mydataX
,并收到以下错误:。在环境中执行相同代码时我没有遇到问题。此外,使用而不是会在环境中生成无限循环。我将不胜感激任何帮助!tblr
tl
TeX capacity exceeded, sorry [input stack size=10000]. \__tl_if_novalue:w #1-NoValue-#2?#3?!->
tabular
\NewDocumentCommand
\NewExpandableDocumentCommand
tblr
\documentclass{article}
\usepackage{tabularray}
\ExplSyntaxOn
\tl_set:cn {l_tmpa_tl}{1 & 2 & 3}
\NewExpandableDocumentCommand{\mydata}{O{,}m}{#2#1~1 & 2 & 3}
\NewExpandableDocumentCommand{\mydataX}{O{,}m}{#2#1~\tl_use:N \l_tmpa_tl}
\ExplSyntaxOff
\begin{document}
\begin{tblr}[expand=\expanded]{vlines, colspec={QQQ}}
\expanded{\mydata[,]{Data}} \\
\expanded{\mydataX[,]{Data}} \\ % Not working!
\end{tblr}
\begin{tabular}{|c|c|c|}
\mydata[,]{Data} \\
\mydataX[,]{Data} \\
\end{tabular}
\end{document}
答案1
不要用它\l_tmpa_tl
来存储数据。临时变量可供所有人使用,因此只有当您确定在定义和使用之间没有人更改它们时,才应使用它们。
在这种情况下,如果您添加\tracingassigns=1
,tblr
您将在日志中看到:
{changing \l_tmpa_tl=macro:->1&2&3}
{into \l_tmpa_tl=macro:->\expanded {\mydata [,]{Data}} \ETC.}
然后你的代码就爆炸了……使用其他变量名。顺便说一句:\tl_use:N
不需要。