Для документации этого модуля может быть создана страница Модуль:Math/Документация

local M={};

function M.rn(i)
    local w, t, val, let = {}, {
        {1000, "M"},
        {900, "CM"},
        {500, "D"},
        {400, "CD"},
        {100, "C"},
        {90, "XC"},
        {50, "L"},
        {40, "XL"},
        {10, "X"},
        {9, "IX"},
        {5, "V"},
        {4, "IV"},
        {1, "I"}
    }
    for n, v in ipairs(t) do
        val, let = unpack(v)
        w[n]=string.rep(let,i/val)
        i=i % val
    end
    return table.concat(w)
end

function M.Roman(frame) -- Преобразует числа от 1 до 4999999 в римские
    local N=math.floor(tonumber(frame.args[1]) or error(frame.args[1].." is not a number"));
    if N<1 or N>=5e6 then return frame.args[2] or 'N/A' end
    local R=N%5000
    N=(N-R)/1000
    return (N>0 and table.concat{'<span style="text-decoration:overline;">',M.rn(N),'</span>'} or '')..M.rn(R)
end

function M.digitsonly(f)
    return  (f.args[1]:gsub("[^%d]",''))
end

return M