currfile
带有选项的包abspath
可以获取当前文件的绝对路径。但是,它依赖于pdflatex
使用-recorder
标志运行。是否可以使用 实现相同的目的lualatex
?
请注意,lualatex
具有与相同的命令行标志集pdlflatex
,因此,在中自然可以像在中一样currfile
工作。挑战在于使用提取文本中的当前文件夹信息lualatex
pdflatex
lua
没有依靠-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()
总是按需发放。请记住,这两种方法的区别相当大: