查找错误:使用 Lualatex 打印表格

查找错误:使用 Lualatex 打印表格

我以 题 作为计数器。我使用 LuaLaTeX 并加载了 luacode 包。

\newcommand{\scoretable}{
    \directlua{
        tex.print("\begin{tabular}{|c|")
        for i=1,\the题 do
        tex.print("c|") end
        tex.print("}\hline 题号")
        for i=1,\the题 do
        tex.print("&") tex.print(i) end
        tex.print("\\\hline\end{tabular}")
    }
}

有人能发现这个错误吗?当我使用此命令时,\scortable它说它未定义,这意味着定义中有错误。上面的代码在 .cls 文件中。

答案1

以下修改后的代码版本可以工作。:-)

实际上,主要的变化不是\the题在 Lua 代码块内进行扩展。相反,我建议先扩展计数器的值,然后将其传递给 Lua。另外,请注意\(反斜杠) 是 Lua 中的通用“转义字符”。因此,必须\\在 Lua 中编写以生成单个\字符,以供 TeX 进一步处理。

在此处输入图片描述

\documentclass{article} % or some other suitable document class
\usepackage{array}      % for "\extrarowheight" length parameter
\usepackage{fontspec}
\setmainfont{Noto Serif SC} % or some other suitable font
\newcounter{题}

\usepackage{luacode} % for "luacode" environment
\begin{luacode}
function scoretable ( n )
    local s 
    s = "\\begin{tabular}{|c|" 
    for i = 1 , n do 
       s = s .. "c|" 
    end
    s = s .. "} \\hline 题号" 
    for i = 1 , n do 
       s = s.."&"..i 
    end
    s = s .. "\\\\ \\hline \\end{tabular}"
    tex.sprint ( s )
end
\end{luacode}

%% LaTeX utility macro:
\newcommand\scoretable[1]{\directlua{scoretable(#1)}}

\begin{document}
\setlength\extrarowheight{2pt} % make the table look less cramped
\setcounter{题}{8}

\scoretable{\the题}

\end{document}

附录:如果你想保持与原始设置接近,我建议你定义 LaTeX 宏,\scoretable通过

\newcommand{\scoretable}[1]{
    \directlua{
        tex.sprint ( "\\begin{tabular}{|c|" )
        for i = 1,#1 do tex.sprint ( "c|" ) end
        tex.sprint ( "}\\hline 题号" )
        for i = 1,#1 do tex.sprint ( "&"..i ) end
        tex.sprint("\\\\ \\hline \\end{tabular}")
    }
}

并按如下方式调用它:\scoretable{\the题}。请注意使用\\而不是\,以及宏被定义为接受参数的事实。

答案2

您定义了\scoretable,但调用了\scortable尚未定义的内容。

相关内容