Ist es möglich, mit Lua das aktuelle Arbeitsverzeichnis abzurufen?

Ist es möglich, mit Lua das aktuelle Arbeitsverzeichnis abzurufen?

Pakete currfilemit dieser abspathOption können den absoluten Pfad der aktuellen Datei abrufen. Allerdings muss das Paket pdflatexmit dem -recorderFlag ausgeführt werden. Wäre es möglich, dasselbe Ziel mit zu erreichen lualatex?

Beachten Sie, dass lualatexüber denselben Satz von Befehlszeilenflags wie verfügt pdlflatex, sodass natürlich in genauso currfilefunktioniert wie in . Die Herausforderung besteht darin, mit die aktuellen Ordnerinformationen innerhalb des Textes zu extrahieren .lualatexpdflatexluaohnesich auf die -recorderFlagge verlassen.

Antwort1

Wieder einmal Gruppenzwang.:)

Wenn ich mich richtig erinnere, gibt es bei reinem Lua keine eingebaute Möglichkeit, das aktuelle Arbeitsverzeichnis ohne Tricks herauszufinden. Glücklicherweise wird LuaTeX mit dem erstaunlichenLuaFileSystem, die ein"Bibliothek, die entwickelt wurde, um den Funktionsumfang der Dateisysteme der Lua-Standarddistribution zu ergänzen."

DerReferenzteildes LFS-Handbuchs zeigt einen Weg auf, wie wir unser Ziel erreichen können:

lfs.currentdir ()

Gibt eine Zeichenfolge mit dem aktuellen Arbeitsverzeichnis oder nilplus einer Fehlerzeichenfolge zurück.

Los geht’s! Jetzt schreiben wir unsere .texDatei basierend auf dieser Idee:

\documentclass{article}

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

\begin{document}

Hello, I'm in \workingdir

\texttt{\meaning\workingdir}

\end{document}

Vielen Dank an egreg für die Bereitstellung der \edefVersion anstelle meines ursprünglichen \newcommandAnsatzes. Auf diese Weise sollten Probleme mit Sonderzeichen im Pfad vermieden werden, und wenn es in die Präambel des Hauptdokuments eingefügt wird, ändert sich der Wert nicht, wenn \workingdires in einer Datei verwendet wird \input.

Hier ist die Beispielausgabe von meinem Computer:

Quacksalber

Na, bitte!:)

Aktualisieren:Wenn wir den Wert des Arbeitsverzeichnisses nicht „einfrieren“ möchten, können wir uns meiner Meinung nach auf meinen ersten Versuch verlassen, bei dem \newcommandanstelle von Folgendes verwendet wird \edef:

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

Auf diese Weise lfs.currentdir()wird immer auf Anfrage ausgestellt. Bitte beachten Sie, dass der Unterschied zwischen beiden Ansätzen recht groß ist:

Quacksalber

verwandte Informationen