
El paquete currfile
con la abspath
opción puede obtener la ruta absoluta del archivo actual. Sin embargo, depende de correr pdflatex
con la -recorder
bandera. ¿Sería posible lograr el mismo objetivo usando lualatex
?
Tenga en cuenta que lualatex
tiene el mismo conjunto de indicadores de línea de comando que pdlflatex
, por lo que, naturalmente, currfile
funcionaría lualatex
tal como funcionaría en pdflatex
. El desafío es utilizar lua
para extraer la información de la carpeta actual dentro del texto.sinconfiando en la -recorder
bandera.
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
nil
más una cadena de error.
¡Aquí vamos! Ahora escribamos nuestro .tex
archivo 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 \edef
versión en lugar de mi \newcommand
enfoque 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 \workingdir
se use en un \input
archivo.
Aquí está el resultado de muestra de mi máquina:
¡Aquí vamos!:)
Actualizar:Si no queremos "congelar" el valor del directorio de trabajo, creo que podemos confiar en mi primer intento usando \newcommand
en 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: