在Luatex中,如何知道有效的输出目录?

在Luatex中,如何知道有效的输出目录?

我需要知道由-outdir-output-dir命令行开关设置的实际输出目录是什么,因为我正在执行外部程序,并且需要为它们提供要使用的辅助文件的确切位置,类似于这个尚未解答的问题

不同之处在于我使用的是 LuaLaTeX,因此可能有新的或更简单的方法来解决这个问题。

为了测试,我尝试在文档中打印该目录,但\directlua{tex.print(status.list()["output_file_name"])}只给出了基本名称并\directlua{tex.print(os.env["PWD"])}给出了进程的工作目录,而该目录并未像我希望的那样设置为 outdir。

答案1

传递给 luatex 的参数存储在 lua 表中arguments。它们通过传递的键进行索引。

要找到此类信息,您可以搜索_G(或更一般地,_ENV)表,其中所有 lua 全局变量均被索引。

有一个lua 网站上的自省脚本为了这。

顺便说一下,lua 有.语法糖来引用表中的字符串键。例如:os.env["PWD"]os.env.PWD

下面我无法执行此操作,"output-directory"因为-

输出

如果我已经用编译了我的文件lualatex --output-dir=myOutDir myf.tex,我会得到:

在此处输入图片描述

代码

\RequirePackage{luatex85}
\documentclass[12pt]{standalone}
\usepackage{luacode}
\usepackage{fourier}
\begin{luacode*}
  function passedOutputDir()
    return arguments["output-directory"] or "noPassedOutputDir"
  end
\end{luacode*}
\begin{document}
Passed output dir : 
\directlua{tex.print(passedOutputDir())}
\end{document}

答案2

该值存储在output_directoryC 源文件中的全局变量中,不幸的是它没有导出到 Lua。

我认为可以做类似的事情kpse.find_file("a.log"),但尽管声称它应该有效,但却不起作用。

我发现一个解决方法(虽然不好看但是有效)就是使用open_read_file回调,写入某个临时文件(只需使用 jobname.log 就可以了,不需要临时文件,但不确定 MiKTeX),然后从中读取,并从传递给文件的参数中获取文件名。

替代方案包括读取记录器文件,类似于其他引擎的方法,但需要-recorder 标志,并且无法确定一个编译有标志而下一个编译没有的情况。


附注:只有arg表格可以保证工作,但解析它非常困难。可能的参数格式包括

-output-directory=a/
--output-directory=a/
-output-directory a/
--output-directory a/
-output-d a/

所以很难解析。

arguments表似乎是旧版本中的一些全局变量泄漏,现在只能在例如中找到luaotfload.fontloader.arguments,但是该表仅处理上述列表的某些格式,因此不可靠。

还有,utilities.parsers.arguments_to_table但我猜这也受到同样的限制。

相关内容