.def文件

.def文件

这些字体相关文件有什么用途:,,,,.fd等?.map.enc.def

(La)TeX当转换令牌以生成输出时,使用它们的顺序是什么pdf(假设pdftex是引擎)?

顺便问一下,您能否给我提供一些涉及该主题的文档?

答案1

快速概览

在此处输入图片描述

一些相关书籍:

  • LaTeX Companion 2ed,第 7 章:字体和编码。特别是 7.9 -- 7.11。(.fd.def.enc.map
  • TeXbook,附录 F:字体表。(.tfm
  • METAFONTbook。(.tfm.gf

文件:

答案2

.def文件

在 LaTeX 等文件中,t1enc.def可以找到用于调整字形选择以适应当前编码的定义。总是有一个电流输出编码并且一些命令会根据它改变其行为;例如,如果当前编码是 OT1(或集合中没有“ö”字形的其他编码),\"{o}则会转换为,但如果当前编码是 T1,则相同的指令将变成。\accent"7F o\"{o}\char"F6

一旦包fontenc加载了编码选项,这些文件就会被读入。此包可以多次加载;例如,某些包会textcomp隐式加载它。当前编码\begin{document}将是与传递的选项相对应的编码最后的fontenc

还有其他.def文件,但未命名的<encoding>enc.def文件与字体无关。

.fd文件

当你指定\fontfamily{<family>}\selectfont(可能隐含在诸如\ttfamily之类的声明中\textsf)时,LaTeX 会查看其内部表,以查看组合是否

<encoding>+<family>

已知,<encoding>当前编码在哪里。这样的知识来自于已经看到声明

\DeclareFontFamily{<encoding>}{<family>}{<tokens>}

假设当前编码为 T1,请求的系列为ppl(Palatino)。如果不知道组合T1+ppl(顺便说一下,这是根据控制序列的定义进行的检查\T1+ppl),LaTeX 将尝试加载文件t1ppl.fdT1ppl.fd。如果两者都不存在,LaTeX 将发出警告并用默认值替换请求的系列,但它将不是改变编码。

文件.fd应该以声明开头\DeclareFontFamily,后面跟着任意数量的\DeclareFontShape声明,这些声明为请求的对设置了一个表<encoding>+<family>。请参阅fntguide.pdf了解详情。

\DeclareFontFamily或形式的命令\DeclareFontShape也可以出现在文档的序言中。后者命令必须遵循适当的字体系列声明。这些声明中的每一个都将在字体的属性选择和“字体度量文件”之间建立对应关系。在我们的示例中,组合

\usefont{T1}{ppl}{b}{it}

或任何等效选择都将指向pplb8t。字体度量文件可以有两种形式:.vf.tfm文件。如果pplb8t.vf存在,TeX(我们现在深入处理)将加载它,否则它将加载pplb8t.tfm。其中之一必须存在。

这些\DeclareFontShape命令可以建立字体替换和其他规则;如果 LaTeX 找不到出路,它将选择默认字体。但是,编写错误的.fd文件或\DeclareFontShape文档中的命令不正确可能会导致错误 ( Corrupt NFSS tables)。

因此,我们假设 TeX 已经找到pplb8t.vfpplb8t.tfm

.vf文件

字体度量文件可以虚拟的。 确实如此pplb8t.vf度量文件包含有关字符边界框、斜体校正、字距调整对和连字的信息。它还包含从其他字体(虚拟字体或非虚拟字体)中选择实际字形的信息。在我们的示例中,虚拟字体仅使用非虚拟字体,该字体pplb8r

(MAPFONT D 0
   (FONTNAME pplb8r)
   (FONTCHECKSUM O 25012244013)
   (FONTAT R 1.0)
   (FONTDSIZE R 10.0)
   )

并基本上对字形位置进行调整以符合 T1 输出编码。例如,插槽"F7(octal ) 中的字符在文件`367中有此条目pplb8t.vf

(CHARACTER O 367
   (CHARWD R 0.832996)
   (CHARHT R 0.485498)
   (CHARDP R 0.011493)
   (MAP
      (SETCHAR O 234)
      )
   )

这意味着字形œ(可能来自命令)实际上将从八进制(十六进制)插槽处的\oe字体中获取,但用户并不关心这一点。字形的边界框将计算为宽度 8.32996pt、高度 4.85498pt、深度 0.11493pt 且无斜体校正(假设已请求十点字体大小,否则尺寸将被缩放)。pplb8r`234"9C

.tfm文件

一个.tfm文件(在前一种情况下pplb8r.tfm 必须字体文件(.font-exist)包含与文件相同的信息.vf,但可以指向其他字体度量文件。

插曲

就 TeX 而言,道路到此结束:字符排版完毕,页面输出。打印机/预览器驱动程序将负责实际显示字形。pdfTeX 的情况有所不同,它还需要存储字形。

.map文件

我们的粗体字形œ最终从 中取出pplb8r。现在 pdfTeX 查阅加载的.map文件(默认pdftex.map)并查找以 开头的条目pplb8r。它发现它是

pplb8r URWPalladioL-Bold " TeXBase1Encoding ReEncodeFont " <8r.enc <uplb8a.pfb

因此它继续加载 Type1 字体文件upl8a.pfb(如果尚未加载),但它将应用重新编码。这是必要的,因为.pfb文件是根据 Adob​​e 标准编码存储的,并且一些字形是隐藏的。因此,驱动程序将对以根据8r编码编码的字体结尾的字形进行重新排序(类似于 T1 或其他字体,但不建议在文档中使用)。这样,œ字形实际上将位于插槽中"F7,而不是"FAAdob​​e 标准编码中保留的插槽中。字形ö甚至不在 Adob​​e 标准编码中,但仍然存在未编码.pfb文件中;通过重新编码,8r我们可以在插槽中使用它"F6

pplb8a为什么从改为uplb8a?因为实际使用的字体是 URW 提供的免费字体。这实际上与用户无关。

.pfb文件

这些文件以轮廓形式包含用于打印(或预览)的字形表示。此类文件永远不会由用户直接加载,而只能从引擎或打印机/预览器驱动程序加载。它们也可以采用这种.pfa形式,不同之处在于.pfa文件仅包含可打印的 ASCII 字符,因此比相应的文件更大.pfb

相关内容