
currfile
帶有該選項的套件abspath
可以獲得當前文件的絕對路徑。但是,它依賴於pdflatex
帶有-recorder
標誌的運行。使用 可以達到相同的目標嗎lualatex
?
請注意, 與lualatex
具有相同的命令列標誌集pdlflatex
,因此,自然currfile
會lualatex
像在 中一樣工作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()
總是按需發布。請記住,這兩種方法的差異相當大: