为什么某种尺寸的矢量图形字体不存在?

为什么某种尺寸的矢量图形字体不存在?

在我的理解中,矢量图形字体可以无限制地缩小或放大。换句话说,它的大小是连续的实数。但在收到以下警告后,我感到很惊讶:

在此处输入图片描述

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\pagestyle{empty}
\usepackage[OT1]{fontenc}
\makeatletter
\DeclareMathSizes{\f@size}{\f@size}{0.6\f@size}{0.3\f@size}
\makeatother

\newcommand\foo[1]
{{#1%
Such as $E=mc^2$ or,
\[
\int_{a_1}^{b^2}f(x)\,\textrm{d}x=F(b^2)-F(a_1)
\]
}}

\parindent=0pt
\begin{document}
\begin{description}
\item[Huge]
\foo{\Huge}
\item[huge]
\foo{\huge}
\item[LARGE]
\foo{\LARGE}
\item[Large]
\foo{\Large}
\item[large]
\foo{\large}
\item[normalfont]
\foo{\normalfont}
\item[small]
\foo{\small}
\item[footnotesize]
\foo{\footnotesize}
\item[scriptsize]
\foo{\scriptsize}
\item[tiny]
\foo{\tiny}
\end{description}
\end{document}

在此处输入图片描述

为什么某种尺寸的矢量图形字体不存在?

答案1

Latex 2e 使用新字体选择方案 (NFSS)将字体系列与单个字体关联起来(TeX 所需的所有信息都位于 TFM 文件中)。为此,NFSS 提供了两个命令\DeclareFontFamily\DeclareFontShape。前一个命令仅声明一个新的字体系列,而后一个命令将字体与系列关联起来。字体定义通常存储在.fd文件中,LaTeX 会根据需要读取这些文件。例如,如果您cmr在标准 OT1 编码中使用默认的 Computer Modern Roman 字体(字体系列)(就像在文档中一样),LaTeX 会查找一个文件ot1cmr.fd(它是 LaTeX 基础的一部分)并读取此文件。在此文件中,您可以找到以下字体定义:

\DeclareFontShape{OT1}{cmr}{m}{n}%
     {<5><6><7><8><9><10><12>gen*cmr%
      <10.95>cmr10%
      <14.4>cmr12%
      <17.28><20.74><24.88>cmr17}{}

这告诉 LaTeXcmr字体可以在 5、6、7、8、9、10、10.95、12、14.4、17.28 等大小下使用。该gen函数将字体大小附加到字体名称,例如,字体大小为 5 cmr5,而字体大小为 12 和 14.4 cmr12。此定义有历史原因。最初的 Compute Modern 字体是位图字体(以 Metafont 设计),不能自由缩放。相反,它们有不同的光学尺寸,其中最小的设计尺寸为 5 点。现在,如果您的文档要求使用小于 5 点的字体,LaTeX 将不会在字体定义中找到这个尺寸,而是使用定义的最小尺寸(5 点)。

对于可自由缩放的字体(例如 PostScript Type1 或 TrueType 字体),可以指示 LaTeX 将字体缩放到所需的大小。例如,以下字体定义告诉 LaTeX在 OT1 编码、中等粗细和罗马形状中选择字体系列cmr10时使用该字体cmr

\DeclareFontShape{OT1}{cmr}{m}{n}{ <-> cmr10 }

字体只是缩放到所需的大小。该包以这种方式fix-cm更改了该系列的字体定义(尽管它不会对所有大小使用相同的字体)。同样,该包更改了 Computer Modern 数学扩展字体的定义,以便它们可以在更大的尺寸中使用。cmrexscale

更新:直到现在,我才注意到你的序言中有以下代码:

\DeclareMathSizes{\f@size}{\f@size}{0.6\f@size}{0.3\f@size}

这可能并不像您预期​​的那样工作。是一个在前言中\f@size扩展为(标准字体大小)而不是 TeX 长度的宏。因此,扩展为,而不是乘以的值。因此,您的定义相当于:100.6\f@size0.6100.6\f@size

\DeclareMathSizes{10}{10}{0.610}{0.310}

此声明就是您收到警告的原因,警告您某些字体在 0.610 和 0.310 大小下不可用。(加载时fix-cm,您会看到normalfont示例中的积分符号和指数的限制消失了,因为它们太小了)。

答案2

如果您希望能够在数学模式下缩放文本,则需要包含该exscale包。

答案3

尝试添加命令

\usepackage{exscale,fix-cm} % allow Computer Modern fonts of all sizes

到您的文档序言中。TeX 常见问题解答有更多关于如何处理的信息任意大小的字体

相关内容