![出现错误“字体形状未定义”-解释解决方案?](https://linux22.com/image/472822/%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%E2%80%9C%E5%AD%97%E4%BD%93%E5%BD%A2%E7%8A%B6%E6%9C%AA%E5%AE%9A%E4%B9%89%E2%80%9D-%E8%A7%A3%E9%87%8A%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%9F.png)
当我编译我的文档时出现错误。
Font shape `TS1/TeXGyreTermes(0)/m/n' undefined
(Font) using `TS1/cmr/m/n' instead.
它不会阻止我的文档正确编译,但收到此警告真的很烦人。
我已经发现我可以使用以下命令修复它:通过查看过时\DeclareFontFamilySubstitution{TS1}{\rmdefault}{udidot}
软件包的文档substitutefont
这里。
通过这个 MWE 你可以重现错误:
\documentclass{scrreprt}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}
\usepackage{gensymb}
\usepackage{textcomp}
\usepackage{scrlayer-scrpage}
\begin{document}
asdf
\end{document}
正如您所看到的,它来自树包的组合\usepackage{gensymb} \usepackage{textcomp}
,\usepackage{scrlayer-scrpage}
如果我仅使用,gensymb
我会收到警告:
Not defining \perthousand.
Not defining \micro.
可以通过使用包来修复这个问题textcomp
,但这会产生初始错误。
有人可以向我解释一下为什么会发生这种情况以及该命令\DeclareFontFamilySubstitution{TS1}{\rmdefault}{udidot}
实际上在做什么吗?
答案1
不要使用textcomp
或gensymb
打包带有 Unicode 字体的带有 fontspec 的旧式 tex 编码。–
T1 编码只有 256 个字符,因此添加了 TS1 编码以允许额外的字体,从而允许另外 256 个字符,但您使用的是 TU(Unicode)编码的 TeX Gyre 字体,这种字体可以有几千个字符,所以不,它们不仅没必要,而且如您所见,它们是有害的并会破坏 unicode 设置。
在最近的 latex 版本中textcomp
甚至在经典的 8 位 latex 或 pdflatex 中都没有用,因为它基本上是预加载的,并且 TS1 编码字体默认可用。