LuaTeX 中出现编译错误,但在 Lua 中可以运行

LuaTeX 中出现编译错误,但在 Lua 中可以运行

我想为扩展欧几里得算法在 LuaTeX 中。

\documentclass[a4paper]{scrartcl}
\usepackage{luacode}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new, babelshorthands=true]{german}

\newcommand{\wert}[1]{\directlua{tex.sprint(#1)}}

\begin{document}

\begin{luacode*}
  function EEA(a,b)
    if b == 0 then return a, 1, 0 end
    d,s,t = EEA(b, a % b)
    x = s - (a//b) * t
    return d, t, x
  end
  p = 47
  q = 97
  d,x,y = EEA(p,q)
\end{luacode*}
We have $\wert{d} = \wert{p} \cdot \wert{x} + \wert{p} \cdot \wert{y}$.
\end{document}

运行代码https://www.lua.org/cgi-bin/demo有效,但是当我尝试 LuaTeX 时,出现错误:

语言 ngerman 已加载;id 为 8[\directlua]:4:
'/' 附近有意外符号。
\luacode@dbg@exec ...code@maybe@printdbg {#1} #1 }

l.20 \end{luacode*}

我想与百分号有关,但是

  function gcd(a,b)
    if b == 0 then return a end
    return gcd(b, a % b)
  end

运行正常。我该如何解决这个问题?

我有 LuaTeX 版本 1.0.4 并且我刚刚运行lualatex lua_test.tex

答案1

看来你使用的是旧版 LuaTeX:在 TeX Live 中,TL2017 与 LuaTeX 1.0.4 和 Lua 5.2 匹配。如你所见文档,整数除法(//)不受支持,已从Lua 5.3。因此,请使用math.floor(a/b)或更新您当前的发行版,以便 Lua 5.3//可用。

相关内容