假设我有三个数值变量a,b,c
,我想在 TeX 中使用它们,那么我写道:
token.set_macro("a",a,'global')
token.set_macro("b",b,'global')
token.set_macro("c",c,'global')
我希望不必写“a”、“b”和“c”,如果可能的话,将所有情况放在一起处理,例如 f(a,b,c)。
经过一番研究我找到了一个非常沉重的解决方案使用 debug.getlocal
是否有可能找到其他解决方案?
最后的问题应该是:如果 pi=3.14 如何写
tex.print("pi" .."="..tostring(pi))
而不重复pi
答案1
不是你要求的形式,但迭代表格更容易
\documentclass{article}
\directlua{
t={
a=11,
b=22,
c=33
}
function f (t)
for k,v in pairs(t) do
token.set_macro(k,v,'global')
end
end
f(t)
}
\show\a
\show\b
\show\c
\begin{document}
\end{document}
生产
> \a=macro:
->11.
l.17 \show\a
?
> \b=macro:
->22.
l.18 \show\b
?
> \c=macro:
->33.
l.19 \show\c
?
显示所有三个宏都已设置。
或者如果你想使用变量,可以迭代名称
\documentclass{article}
\directlua{
a=11
b=22
c=33
function f (t)
for k,v in pairs(t) do
token.set_macro(v,_G[v],'global')
end
end
f{"a","b","c"}
}
\show\a
\show\b
\show\c
\begin{document}
\end{document}