
Pakete currfile
mit dieser abspath
Option können den absoluten Pfad der aktuellen Datei abrufen. Allerdings muss das Paket pdflatex
mit dem -recorder
Flag 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 currfile
funktioniert wie in . Die Herausforderung besteht darin, mit die aktuellen Ordnerinformationen innerhalb des Textes zu extrahieren .lualatex
pdflatex
lua
ohnesich auf die -recorder
Flagge 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
nil
plus einer Fehlerzeichenfolge zurück.
Los geht’s! Jetzt schreiben wir unsere .tex
Datei 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 \edef
Version anstelle meines ursprünglichen \newcommand
Ansatzes. 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 \workingdir
es in einer Datei verwendet wird \input
.
Hier ist die Beispielausgabe von meinem Computer:
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 \newcommand
anstelle 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: