出現錯誤“字體形狀未定義”-解釋解決方案嗎?

出現錯誤“字體形狀未定義”-解釋解決方案嗎?

編譯我的文檔時發生錯誤。

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

不要將舊版 tex 編碼與 unicode 字型的 fontspec 一起使用textcomp或包裝。 gensymb

T1 編碼只有256 個字符,因此添加TS1 編碼是為了允許額外的字體,因此允許另外256 個字符,但您使用的是TU (Unicode) 編碼的TeX Gyre 字體,該字體可以在字體中包含數千個字符,所以不,它們不僅是不必要,如您所見,它們是有害的並且會破壞 unicode 設定。

在最近的 Latex 版本中,textcomp甚至在經典的 8 位元 Latex 或 pdflatex 中都沒有什麼用處,因為它本質上是預先載入的,並且預設可以使用 TS1 編碼字體。

相關內容