
O pacote currfile
com a abspath
opção pode obter o caminho absoluto do arquivo atual. No entanto, depende de correr pdflatex
com a -recorder
bandeira. Seria possível atingir o mesmo objetivo usando lualatex
?
Observe que ele lualatex
tem o mesmo conjunto de sinalizadores de linha de comando que o pdlflatex
, portanto, naturalmente currfile
funcionaria da lualatex
mesma forma que funcionaria no pdflatex
. O desafio é usar lua
para extrair as informações da pasta atual dentro do textosemconfiando na -recorder
bandeira.
Responder1
Pressão dos colegas mais uma vez.:)
IIRC, Lua pura não possui uma maneira integrada de descobrir o diretório de trabalho atual sem recorrer a truques. Felizmente, o LuaTeX é enviado com o incrívelLuaFileSystem, que é um"biblioteca desenvolvida para complementar o conjunto de funções relacionadas aos sistemas de arquivos oferecidos pela distribuição padrão Lua."
Oseção de referênciado manual LFS indica uma maneira de alcançar o que queremos:
lfs.currentdir ()
Retorna uma string com o diretório de trabalho atual ou
nil
mais uma string de erro.
Aqui vamos nós! Agora vamos escrever nosso .tex
arquivo com base nesta ideia:
\documentclass{article}
\edef\workingdir{\unexpanded\expandafter{\directlua{tex.write(lfs.currentdir())}}}
\begin{document}
Hello, I'm in \workingdir
\texttt{\meaning\workingdir}
\end{document}
Obrigado ao egreg por fornecer a versão em vez da minha abordagem \edef
original ; \newcommand
dessa forma, deve-se evitar problemas com caracteres especiais no caminho, e se colocado no preâmbulo do documento principal, o valor não mudará quando \workingdir
for utilizado em um \input
arquivo.
Aqui está o exemplo de saída da minha máquina:
Aqui vamos nós!:)
Atualizar:Se não quisermos "congelar" o valor do diretório de trabalho, acredito que podemos confiar na minha primeira tentativa usando \newcommand
em vez de usar \edef
:
\newcommand{\actualworkingdir}{%
\unexpanded\expandafter{\directlua{tex.write(lfs.currentdir())}}}
Dessa forma, lfs.currentdir()
é sempre emitido sob demanda. Tenha em mente que a diferença entre ambas as abordagens é bastante substancial: