如何在 directlua 中使用 math.log10 函数?

如何在 directlua 中使用 math.log10 函数?

我想知道如何在 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

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.1math.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),我们重新定义它(逻辑运算的第二部分)。

相关内容