¿Es posible utilizar Lua para obtener el directorio de trabajo actual?

¿Es posible utilizar Lua para obtener el directorio de trabajo actual?

El paquete currfilecon la abspathopción puede obtener la ruta absoluta del archivo actual. Sin embargo, depende de correr pdflatexcon la -recorderbandera. ¿Sería posible lograr el mismo objetivo usando lualatex?

Tenga en cuenta que lualatextiene el mismo conjunto de indicadores de línea de comando que pdlflatex, por lo que, naturalmente, currfilefuncionaría lualatextal como funcionaría en pdflatex. El desafío es utilizar luapara extraer la información de la carpeta actual dentro del texto.sinconfiando en la -recorderbandera.

Respuesta1

La presión de grupo una vez más.:)

IIRC, Pure Lua no tiene una forma integrada de averiguar el directorio de trabajo actual sin recurrir a engaños. Afortunadamente, LuaTeX viene con la increíbleSistema de archivos Lua, el cual es un"Biblioteca desarrollada para complementar el conjunto de funciones relacionadas con los sistemas de archivos que ofrece la distribución estándar Lua."

Elsección de referenciadel manual LFS indica una manera de lograr lo que queremos:

lfs.currentdir ()

Devuelve una cadena con el directorio de trabajo actual o nilmás una cadena de error.

¡Aquí vamos! Ahora escribamos nuestro .texarchivo basándonos en esta idea:

\documentclass{article}

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

\begin{document}

Hello, I'm in \workingdir

\texttt{\meaning\workingdir}

\end{document}

Gracias a egreg por proporcionar la \edefversión en lugar de mi \newcommandenfoque original; de esa manera, debería evitar problemas con caracteres especiales en la ruta, y si se coloca en el preámbulo del documento principal, el valor no cambiará cuando \workingdirse use en un \inputarchivo.

Aquí está el resultado de muestra de mi máquina:

Curandero

¡Aquí vamos!:)

Actualizar:Si no queremos "congelar" el valor del directorio de trabajo, creo que podemos confiar en mi primer intento usando \newcommanden lugar de usar \edef:

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

De esta forma, lfs.currentdir()siempre se emite bajo demanda. Tenga en cuenta que la diferencia entre ambos enfoques es bastante sustancial:

Curandero

información relacionada