Lualatex 中的错误:不打印计算中的字符

Lualatex 中的错误:不打印计算中的字符

我有以下代码

\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
local matrix = require "matrix"
local complex = require "complex"
function cmatrix(n)
return matrix(n):replace(complex)
end
function det(m)
tex.sprint(matrix.det(cmatrix(m)))
end
\end{luacode*}
\newcommand{\matrixdet}[1]{\directlua{det(#1)}}
\matrixdet{{{1,2,3},{4,5,6},{"7+8i",8,10}}}
\end{document}

这里我使用了以下链接中的 matrix.lua 和 complex.lua。

https://github.com/davidm/lua-matrix/blob/master/lua/matrix.lua

https://github.com/davidm/lua-matrix/blob/master/lua/complex.lua

预期答案是 -3-24i。但是它给出的答案是 -3-24。字符 i 未被打印。这在 lua 本身中运行良好。但这似乎是 lualatex 中的一个错误。如何解决?任何帮助都将不胜感激。

答案1

似乎在解释复数方面存在问题tex.sprint。作为解决方案,您可以在打印之前将其转换为字符串:

\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
local matrix = require "matrix"
local complex = require "complex"
function cmatrix(n)
return matrix(n):replace(complex)
end
function det(m)
tex.sprint(tostring(matrix.det(cmatrix(m))))
end
\end{luacode*}
\newcommand{\matrixdet}[1]{\directlua{det(#1)}}
\matrixdet{{{1,2,3},{4,5,6},{"7+8i",8,10}}}
\end{document}

答案2

与 Luaprint函数不同,Lua 函数会隐式地应用于tostring其参数,tex.sprint如果其参数是表,则定义为分别打印表的每个条目。复数是一个包含实部和虚部的两项表,其中自定义tostring函数会添加i

因此print(matrix.det(cmatrix(m)))调用tostring并打印,-3-24itex.sprint将普通数字tostring分别应用于表中的每个元素,-3然后打印。如果在调用之前-24明确应用 ,则将使用为复数表指定的函数,从而再次产生。tostringtex.sprint"-3-24i"

相关内容