是否可以使用Lua取得目前工作目錄?

是否可以使用Lua取得目前工作目錄?

currfile帶有該選項的套件abspath可以獲得當前文件的絕對路徑。但是,它依賴於pdflatex帶有-recorder標誌的運行。使用 可以達到相同的目標嗎lualatex

請注意, 與lualatex具有相同的命令列標誌集pdlflatex,因此,自然currfilelualatex像在 中一樣工作pdflatex。挑戰是使用lua文字中提取當前資料夾訊息沒有依靠-recorder旗幟。

答案1

再次受到同儕壓力。:)

IIRC,純 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()總是按需發布。請記住,這兩種方法的差異相當大:

女神卡卡

相關內容