# LuaLaTeX: How to correctly resolve absolute path with \directlua on Windows

I need to resolve absolute path to fonts:

\setmainjfont[
Path          = \currfileabsdir,
UprightFont   = fonts/HGS_Mincho/HGRMB.ttc,
BoldFont      = fonts/HGS_Mincho/HGRME.ttc
]{HGS Mincho}


The solution \usepackage[abspath]{currfile} requires -recorder option, but I don't use console, and setup -recorder option is potentially unnecessary routine.

Other solution based on lfs library, but if we just use it as shown below, error will occur (at least, in Windows):

\edef\currfileabsdir{\directlua{tex.sprint(lfs.currentdir())}/}

! Undefined control sequence.
l.1 C:\Users
\i\Documents\TeX\LuaLaTeX_Development
l.6 ...sdir{\directlua{tex.sprint(lfs.currentdir())}
/}


It was recommended to use catcodes as shown below:

\edef\currfileabsdir{\directlua{tex.sprint(-2, lfs.currentdir())}/}


What really will be is backslashes will be removed from absolute path, so

C:Users/i/Documents/TeX/LuaLaTeX_Development/fonts/HGS_Mincho/HGRMB.ttc


becomes to

C:UsersmeDocumentsTeXLuaLaTeX_Development/fonts/HGS_Mincho/HGRMB.ttc


How I get correct absolute path to font?

## Update: MWE with first suggested solution

\documentclass[a4paper, twoside]{ltjsarticle}

\usepackage{luatexja-fontspec}

\makeatletter
\edef\currfileabsdir{\directlua{tex.sprint(\the\catcodetable@string, lfs.currentdir())}/}
\makeatother

\setmainjfont[
Path          = \currfileabsdir,
UprightFont   = fonts/HGS_Mincho/HGRMB.ttc,
BoldFont      = fonts/HGS_Mincho/HGRME.ttc
]{HGS Mincho}

\setsansjfont[
Path          = \currfileabsdir,
UprightFont   = fonts/HGS_Gothic/HGRGM.ttc,
BoldFont      = fonts/HGS_Gothic/HGRGE.ttc,
]{HGS Gothic}

\begin{document}
日本語文字  Latin letters Кириллица
\end{document}


Error:

luaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: "File not found: C:UsersiDocumentsTeXLuaLaTeX_Development/fonts/HGS_Mincho/HGRMB.ttc.".

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! fontspec error: "font-not-found"
!
! The font "fonts/HGS_Mincho/HGRMB.ttc" cannot be found.
!
! See the fontspec documentation for further information.
!
! For immediate help type H <return>.
!...............................................

l.13 ]{HGS Mincho}


Your code fails as the backslash used on windows in the path is in lua also the escape char. As the path is passed on to the lua backend one need to escape the backslash with another backslash. You can use \luaescapestring for this.

\edef\currfileabsdir{\luaescapestring{\directlua{tex.sprint(-2,lfs.currentdir())}}/}


Or if you want to use \currfileabsdir also in other places, add the \luaescapestring to the Path:

\edef\currfileabsdir{\directlua{tex.sprint(-2,lfs.currentdir())}/}
\setmainjfont[
Path          = \luaescapestring{\currfileabsdir},
....

• There must be something else wrong with OP's code, which they haven't told us. Catcode table -2 is hardcoded: github.com/TeX-Live/luatex/blob/… – Henri Menke Apr 1 '19 at 9:01
• @HenriMenke yes I guess too. That's why I showed a complete example ... – Ulrike Fischer Apr 1 '19 at 9:43
• @UlrikeFischer, Thank you for the answer. Unfortunately, nothing changed. I added MWE with your solution in question filed. Please, take a look. – Gurebu Bokofu Apr 1 '19 at 10:48
• Add \show\currfileabsdir directly after the \makeatother, compile, (hit enter when it stops at the \show) and then show the log-file. – Ulrike Fischer Apr 1 '19 at 10:54
• I edited the answer. – Ulrike Fischer Apr 1 '19 at 13:24