我想知道如何在 directlua 中使用 math.log10 函数,因为我总是无法从 directlua 中获得任何结果。
以下是一个最小的例子:
%Engine: LuaLaTeX;
%Encoding: UTF-8;
\documentclass[11pt,A4paper]{article}
\begin{document}
{\centering Function $\log$ - Example\par}
\noindent\directlua{tex.print(math.log(math.exp(1)))} is the natural logarithm
of $e$.\\
\directlua{tex.print(math.log10(100))} is the base-10 logarithm of 100.\\
\textbf{What is the mistake in the last sentence?}
\end{document}
答案1
math.log(x[, base])
返回给定底数的对数x
。底数的默认值为埃(使得函数返回的自然对数x
)。
看起来确实math.log10
存在,尽管官方在线参考手册中没有记录。然而,在 Lua 5.2 的一些修订版本中,它并不存在。
\documentclass[11pt,a4paper]{article}
\begin{document}
\directlua{tex.print(math.log(math.exp(1)))} is the natural logarithm
of $e$.
\directlua{tex.print(math.log(100,10))} is the base-10 logarithm of 100.
\end{document}
如果我使用 TeX Live 2012 或 2018(或 2019/pretest),则不会出现错误math.log10(100)
,但使用 TeX Live 2013、2014、2015、2016 和 2017 时会出现错误。
在 TeX Live 2019/pretest 中,LuaTeX 使用 Lua 5.3 添加一位小数,以明确这是一个浮点数而不是整数。
我比较了Lua的在线手册:
版本 5.1有
math.log10
math.log (x)
返回 x 的自然对数。math.log10 (x)
返回 x 的以 10 为底的对数。版本 5.2不是吗
math.log (x [, base])
返回给定底数的 x 的对数。底数的默认值为 e(因此该函数返回 x 的自然对数)。
我猜想,在某个时间点,math.log10
为了向后兼容,在 5.2 版的一些修订中也重新插入了该功能,并在 5.3 版中保留了该功能。LuaTeX 自 2013 年以来一直使用 Lua 5.2,这解释了其中的奥秘。
使用官方功能。
额外提供保罗塞雷达,您可以有条件地定义math.log10
:
\documentclass[11pt,a4paper]{article}
\directlua{math.log10 = math.log10 or function(x) return math.log(x, 10) end}
\begin{document}
\directlua{tex.print(math.log(math.exp(1)))} is the natural logarithm
of $e$.
\directlua{tex.print(math.log10(100))} is the base-10 logarithm of 100.
\end{document}
我测试了所有 TeX Live 版本,它都可以正常工作。根据 Paulo 的说法
如果
math.log10
被定义,它将返回function
(在条件中,除了 之外的一切都nil
解析为true
),因此逻辑运算因短路而结束。否则,该函数不存在(它将返回nil
),我们重新定义它(逻辑运算的第二部分)。