这是我寻找两个正整数的最大公约数的代码。
\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}