我需要知道由-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_directory
C 源文件中的全局变量中,不幸的是它没有导出到 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
但我猜这也受到同样的限制。