我有一系列使用相同字体设置和相同命令的讲座。其中有一两个在某台计算机上开始无法编译。在我使用的另外两台计算机上,在保证相同的目录环境中(因为相关位置都包含在同一个同步的 OneDrive 文件夹中),同一个文件可以完美编译。此外,在同一台计算机上,使用相同字体和相同设置和命令的其他文件也可以毫无问题地编译。
但是,某些有问题的文件会产生此错误:
dvipdfmx:fatal: Invalid font: -1 (22)
No output PDF file written.
然后我被建议查阅该xelatex.log
文件,在其中我可以找到可能包含相关信息的行:
2021-09-29 10:00:16,680+0200 INFO xelatex - this process (11704) started by 'texstudio' with command line: xelatex.exe -synctex=1 -interaction=nonstopmode Waves-Optics-hu.tex
2021-09-29 10:00:16,683+0200 INFO xelatex - this is MiKTeX-XETEX 4.5.0 (0.999993) (MiKTeX 21.8)
2021-09-29 10:00:16,690+0200 INFO xelatex - allowing known shell commands
2021-09-29 10:00:22,626+0200 INFO xelatex - executing input pipe: extractbb "--version"
2021-09-29 10:00:22,626+0200 INFO xelatex.core - starting input pipe: extractbb "--version"
2021-09-29 10:00:22,627+0200 INFO xelatex.core - start process: C:\Windows\system32\cmd.exe /c "extractbb "--version""
2021-09-29 10:00:25,346+0200 INFO xelatex.core - start process: miktex-dvipdfmx.exe -q -E -o Waves-Optics-hu.pdf
2021-09-29 10:00:29,736+0200 FATAL xelatex.core - Invalid argument
2021-09-29 10:00:29,737+0200 FATAL xelatex.core - Function: fwrite
2021-09-29 10:00:29,737+0200 FATAL xelatex.core - Result: 22
2021-09-29 10:00:29,737+0200 FATAL xelatex.core - Data: <no data>
2021-09-29 10:00:29,737+0200 FATAL xelatex.core - Source: Libraries\MiKTeX\TeXAndFriends\include\miktex/C4P/C4P.h:646
2021-09-29 10:00:29,738+0200 FATAL xelatex - Invalid argument
2021-09-29 10:00:29,738+0200 FATAL xelatex - Info:
2021-09-29 10:00:29,738+0200 FATAL xelatex - Source: Libraries\MiKTeX\TeXAndFriends\include\miktex/C4P/C4P.h
2021-09-29 10:00:29,739+0200 FATAL xelatex - Line: 646
2021-09-29 10:00:29,742+0200 INFO xelatex - this process (11704) finishes with exit code 1
我尝试研究该问题,并发现两个可能相关的结果:
- https://tug.org/pipermail/tex-live/2021-April/046700.html好吧,我不能说我理解他们在这里讨论的内容。我使用 MiKTeX,他们指的是 Linux 环境中的 TexLive。我找不到任何可以删除 type1 行的字体配置文件,说实话,我不敢在不明白自己在做什么的情况下进行拆分。因此,即使它确实包含我的问题的解决方案,如果没有进一步的澄清,我也无法继续。
- XeLaTeX - 无效字体:-1这似乎与我的情况不符,因为我不使用 Type 1 字体,而是使用 OpenType 和 TrueType 字体。
由于问题的性质(在大多数计算机上编译,而不是在一台计算机上编译,因此它必须依赖于环境),我无法生成 MWE,抱歉。我的字体选择命令如下:
% Fontspec font settings:
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Minion Pro}[
Path = \FontsFolder/Minion Pro/,
Extension = .otf,
Scale = MatchLowercase,
UprightFont = MinionPro-Regular,
BoldFont = MinionPro-Bold,
ItalicFont = MinionPro-It,
BoldItalicFont = MinionPro-BoldIt,
SmallCapsFont = MinionPro-Regular]
\setsansfont{Open Sans}[
Path = \FontsFolder/open-sans/,
Extension = .ttf,
Scale = MatchLowercase,
UprightFont = OpenSans-Regular,
BoldFont = OpenSans-ExtraBold,
ItalicFont = OpenSans-Italic,
BoldItalicFont = OpenSans-ExtraBoldItalic]
这\FontsFolder
是 OneDrive for business 中文件夹的路径,其中有无法消除的空间(E:\OneDrive - Szegedi Tudományegyetem\Fonts
具体来说)。在最新的 MiKTeX 更新之前,我曾经遇到过该路径的问题,但从那时起,它似乎在所有情况下都能正常工作(可能除了这个,如果这是问题的话)。
任何帮助或建议都将不胜感激。
答案1
根据评论中 David Carlisle 的建议,我可以编译文件。正如他所说,当 XeTeX 尝试按名称访问字体时,xdvipdfmx 会找到 Type 1 版本而不是 OpenType,这时就会出现问题。我参考了他的建议,网址为https://tug.org/pipermail/tex-live/2021-April/046700.html我尝试本地化字体配置路径,在 Windows 10 环境中的 MiKTeX 中,我在C:\Users\<user name>\AppData\Roaming\MiKTeX\fontconfig\config
(AppData
是一个隐藏文件夹) 处找到了它。有一个名为 的文件localfonts.conf
需要编辑。对我来说,该文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!--
DO NOT EDIT THIS FILE! It will be replaced when MiKTeX is updated.
Instead, edit the configuration file localfonts2.conf.
-->
<fontconfig>
<include>localfonts2.conf</include>
<dir>C:\Users\tethe\AppData\Local\Microsoft\Windows\Fonts</dir>
<dir>C:\Windows\Fonts</dir>
<dir>C:\Program Files (x86)\Adobe\Acrobat Reader DC\Resource\Font</dir>
<dir>C:\Programs\MiKTeX\fonts\type1</dir>
<dir>C:\Programs\MiKTeX\fonts\opentype</dir>
<dir>C:\Programs\MiKTeX\fonts\truetype</dir>
</fontconfig>
大卫卡莱尔提到了这样一句话:<dir>C:\Programs\MiKTeX\fonts\type1</dir>
。
此行需要删除。警告:别跑Refresh font map
的功能,MiKTeX console
因为它会重写已删除的行。
经过此次修改后,有问题的文件将被编译。
更新:发帖后我才意识到这看起来有多愚蠢,因为中的评论localfonts.conf
指示我编辑localfonts2.conf
。localfonts.conf
然而,编辑该文件而不改变其内容对我来说不起作用。起作用的是我上面写的内容。