
Пакет currfile
с abspath
опцией может получить абсолютный путь к текущему файлу. Однако он полагается на запуск pdflatex
с -recorder
флагом. Можно ли достичь той же цели с помощью lualatex
?
Обратите внимание, что lualatex
имеет тот же набор флагов командной строки, что и pdlflatex
, поэтому, естественно, currfile
будет работать в lualatex
так же, как и в pdflatex
. Задача состоит в том, чтобы использовать lua
для извлечения информации о текущей папке в текстебезопираясь на -recorder
флаг.
решение1
Опять давление со стороны сверстников.:)
IIRC, чистый Lua не имеет встроенного способа узнать текущий рабочий каталог, не прибегая к уловкам. К счастью, LuaTeX поставляется с удивительнымLuaFileSystem, который является«библиотека, разработанная для дополнения набора функций, связанных с файловыми системами, предлагаемых стандартным дистрибутивом Lua».
Theсправочный разделруководства 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()
всегда выдается по требованию. Пожалуйста, имейте в виду, что разница между этими двумя подходами довольно существенна: