我以 题 作为计数器。我使用 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
尚未定义的内容。