ConTeXt / e-TeX 实数?

ConTeXt / e-TeX 实数?

我已经使用 LaTeX 大约 6 年了,calc包很长一段时间了。因此,不能使用实数/浮点数从来都不是问题。

过去几天我一直在仔细阅读 ConTeXt 的文档,但还没有看到他们是否决定解决这个问题。看来 Lua 可能是答案,但目前我只是在努力通过 ConTeXt。

有没有e-TeX或者 ConTeXt 的方式来处理这个问题?我认为答案是否定的,但我想我会尝试一下。:)

答案1

当前的 ConTeXt 代码大量使用了\dimexpre \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
信息

答案4

pgfmath 部分怎么样前列腺素?我知道它可以在 ConTeXt 中使用,但我不知道它是否能为你提供全浮点运算。在尝试找出它对你有多大作用时,我还发现了这个关联其中还有一些其他有用的想法,特别是在评论中。

相关内容