我遇到了和某人曾经描述过的问题完全一样的问题这里,但不是在 Lyx-Context 中,因此那里显示的解决方案似乎不起作用。考虑以下设置:
在 texfile 中我使用了一些来自本地字体文件的字体:
\setmainfont[
Path = fonts/,
Ligatures = TeX,
UprightFont = Calibri.ttf,
BoldItalicFont= Calibri_Bold_Italic.ttf,
BoldFont = Calibri_Bold.ttf,
ItalicFont = Calibri_Italic.ttf
]{Calibri}
\newfontfamily[
Path = fonts/,
Ligatures = TeX,
UprightFont = Calibri_Light.ttf,
ItalicFont = Calibri_Light_Italic.ttf
]{Calibri_Light}
文件结构是
/texfolder
|
--texfile.tex
--/fonts
|
--Calibri.ttf
--...etc
我使用以下命令(bash)来渲染它:
lualatex "\input{/texfolder/texfile.tex}"
如果从文件夹中调用上述命令,则可行文件夹。但如果我从其他地方调用它,它就会无法找到字体文件,因为 lualatex 编译器会在调用它的文件夹中搜索它,而不是 tex 文件所在的文件夹中。我无法在 tex 文件中写入绝对路径,因为这是程序包的一部分,它在文件系统中的位置取决于用户。
我能做些什么?
- 是否有机会在这种情况下使用 \input@path 或等效项?
- 或者:有没有办法告诉 lualatex 命令它必须使用哪个工作目录?
- 或者:我可以用某种方式使用路径变量吗(而不是相对路径,如字体/)并在命令中提供此信息?
感谢您的帮助!
编辑1:
根据@Ulrike Fischer 的一些建议,我尝试了以下操作:
\usepackage[abspath]{currfile}
\message{path is \currfileabsdir}
\setmainfont[
Path = \currfileabsdir,
Ligatures = TeX,
UprightFont = calibri/Calibri.ttf,
BoldItalicFont= calibri/Calibri_Bold_Italic.ttf,
BoldFont = calibri/Calibri_Bold.ttf,
ItalicFont = calibri/Calibri_Italic.ttf
]{Calibri}
\newfontfamily[
Path = \currfileabsdir,
Ligatures = TeX,
UprightFont = calibri/Calibri_Light.ttf,
ItalicFont = calibri/Calibri_Light_Italic.ttf
]{Calibri_Light}
然后运行命令-录音机。这似乎是正确的跟踪,但仍然不起作用。我收到以下错误,但我不知道这意味着什么:
luaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: "Font P not found.".
答案1
感谢@Ulrike Fischer 的提示,我可以解决这个问题:
\usepackage{fontspec}
\usepackage[abspath]{currfile}
\usepackage[english]{babel}
\setmainfont[
Path = \currfileabsdir,
Ligatures = TeX,
UprightFont = calibri/Calibri.ttf,
BoldItalicFont= calibri/Calibri_Bold_Italic.ttf,
BoldFont = calibri/Calibri_Bold.ttf,
ItalicFont = calibri/Calibri_Italic.ttf
]{Calibri}
\newfontfamily\CalibriLight[
Path = \currfileabsdir,
Ligatures = TeX,
UprightFont = calibri/Calibri_Light.ttf,
ItalicFont = calibri/Calibri_Light_Italic.ttf
]{Calibri_Light}
然后运行命令-录音机。起初我犯了一个错误,没有提供一个合适的名字新字体系列。