XeLaTeX w/ MiKTeX 产生“dvipdfmx:fatal: 无效字体:-1 (4)”错误

XeLaTeX w/ MiKTeX 产生“dvipdfmx:fatal: 无效字体:-1 (4)”错误

我已尝试遵循以下所有步骤:

但这些都无济于事。我尝试在字体配置文件中查找 type1 行,但它根本不存在。我尝试将所有 TrueType 字体转换为 OpenType,但没有成功。我还尝试在 localfonts.conf 文件中添加一行 truetype。

我附加了屏幕截图、文档日志文件和 XeLaTeX 日志文件。 输出截图 https://drive.google.com/file/d/1YmKcz2lh13WXVQO33qPZP0tQatZoiU8E/view?usp=sharing
https://drive.google.com/file/d/1zKYbuJRMzlKBndg88a1cdvszLaSJzQmm/view?usp=sharing

编辑:这是 sty 文件中的字体声明:

\DeclareOption{fonts}{\setboolean{TULf@nts}{true}}

\DeclareOption{noheader}{\noTULheader}

\pagestyle{TUL}

\ProcessOptions

% aktivace pisem
\ifthenelse{\boolean{TULf@nts}}{
    \RequirePackage{fontspec}
    \setmainfont[Mapping=tex-text,BoldFont={* Bold}]{Inter}
    \setsansfont[Mapping=tex-text,BoldFont={* Bold}]{Inter}
    \setmonofont{Noto Sans Mono}
    \newfontfamily\TULmono[Ligatures=Contextual]{TUL Mono}
}{
    \newcommand\TULmono{\sffamily\bfseries}
}

这正是我的文档的第一行:

\documentclass[FM,BP,fonts]{tulthesis}

编辑 2:我尝试在安装了全新 MiKTeX 的旧台式机上使用它,它在那里运行完美。然而,即使在我的笔记本电脑上第二次重新安装 MiKTeX 后,它仍然会弹出相同的错误,我不知道为什么。

答案1

可变字体

根据代码片段判断,您的TUL模板使用了该Inter字体。这是一种可变字体,因此问题似乎出在 XeLaTeX 中使用可变粗细字体。

(注意:虽然可变字体通常带有一系列静态文件,并且该行\setmainfont[Mapping=tex-text,BoldFont={* Bold}]{Inter}暗示存在一种Inter Bold字体 [这就是* Bold计算结果]。我不确定这部分。也许模板假设 Inter 是通过静态文件安装的,而不是作为可变字体安装的,而您的字体设置不同。请参阅下面的静态文件讨论)

背景

当我尝试使用变量字体(如EB Garamond或 )时,我自己也遇到了同样的错误Noto Serif。文档日志中没有错误,只有xelatex.log(通常在 处可用C:\Users\<username\AppData\Local\MiKTeX\miktex\log)中才有错误。以下是相关代码片段:

2024-04-26 19:34:06,702+0300 INFO  xelatex - running on Windows 10.0.22631
2024-04-26 19:34:06,707+0300 INFO  xelatex - this is MiKTeX-XETEX 4.11.0 (0.999996) (MiKTeX 24.3.31)
2024-04-26 19:34:06,725+0300 INFO  xelatex - allowing known shell commands
2024-04-26 19:34:21,695+0300 INFO  xelatex.core - start process: miktex-dvipdfmx.exe -q -E -o main.pdf
2024-04-26 19:34:23,734+0300 FATAL xelatex.core - Invalid argument
2024-04-26 19:34:23,734+0300 FATAL xelatex.core - Function: fwrite
2024-04-26 19:34:23,734+0300 FATAL xelatex.core - Result: 22
2024-04-26 19:34:23,734+0300 FATAL xelatex.core - Data: <no data>
2024-04-26 19:34:23,734+0300 FATAL xelatex.core - Source: Libraries\MiKTeX\TeXAndFriends\include\miktex/C4P/C4P.h:531
2024-04-26 19:34:23,737+0300 FATAL xelatex - Invalid argument
2024-04-26 19:34:23,737+0300 FATAL xelatex - Info: 
2024-04-26 19:34:23,737+0300 FATAL xelatex - Source: Libraries\MiKTeX\TeXAndFriends\include\miktex/C4P/C4P.h
2024-04-26 19:34:23,737+0300 FATAL xelatex - Line: 531
2024-04-26 19:34:23,740+0300 INFO  xelatex - this process (43648) finishes with exit code 1

但是,同一文档可以使用其他字体(例如)完美编译Charis SIL

根据拖船讨论以及fontspec 手册,第 III.7 节“可变字体”目前,XeLaTeX 不支持可变字体。

但是,LuaLaTeX 可以很好地处理可变字体。事实上,使用 LuaLaTeX 重新编译同一个文档可以修复所有问题并EB Garamond开始Noto Serif工作。

解决方案

所以我看到了两种解决方案。

  • 有可能,你可以将编译器更改为 LuaLaTeX
    它适用于可变字体。在这种情况下,您可能需要BoldFont=...\set____font命令调用中删除。因此更改

    • \setmainfont[Mapping=tex-text,BoldFont={* Bold}]{Inter}\setmainfont[Mapping=tex-text]{Inter}
    • \setsansfont[Mapping=tex-text,BoldFont={* Bold}]{Inter}\setsansfont[Mapping=tex-text]{Inter}
  • 您可以尝试确保您的系统上没有Inter Variable安装安装一系列静态 Inter 字体
    在回答这个问题时,已下载从这里Inter font 是一个 zip 包,最上层有InterVariable.ttfInterVariable-Italic.ttf这些你不需要!)。您需要的是/extras/otf/此 zip 文件夹中的文件。有 18 种Inter *字体,如Inter-Regular.otfInter-Bold.otf等等。最简单的方法是安装所有 18 种。(InterDisplay *此文件夹中也有 18 种字体,但无关紧要)。
    更简单的选择可能是Inter.ttc在 zip 中进行选择,它提供了所有 36 个文件供您考虑。(再次强调,您实际上只需要Inter *,而不是InterDisplay)。

一切可能在您的旧机器上运行正常,这可能是由于编译器的差异(LuaLaTeX 而不是 XeLaTeX)或字体安装的差异(安装了 18 个静态字体而不是 2 个变量字体)。

各种各样的

我不清楚,但这可能与XeLaTeX 仅在某些文件和某些计算机上产生“dvipdfmx:fatal: 无效字体:-1 (22)”错误

大约在同一时间,在 miktex 日志(C:\ProgramData\MiKTeX\miktex\log\miktex-console_admin.log)中我可以看到:

2024-04-26 19:00:32,622+0300 WARN  miktex-console.packagemanager - dependency problem: luxi is required by _miktex-fonts-type1

请注意-fonts-type1,链接问题中讨论了这一点。然而,这可能不相关,可能与我尝试了几种字体有关

相关内容