Windows環境でdirectluaを使って正しい絶対パスを取得する方法

投稿者: Anonymous

質問 LuaLaTeX + luatexja-fontspec: 利用されるフォントを、直接プロジェクトフォルダから利用出来ますか?において、プロジェクト内からフォントを取得するには、下記の解決が提案されました:

edefcurrfileabsdir{directlua{tex.sprint(lfs.currentdir())}/}

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

! Undefined control sequence.
l.1 C:Users
          iDocumentsTeXLuaLaTeX_Development
l.6 ...sdir{directlua{tex.sprint(lfs.currentdir())}
                                                  /}

色々調べて、不明コントロールシーケンスはUsersでのだと分かりました。解決するには、下記の解決が提案されました

edefcurrfileabsdir{directlua{tex.sprint(-2, lfs.currentdir())}/}

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

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

C:UsersiDocumentsTeXLuaLaTeX_Development/fonts/HGS_Mincho/HGRMB.ttc

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


再現

documentclass[a4paper, twoside]{ltjsarticle}

usepackage{luatexja-fontspec}

# 以前解決
# edefcurrfileabsdir{directlua{tex.sprint(lfs.currentdir())}/}

edefcurrfileabsdir{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} 

解決

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

edefcurrfileabsdir{directlua{tex.sprint((lfs.currentdir():gsub('string\', '/')))}/}
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *