使用 lua for 循环格式化表格

使用 lua for 循环格式化表格

我试图得到一张这样的桌子

  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}

相关内容