使用 LuaLatex 寻找最大公约数

使用 LuaLatex 寻找最大公约数

这是我寻找两个正整数的最大公约数的代码。

\documentclass{article}
\usepackage{luacode}

\begin{luacode}
function gcd(a,b)
    if b ~= 0 then
        return gcd(b, a % b)
    else
        return math.abs(a)
    end
end
\end{luacode}
\newcommand\findgcd[2]{\directlua{tex.sprint(gcd(#1,#2))}}

\begin{document}
\findgcd{5,10}
\end{document}

它抛出错误。预期输出只是 5 和 10 的 gcd。lua 代码中的 % 符号是否导致了错误?

答案1

您已经定义了\findgcd两个参数,但只提供了一个:

\findgcd{5}{10}

将工作。

如果您需要语法\findgcd{5,10},请声明它:

\documentclass{article}
\usepackage{luacode}

\begin{luacode}
function gcd(a,b)
    if b ~= 0 then
        return gcd(b, a % b)
    else
        return math.abs(a)
    end
end
\end{luacode}

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

\begin{document}
\findgcd{5,10}
\end{document}

以下是简单的封装代码,另存为gcd.sty

\ProvidesPackage{gcd}[2019/07/22]
\RequirePackage{luacode}

\begin{luacode}
function gcd(a,b)
    if b ~= 0 then
        return gcd(b, a % b)
    else
        return math.abs(a)
    end
end
\end{luacode}

\newcommand\findgcd[2]{\directlua{tex.sprint(gcd(#1,#2))}}

\endinput

现在,你的文档一旦gcd.sty进入 TeX 引擎读取的目录,就可以

\documentclass{article}
\usepackage{gcd}

\begin{document}
\findgcd{5}{10}
\end{document}

相关内容