9

Here is my code to find Greatest Common Divisor of two positive integers.

\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}

It throws error. The expected output is simply gcd of 5 and 10. Is % sign in lua code causing the error?

user61681
  • 1,749

1 Answers1

14

You have defined \findgcd with two arguments, but you only supply one:

\findgcd{5}{10}

will work.

If you want the syntax \findgcd{5,10}, then declare it:

\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}

Here's a simple package code, save as 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

Now your document, as soon as gcd.sty is in a directory read by the TeX engines, can be

\documentclass{article}
\usepackage{gcd}

\begin{document}
\findgcd{5}{10}
\end{document}
egreg
  • 1,121,712
  • Is it possible to store this function as a package? I mean something like this. \usepackage{gcd} and with this package \findgcd command will be available to use it anywhere in document. – user61681 Jul 22 '19 at 11:40
  • @user61681 Yes, write a package and upload it to CTAN. – egreg Jul 22 '19 at 11:56
  • Could you share some resources? How to write package for this type of lua functions? – user61681 Jul 22 '19 at 12:03
  • 1
    Thanks for your detailed help. You are great...! Just one last query, though it is out of scope here. I am trying to learn how to write latex macros (own commands, environments etc.). I couldn't find any resources for that. I have programming background but still find it difficult to learn latex programming. Could you share some resources if you know? Thanks again. – user61681 Jul 22 '19 at 12:28
  • @user61681 It's best if they're documented. – egreg Jul 22 '19 at 12:28
  • If I want to make available file.lua and mypackage.sty files available to all tex documents on my local computer, where should I place these files? I am working on Windows 7 operating system with miktex installed. – user61681 Jul 29 '19 at 01:58