我试图得到一张这样的桌子
1
2 3 4
5 6 7
8 9 10
有了这个function
function myTable()
t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
for k = 1, #t do
if k == 1 then
tex.print(string.format([["& %d & \\"]], t[1]))
else
tex.print(string.format([["%d & %d & %d \\"]],
t[k], t[k + 1], t[k + 2]))
k = k + 2
end
end
end
但它说:
ua:25: bad argument #4 to 'format' (number expected, got nil)
怎么做?看起来 lua 实现 for 循环的方式很奇怪,我错了吗?
在我的文档中我已经:
\documentclass{article}
\usepackage{harfload,fontspec,amsmath}
\setmainfont{Kalpurush}[RawFeature={mode=harf}]
\parindent 0pt
\directlua{require("test.lua")}
\begin{document}
\begin{table}[h]
\centering
\begin{tabular}{ccc}
\directlua{myTable()}
\end{tabular}
\end{table}
\end{document}
答案1
来自lua.org 网站:
...你永远不应该改变[循环]控制变量的值
for
:这种改变的影响是不可预测的。
简而言之, “手动”增加k
(循环的控制变量)的值并不是一个好主意。for
因此我认为你应该使用循环while
而不是for
循环。然后,k
如果为真则增加 1 k==1
,否则增加 3。最后,你应该省略"
的第一个参数中的符号string.format
;或者,省略[[
和]]
指令并替换\\
为\\\\
。)
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function myTable()
t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
k=1
while k<#t do
if k == 1 then
tex.print(string.format([[ & %d & \\]], t[k]))
k=k+1
else
tex.print(string.format([[%d & %d & %d \\]],
t[k], t[k + 1], t[k + 2]))
k = k + 3
end
end
end
\end{luacode}
\begin{document}
\begin{tabular}{ccc}
\directlua{myTable()}
\end{tabular}
\end{document}