是否可以使用 luamplib 将选项传递给 mpost.exe?

是否可以使用 luamplib 将选项传递给 mpost.exe?

我想使用带有 luamplib 的 metapost 开发版本。我已经切换了可执行文件 mpost.exe,据推测 luamplib 在某个时候会调用它。现在,我想将选项传递--math=double给,mpost.exe以便我可以对大于 4096 的数字执行计算。这可行吗?如果可以,那么该怎么做?我运行 Windows 7 和 miktex 2.9(如果相关)。

编辑,上述问题是基于对其工作原理的误解,Khaled 在下面的第一个评论中澄清了这一点:我到目前为止所做的(感谢 Khaled):

  1. 从以下网址下载最新的 luatex这里
  2. 用下载的版本(以及更新的格式和 FNDB,以防万一)替换了我的 miktex 文件夹中的二进制文件。
  3. 从以下位置下载 mplib 源代码这里并搜索了整个文件mplibapi.pdf
  4. 在第 7 页找到了参考mp_math_double_mode
  5. 查看了一下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

相关内容