为什么即使使用矢量字体也需要进行字体替换?

为什么即使使用矢量字体也需要进行字体替换?

我经常收到警告Size substitutions with differences up to ... have occurred,即使使用 Palatino 之类的字体也是如此,据我所知,这些字体被定义为任意可缩放的。为什么会发生这种替换?

此外,是否有一种系统的方法来找出哪种字体变化导致了问题,并手动强制编译器包含正确的大小?

我对 TeX 后端如何处理字体只有非常基本的了解,所以如果我的问题完全没有意义,请随时启发我。

编辑:我并不是想找到一种方法来消除我编译的任何特定文档上的警告。只要结果看起来正确,我通常会忽略所有此类警告。我只是想了解为什么会发生这种情况,即使在使用像这样的包时也是如此mathpazo。如果它仍然有帮助,我提供了一个从我遇到此问题的上一个文档创建的 MWE。

\documentclass{article}
\usepackage{mathpazo,amsmath,stmaryrd}
\begin{document}
$\text{$a$}$
\end{document}

根据已经给出的答案,我猜测某个地方的某些宏最终会使用位图字体。

答案1

您不会收到错误但会收到警告,如果值很小您通常可以忽略警告。

字体大小可以(在文件中)以离散步骤或连续步骤的形式声明.fd。在第一种情况下,如果当前请求的大小不在列表中,LaTeX 将选择下一个离散大小并警告您有关替换的信息。

对于位图字体也完全有可能使用连续声明 - 但这意味着对于每个新尺寸都必须创建一个新字体,旧的字体.fd确实避免了这种情况以节省磁盘空间 - 现在这并不重要。

在大多数情况下,大小替换警告表明您正在使用一些历史文件,该文件也可以用于位图字体。通过在前面.fd添加 可以避免许多警告。\RequirePackage{fix-cm}\documentclass

答案2

St. Mary Road 字体已设置了光学尺寸、、、、和stmary5。该文件是在无法任意调整大小的时候编写的,因为每个尺寸都意味着要生成一个新的位图文件。stmary6stmary7stmary8stmary9stmary10Ustmary.fd.pk

字体已转换为 Type1,但.fd文件仍然无法识别。您可以使用以下方法教 LaTeX 使用任意大小:

\documentclass{article}
\usepackage{mathpazo,amsmath,stmaryrd}
\DeclareFontFamily{U}{stmry}{}
\DeclareFontShape{U}{stmry}{m}{n}
 {
  <-5.5>  stmary5
  <5.5-6.5> stmary6
  <6.5-7.5> stmary7
  <7.5-8.5> stmary8
  <8.5-9.5> stmary9
  <9.5->  stmary10
   }{}

\begin{document}
$\text{$a$}$
\end{document}

这样.fd就不会读取文件并且可以定义任意大小的字体。

答案3

它与光学尺寸有关。字体有额外的文件来告诉它在特定尺寸下看起来如何(粗略地说),如果没有你想要的尺寸的信息,你会收到警告,因此会使用另一个(接近的)尺寸。

您可以使用其他字体包来修复此问题,例如pxfontspalatino:

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{pxfonts}


\begin{document}
\fontsize{12pt}{13pt}\selectfont
This is a text in 12.0\,pt. XX
%
\fontsize{12.5pt}{13pt}\selectfont
XX This is a text in 12.5\,pt.
\end{document}

字体大小

相关内容