我希望收到关于此示例的建议。实际上,这更像是一个与 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.")
}
}
这应该会产生期望的结果。