我需要解析字体的绝对路径:
\setmainjfont[
Path = \currfileabsdir,
UprightFont = fonts/HGS_Mincho/HGRMB.ttc,
BoldFont = fonts/HGS_Mincho/HGRME.ttc
]{HGS Mincho}
该解决方案\usepackage[abspath]{currfile}
需要-recorder
选项,但我不使用控制台,并且设置-recorder
选项可能是不必要的例程。
其他基于lfs
库的解决方案,但如果我们只是像下面这样使用它,就会出现错误(至少在 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())}
/}
建议使用 catcodes 如下所示:
\edef\currfileabsdir{\directlua{tex.sprint(-2, lfs.currentdir())}/}
实际情况是,反斜杠将从绝对路径中删除,因此
C:Users/i/Documents/TeX/LuaLaTeX_Development/fonts/HGS_Mincho/HGRMB.ttc
变成
C:UsersmeDocumentsTeXLuaLaTeX_Development/fonts/HGS_Mincho/HGRMB.ttc
如何获取字体的正确绝对路径?
更新:MWE 提出了第一个解决方案
\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}
错误:
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}
答案1
您的代码失败,因为路径中使用的反斜杠在 Windows 中也是 lua 中的转义字符。由于路径传递到 lua 后端,因此需要使用另一个反斜杠来转义反斜杠。您可以使用 \luaescapestring 来实现这一点。
\edef\currfileabsdir{\luaescapestring{\directlua{tex.sprint(-2,lfs.currentdir())}}/}
或者如果您想在其他地方使用 \currfileabsdir,请将其添加\luaescapestring
到Path
:
\edef\currfileabsdir{\directlua{tex.sprint(-2,lfs.currentdir())}/}
\setmainjfont[
Path = \luaescapestring{\currfileabsdir},
....