53860


質問 [LuaLaTeX + luatexja-fontspec:
利用されるフォントを、直接プロジェクトフォルダから利用出来ますか？](https://ja.stackoverflow.com/questions/51658/lualatex-
luatexja-
fontspec-%E5%88%A9%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92-%E7%9B%B4%E6%8E%A5%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%8B%E3%82%89%E5%88%A9%E7%94%A8%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%99%E3%81%8B)において、プロジェクト内からフォントを取得するには、下記の解決が提案されました：

[code]

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

残念ながら、これはエラーを起こします：

[code]

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

色々調べて、不明コントロールシーケンスは`\Users`での`\`だと分かりました。解決するには、下記の解決が[提案されました](https://tex.stackexchange.com/a/482030/31274)：

[code]

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

でも、この解決は正しいパス区切りに差し替える事ではなく、これを削除する事をしています。このように、

[code]

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

は

[code]

    C:UsersiDocumentsTeXLuaLaTeX_Development/fonts/HGS_Mincho/HGRMB.ttc
    
[/code]

になります。どうすればよろしいでしょうか。

* * *

## 再現

[code]

    \documentclass[a4paper, twoside]{ltjsarticle}
    
    \usepackage{luatexja-fontspec}
    
    # 以前解決
    # \edef\currfileabsdir{\directlua{tex.sprint(lfs.currentdir())}/}
    
    \edef\currfileabsdir{\directlua{tex.sprint(lfs.currentdir():gsub('\string\\', '/'))}/}
    
    \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} 
    
[/code]


CC BY-SA 4.0
2019-03-30T00:07:52.173
53809
2019-04-02T01:50:09.087
2019-04-02T00:49:23.493
16876
16876
question
latex lua
Windows環境で\directluaを使って正しい絶対パスを取得する方法


単純な解決法ですが，Lua でパス中のすべての `\` を `/` に置き換えれば，"Undefined control sequence"
エラーを回避して目的のパスが得られると思います．

[code]

    \edef\currfileabsdir{\directlua{tex.sprint(lfs.currentdir():gsub('\string\\', '/'))}/}
    
[/code]


CC BY-SA 4.0
2019-04-01T13:55:47.453
53855
2019-04-01T13:55:47.453
27047
53809
answer


`gsub` は置換結果と共にマッチの合計数（ここでは `\` を `/` に置換した個数）も返します．式を括弧で囲んで次のようにすればよいと思います．

[code]

    \edef\currfileabsdir{\directlua{tex.sprint((lfs.currentdir():gsub('\string\\', '/')))}/}
    
[/code]


CC BY-SA 4.0
2019-04-02T01:50:09.087
53860
2019-04-02T01:50:09.087
32745
53809
answer