É possível usar Lua para obter o diretório de trabalho atual?

É possível usar Lua para obter o diretório de trabalho atual?

O pacote currfilecom a abspathopção pode obter o caminho absoluto do arquivo atual. No entanto, depende de correr pdflatexcom a -recorderbandeira. Seria possível atingir o mesmo objetivo usando lualatex?

Observe que ele lualatextem o mesmo conjunto de sinalizadores de linha de comando que o pdlflatex, portanto, naturalmente currfilefuncionaria da lualatexmesma forma que funcionaria no pdflatex. O desafio é usar luapara extrair as informações da pasta atual dentro do textosemconfiando na -recorderbandeira.

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 nilmais uma string de erro.

Aqui vamos nós! Agora vamos escrever nosso .texarquivo 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 \edeforiginal ; \newcommanddessa 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 \workingdirfor utilizado em um \inputarquivo.

Aqui está o exemplo de saída da minha máquina:

Charlatão

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 \newcommandem 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:

Charlatão

informação relacionada