lualatex-luatextra 数学模式问题

lualatex-luatextra 数学模式问题

我是新手(请原谅我的无知)。但是我一直在研究 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"))

然后它运行就不会出错。

相关内容