我想使用带有 luamplib 的 metapost 开发版本。我已经切换了可执行文件 mpost.exe,据推测 luamplib 在某个时候会调用它。现在,我想将选项传递--math=double
给,mpost.exe
以便我可以对大于 4096 的数字执行计算。这可行吗?如果可以,那么该怎么做?我运行 Windows 7 和 miktex 2.9(如果相关)。
编辑,上述问题是基于对其工作原理的误解,Khaled 在下面的第一个评论中澄清了这一点:我到目前为止所做的(感谢 Khaled):
- 从以下网址下载最新的 luatex这里
- 用下载的版本(以及更新的格式和 FNDB,以防万一)替换了我的 miktex 文件夹中的二进制文件。
- 从以下位置下载 mplib 源代码这里并搜索了整个文件
mplibapi.pdf
。 - 在第 7 页找到了参考
mp_math_double_mode
。 - 查看了一下
luamplib.lua
,并推断可以在函数中传递选项
function load()
local mpx = mplib.new {
find_file = finder,
ini_version = true,
math_mode = mp_math_double_mode,<--edit here
}
mpx:execute(format("input %s ;", currentformat))
return mpx
end
我添加了指示的行。仍然没有运气。
答案1
正如我在评论中所说,使用当前的 CTAN 版本,luamplib
不再需要查看 luamplib 的代码来访问“double”“numbersystem”选项(它不再称为“math”)。这里我给出一个具体的例子:
\documentclass{article}
\usepackage{luamplib}
% Allow the list of MP pictures below to be moved horizontally
% via LaTeX commands and environments
\everymplib{verbatimtex \leavevmode etex; beginfig(0);}
\everyendmplib{endfig; verbatimtex \leavevmode etex;}
\begin{document}
\begin{center}
\mplibnumbersystem{double}
\begin{mplibcode}
draw textext("Double number system: $\sqrt2 =" & decimal sqrt 2 & "$.");
\end{mplibcode}\\
\mplibnumbersystem{scaled} % return to default
\begin{mplibcode}
draw textext("Scaled number system: $\sqrt2 =" & decimal sqrt 2 & "$.");
\end{mplibcode}\\
\mplibnumbersystem{double}
\begin{mplibcode}
draw textext("Big number: $10^9 =" & decimal 1e9 & "$.");
\end{mplibcode}
\end{center}
\end{document}
结果:
看luamplib
的文档更多细节。
numbersystem
编辑:我已添加一个例子,说明当设置为时MetaPost 接受科学计数法double
。
答案2
问题不在于上面的命令(即,下面代码中的其中一行注释应该可以工作),而是 MikTex 运行的是旧版本的 luatex 二进制文件(beta-0.70……),无法通过简单地替换二进制文件来更新。
function load()
local mpx = mplib.new {
find_file = finder,
ini_version = true,
--math_mode = 1,
--math_mode = double,
--math_mode = mp_math_mode_double,
}
mpx:execute(format("input %s ;", currentformat))
return mpx
end