我是新手(请原谅我的无知)。但是我一直在研究 LuaLatex,并且遇到了一些奇怪的行为。以下代码
\documentclass{article}
\usepackage{luatextra}
\usepackage{xparse}
\begin{luacode*}
function record (m,n)
file = assert(io.open("test2.dat","a"))
file:write(string.format("%s %s",m,n),"\n")
end
\end{luacode*}
\newcounter{prob}
\setcounter{prob}{1}
\DeclareDocumentCommand{\problem}{m}{%
\noindent \textbf{Problem \theprob:} (#1 points)
\directlua{record(\theprob ,#1)} \stepcounter{prob}
}
\begin{document}
\problem{2} Who is your Daddy and what does he do?
$42$
\end{document}
产生以下错误:
...MikTex 2.9/tex/luatex/luaotfload/fontloader-2016-06-1 6.lua:10601:
attempt to call field 'suffix' (a nil value).
<to be read again>
relax
1.24 $4
2$
?
奇怪的部分来了。当上面的代码被扩充为在调用“问题”命令之前包含数学模式中的任何内容时,一切都会编译正常。例如
\begin{document}
$ $
\problem{2} Who is your Daddy and what does he do?
$42$
\end{document}
编译无错误。这里面有什么故事?提前感谢您的反馈。
编辑:该问题似乎与 fontspec 有关,因为用 luacode 和 fontspec 替换包 luatextra 后仍然会出现相同的行为。
答案1
你可以将示例简化为
\documentclass{article}
\RequirePackage{fontspec}
\directlua{
function record (m,n)
file = assert(io.open("test2.dat","a"))
end
}
\begin{document}
\directlua{record(1 ,"x")}
$42$
\end{document}
错误主要是使用变量名称,file
如果你将其更改为
zzz = assert(io.open("test2.dat","a"))
然后它运行就不会出错。