luamplib 创建意外文件

luamplib 创建意外文件

我编译了以下文件test.tex

\documentclass{article}
\usepackage{fontspec}
\usepackage{luamplib}

\begin{document}
  
\begin{mplibcode}
input metauml;
beginfig(1);
  Note.xxx("Hello");
  drawObjects(xxx);
  endfig;
  end
bye
\end{mplibcode}
\end{document}

使用lualatex -recorder test。没有录音机选项时也会出现此问题。

我面临的是本地文件夹中有很多文件,所有文件都是表格luamplib_input_metauml*_mp但都是空的。

当我打开时test.fls,我观察到如下几行:

INPUT /usr/share/texmf/metapost/metauml/metauml.mp
OUTPUT                 ./luamplib_input_metauml_mp
...
INPUT /usr/share/texmf/metapost/metauml/util_object.mp
OUTPUT                 ./luamplib_input_util_object_mp

这似乎是解释的一部分:lualatex似乎加载了几个与 metauml 相关的文件,但不知道它为什么写入这些神秘的文件。

luamplib 文档中有一些提示:来自文档

local function replaceinputmpfile (name,file)
167 local ofmodify = lfsattributes(file,”modification”)
168 if not ofmodify then return file end
169 local cachedir = luamplib.cachedir or outputdir
170 local newfile = name:gsub(”%W”,”_”)
171 newfile = cachedir ..”/luamplib_input_”..newfile   <-----------
172 if newfile and luamplibtime then
173 local nf = lfsattributes(newfile)
174 if nf and nf.mode == ”file” and
175 ofmodify == nf.modification and luamplibtime < nf.access then
176 return nf.size == 0 and file or newfile
177 end
178 end

我认为这可能是 lua...有人能告诉我这里发生了什么以及如何避免本地目录中的这些文件吗?

提前致谢。

答案1

这里有些混乱。我希望这能澄清一些问题:

  1. luamplib 目前不记录 mplib 执行的文件 i/o(即inputmetapost 代码中的语句)。对此的支持昨天才添加,在这次提交

  2. 您在文件中看到的输出的(许多)文件.fls是由 luamplib(而不是 metapost/mplib)创建的,以支持btex...etex;语句(请参阅 luamplib 手册第三页的“有关缓存文件的设置”)。

  3. 我有点惊讶这种机制仍然存在,因为几年来,它可以直接通过 metapost原语和 lua函数btex...etex;支持(luamplib 确实如此)。这可能是你应该问 luamplib 维护者的事情,我不是其中之一。maketexttex.runtoks()

  4. 这些文件的位置可以通过$TEXMFVAR环境变量来更改,更具体地说,可以使用\mplibcachedir{<directory path>}。(前一个环境变量的设置确实可能是两次安装之间唯一相关的区别。)

如果缓存文件真的让你烦恼,如果这确实是作为一个独立的 metapost 图形,你可以考虑使用(实验性的)minim-lamp 格式(来自最小量软件包)而不是 luamplib。请执行以下步骤。

  1. 创建文件test.mp内容:
verbatimtex
\usepackage{fontspec}
etex;

input metauml;

beginfig(1);
  Note.xxx("Hello");
  drawObjects(xxx);
endfig;

bye
  1. 请注意,任何乳胶前言内容都会进入该verbatimtex...etex;部分。

  2. 创建格式文件,因为它在 texlive 中默认未启用:

$ luatex --ini minim-lamp.ini
  1. 这将创建文件minim-lamp.fmt,现在可以使用它来将 luatex 变成独立的 metapost 处理器,如下所示:
$ luatex --fmt minim-lamp test.mp
  1. 扩展.mp名必须出现在命令行中。结果是一个 pdf 文件,其中每个图形都在其自己的页面上。

  2. --recorderminim-mp 目前也不支持在下一个版本中。

相关内容