\NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{currfile-abspath}[% 2024/03/14 v1.0 Provides absolute file paths, the parent working directory and the main file name] \newcommand*\thepwd{} \newcommand*\theabspath{} \newcommand*\theabsdir{} \newcommand*\themainfile{} \newif\ifcurrfile@abspath@windows \providecommand\currfile@mainext{tex} \ifx\currfile@mainext\@empty \PackageError{currfile-abspath} {Empty main file extension is not supported}{}% \fi \def\currfile@abspath@noflswarning{% \PackageWarning{currfile-abspath} {The required recorder file (.fls) was not found.\MessageBreak Please compile with the '-recorder' option.\MessageBreak Note that MikTeX requires two compiler runs.\MessageBreak Occurred}% \global\let\currfile@abspath@noflswarning\relax \global\csname currfile@abspathfalse\endcsname }% \newcommand\getpwd{% \begingroup \let\thepwd\@empty \IfFileExists{\jobname.fls}{% \openin\@inputcheck=\jobname.fls\relax \endlinechar\m@ne \loop \readline\@inputcheck to \line \@onelevel@sanitize\line \expandafter\currfile@checkpwd\line\relax\relax\relax\relax\relax \ifeof\@inputcheck\else \repeat \closein\@inputcheck } \currfile@abspath@noflswarning \edef\@tempa{% \def\noexpand\thepwd{\thepwd}% }% \expandafter \endgroup \@tempa } \def\currfile@checkpwd#1#2#3#4#5\relax{% \edef\@tempa{#1#2#3}% \edef\@tempb{PWD}% \@onelevel@sanitize\@tempb \ifx\@tempa\@tempb \edef\thepwd{#4#5/}% \def\@tempa{#4}% \def\@tempb{/}% \ifx\@tempa\@tempb \currfile@abspath@windowsfalse \else \currfile@abspath@windowstrue \fi \let\iterate\relax \fi } \newcommand\getabspath[1]{% \begingroup \edef\filename{#1}% \@onelevel@sanitize\filename% \let\theabspath\@empty \let\theabsdir\@empty \IfFileExists{\filename}{% \IfFileExists{\jobname.fls}{% \openin\@inputcheck=\jobname.fls\relax \endlinechar\m@ne \expandafter\currfile@abspath@defs\expandafter{\filename}% \readline\@inputcheck to \line \@onelevel@sanitize\line \expandafter\currfile@checkpwd\line\relax\relax\relax\relax\relax \loop \readline\@inputcheck to \line \@onelevel@sanitize\line \expandafter\currfile@abspath@getabspath\expandafter{\line}% \ifeof\@inputcheck\else \repeat \closein\@inputcheck }\currfile@abspath@noflswarning }{}% \edef\@tempa{% \def\noexpand\theabspath{\theabspath}% \def\noexpand\theabsdir{\theabsdir}% \def\noexpand\thepwd{\thepwd}% }% \expandafter \endgroup \@tempa } \newcommand\getmainfile{% \begingroup \let\themainfile\@empty \IfFileExists{\jobname.fls}{% \openin\@inputcheck=\jobname.fls\relax \endlinechar\m@ne \readline\@inputcheck to \line \@onelevel@sanitize\line \expandafter\currfile@checkpwd\line\relax\relax\relax\relax\relax \loop \readline\@inputcheck to \line \@onelevel@sanitize\line \expandafter\currfile@abspath@getmainfile\expandafter{\line}% \ifeof\@inputcheck\else \repeat \closein\@inputcheck }% \currfile@abspath@noflswarning \edef\@tempa{% \def\noexpand\themainfile{\themainfile}% \def\noexpand\thepwd{\thepwd}% }% \expandafter \endgroup \@tempa } \def\currfile@abspath@testfname#1#2#3\relax{% \ifcurrfile@abspath@windows \def\@tempa{#2}% \def\@tempb{:}% \else \def\@tempa{#1}% \def\@tempb{/}% \fi \ifx\@tempa\@tempb\else \let\theabsdir\thepwd \fi } \begingroup \catcode`I=12 \catcode`N=12 \catcode`P=12 \catcode`U=12 \catcode`T=12 \gdef\currfile@abspath@defs#1{% \def\currfile@abspath@checkabspath ##1INPUT ##2#1\relax##3\relax##4\@nnil{% \ifx\@empty##4\@empty\else \def\theabsdir{##2}% \ifx\theabsdir\@empty \currfile@abspath@testfname#1\@empty\@empty\relax \fi \edef\theabspath{\theabsdir#1}% \let\iterate\relax \fi }% \def\currfile@abspath@getabspath##1{% \currfile@abspath@checkabspath##1\relax INPUT \@empty#1\relax{}\relax\@nnil }% } \def\@tempa#1{% \gdef\currfile@abspath@checkmainfile ##1INPUT ##2#1\relax##3\relax##4\@nnil{% \ifx\@empty##4\@empty\else \def\themainfile{##2#1}% \let\iterate\relax \fi }% \gdef\currfile@abspath@getmainfile##1{% \currfile@abspath@checkmainfile##1\relax INPUT \@empty#1\relax{}\relax\@nnil }% } \edef\@tempb{.\currfile@mainext} \@onelevel@sanitize\@tempb \expandafter\@tempa\expandafter{\@tempb} \endgroup \endinput %% %% End of file `currfile-abspath.sty'.