![XeLaTeX w/ MiKTeX 产生“dvipdfmx:fatal: 无效字体:-1 (4)”错误](https://linux22.com/image/461573/XeLaTeX%20w%2F%20MiKTeX%20%E4%BA%A7%E7%94%9F%E2%80%9Cdvipdfmx%3Afatal%3A%20%E6%97%A0%E6%95%88%E5%AD%97%E4%BD%93%EF%BC%9A-1%20(4)%E2%80%9D%E9%94%99%E8%AF%AF.png)
我已尝试遵循以下所有步骤:
- XeLaTeX - 无效字体:-1
- XeLaTeX 仅在某些文件和某些计算机上产生“dvipdfmx:fatal: 无效字体:-1 (22)”错误
- 使用其他字体导致 xdvipdfmx:fatal: 无效字体:-1
但这些都无济于事。我尝试在字体配置文件中查找 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.ttf
(InterVariable-Italic.ttf
这些你不需要!)。您需要的是/extras/otf/
此 zip 文件夹中的文件。有 18 种Inter *
字体,如Inter-Regular.otf
,Inter-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
,链接问题中讨论了这一点。然而,这可能不相关,可能与我尝试了几种字体有关