答案1
当前的 ConTeXt 代码大量使用了\dimexpr
e \numexpr
-TeX,因为大部分 ConTeXt 都早于 luatex。
如果你想在 lua 中进行快速计算,你可以做一些这样的简单的事情:
\def\evaluate#1{\directlua{tex.sprint(tostring(#1))}}
那么你可以写:
\evaluate{10.2+1e6}
\evaluate{10.2/0}
等等。
祝一切顺利,塔科
答案2
e-TeX 可以通过 评估简单的定点表达式\dimexpr
,但正如您已经说过的,对于 ConTeXt Mk IV 来说,在 Lua 中编程是可行的方法,并且它比 TeX 所能提供的任何东西都更好、更简单、更干净。
答案3
以下是 fp-basic.sty 前四个函数的简单移植
\取消保护 \def\FPadd#1#2#3% #1 = #2 + #3 {\ctxlua{context.setvalue("\strippedcsname#1", #2+#3)}} \def\FPsub#1#2#3% #1 = #2 - #3 {\ctxlua{context.setvalue("\strippedcsname#1", #2-#3)}} \def\FPmul#1#2#3% #1 = #2 * #3 {\ctxlua{context.setvalue("\strippedcsname#1", #2*#3)}} \def\FPdiv#1#2#3% #1 = #2 / #3 {\ctxlua{context.setvalue("\strippedcsname#1", #2/#3)}} \保护
如果需要,可以以类似的方式定义其他函数。作为奖励,这适用于 lua 识别的任何数字格式(1e6 等)。没有错误检查,因此除以零会得到 inf。例如:
\开始文本 \FPadd\ADD{10.2}{1e6} \FPsub\SUB{10.2}{13.5} \FPmul\MUL{10.2}{13.5} \FPdiv\DIV{10.2}{0} \起始行 \添加 \SUB \MUL \DIV \停止线 \停止文本
给出
1000010.2 -3.3 137.7 信息