使用 Lua 定义增量计数器

使用 Lua 定义增量计数器

我希望收到关于此示例的建议。实际上,这更像是一个与 Lua 脚本相关的问题。

最小工作示例

\documentclass{beamer}

\directlua{dofile("timer.lua")}

\providecommand{\interval}[1]{
    \directlua{
    tex.print("\string\\textbf{Time estimation}: " .. #1 .. " seconds.".. "\string\\hfill" .. "$t\string\\in" .. "\string\\left[" .. start .. "," .. difference(#1) .. "\string\\right]" .. "$" .. " min.")
}
}
\begin{document}

\frame{\interval{60}}

\frame{\interval{240}}

\end{document}

timer.lua

#!/usr/bin/lua

function trunc(num, digits)
    local mult = 10 ^ (digits)
    return math.modf(num * mult) / mult
end

start = 0

function difference(increment)
    increment = increment + start
    diff = (increment - start)/60
    return trunc(diff, 2)
end

我正在与

  • Lua 5.4.3 版权所有 (C) 1994-2021 Lua.org、PUC-Rio
  • 这是 LuaHBTeX,版本 1.12.0(TeX Live 2020/Arch Linux)。

输出欲望

我希望有时间的积累,即

  • 从第一张幻灯片开始\interval{increment1},放入Time estimation: increment1 seconds. $t\in\left[start, start+increment1\right]$
  • 第二张幻灯片\interval{increment2}中放入Time estimation: increment2 seconds. $t\in\left[start+increment1, start+increment1+increment2\right]$。start 的默认值为零。

就像复发一样

$$S_{n}=S_{n-1}+S_{n-2},\forall n\geq2.$$

谢谢。

在此处输入图片描述

答案1

怎么样

--timer.lua:
sum = 0

function difference(increment)
    oldsumstr = string.format("%.2f",sum/60)
    sum = sum + increment
    sumstr = string.format("%.2f",sum/60)
    return oldsumstr,sumstr
end

进而:

\providecommand{\interval}[1]{
    \directlua{
        local oldsumstr,sumstr = difference(#1)
        tex.print("\string\\textbf{Time estimation}: " .. #1 .. " seconds." ..
            "\string\\hfill" .. "$t\string\\in" .. "\string\\left[" ..
            oldsumstr .. "," .. sumstr .. "\string\\right]" .. "$" .. " min.")
    }
 }

这应该会产生期望的结果。

相关内容