Lua を使用して現在の作業ディレクトリを取得することは可能ですか?

Lua を使用して現在の作業ディレクトリを取得することは可能ですか?

currfileオプション付きのパッケージはabspath、現在のファイルの絶対パスを取得できます。ただし、フラグpdflatex付きで実行する必要があり-recorderます。 を使用して同じ目的を達成することは可能でしょうかlualatex?

lualatexは と同じコマンドラインフラグのセットを持っていることに注意してくださいpdlflatex。したがって、は で動作するのと同じように当然currfile動作します。課題は、 を使用してテキスト内の現在のフォルダ情報を抽出することです。lualatexpdflatexluaそれなし旗に頼る-recorder

答え1

またしても同調圧力。:)

私の記憶が正しければ、純粋なLuaには、トリックに頼らずに現在の作業ディレクトリを見つける組み込みの方法はありません。ありがたいことに、LuaTeXには素晴らしいLuaファイルシステム、 これは「標準の Lua ディストリビューションによって提供されるファイル システムに関連する関数のセットを補完するために開発されたライブラリ。」

参照セクションLFS マニュアルには、私たちが望むことを実現する方法が示されています。

lfs.currentdir ()

現在の作業ディレクトリを含む文字列、nilまたはエラー文字列を返します。

.texさあ、始めましょう! では、このアイデアに基づいてファイルを作成しましょう:

\documentclass{article}

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

\begin{document}

Hello, I'm in \workingdir

\texttt{\meaning\workingdir}

\end{document}

\edef私のオリジナルのアプローチの代わりにバージョンを提供してくれた egreg に感謝します。この方法では、パス内の特殊文字に関する問題を回避でき、メイン ドキュメントのプリアンブルに配置すると、ファイルで使用した\newcommandときに値が変更されなくなります。\workingdir\input

私のマシンからのサンプル出力は次のとおりです。

クワック

さあ、行きましょう!:)

アップデート:作業ディレクトリの値を「固定」したくない場合は、 の\newcommand代わりに を使用した最初の試みに頼ることができると思います\edef

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

この方法では、lfs.currentdir()常に要求に応じて発行されます。 両方のアプローチの違いはかなり大きいことに留意してください。

クワック

関連情報