是否可以使用 Lua 获取当前工作目录?

是否可以使用 Lua 获取当前工作目录?

currfile带有选项的包abspath可以获取当前文件的绝对路径。但是,它依赖于pdflatex使用-recorder标志运行。是否可以使用 实现相同的目的lualatex

请注意,lualatex具有与相同的命令行标志集pdlflatex,因此,在中自然可以像在中一样currfile工作。挑战在于使用提取文本中的当前文件夹信息lualatexpdflatexlua没有依靠-recorder旗帜。

答案1

再次面临同伴压力。:)

如果我没记错的话,纯 Lua 没有内置方法来找出当前的工作目录,除非借助于技巧。幸运的是,LuaTeX 附带了令人惊叹的Lua文件系统,这是一个“为补充标准 Lua 发行版提供的与文件系统相关的函数集而开发的库。”

参考部分LFS 手册指出了实现我们想要的目标的方法:

lfs.currentdir ()

返回包含当前工作目录的字符串或nil加上错误字符串。

好了!现在让我们.tex根据这个想法编写文件:

\documentclass{article}

\edef\workingdir{\unexpanded\expandafter{\directlua{tex.write(lfs.currentdir())}}}

\begin{document}

Hello, I'm in \workingdir

\texttt{\meaning\workingdir}

\end{document}

感谢 egreg 提供的\edef版本而不是我原来的方法;这样,它应该可以避免路径中特殊字符的问题,并且如果放在主文档的序言中,则在文件中使用\newcommand时该值不会改变。\workingdir\input

这是我的机器的示例输出:

嘎嘎

好了!:)

更新:如果我们不想“冻结”工作目录值,我相信我们可以依靠我的第一次尝试使用\newcommand而不是使用\edef

\newcommand{\actualworkingdir}{%
\unexpanded\expandafter{\directlua{tex.write(lfs.currentdir())}}}

这样,lfs.currentdir()总是按需发放。请记住,这两种方法的区别相当大:

嘎嘎

相关内容