![.def文件](https://linux22.com/image/270397/.def%E6%96%87%E4%BB%B6.png)
这些字体相关文件有什么用途:,,,,.fd
等?.map
.enc
.def
(La)TeX
当转换令牌以生成输出时,使用它们的顺序是什么pdf
(假设pdftex
是引擎)?
顺便问一下,您能否给我提供一些涉及该主题的文档?
答案1
快速概览
- TeX 字体错误:备忘单(简单概述。我想,现在这对你来说非常有用。)
一些相关书籍:
- LaTeX Companion 2ed,第 7 章:字体和编码。特别是 7.9 -- 7.11。(
.fd
,.def
,.enc
,.map
) - TeXbook,附录 F:字体表。(
.tfm
) - METAFONTbook。(
.tfm
,.gf
)
文件:
- LaTeX 图形伴侣:补充材料。(您想知道很多东西,主要是有关 Type1 字体。)
fntguide
LaTeX 2
答案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.fd
或T1ppl.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.vf
或pplb8t.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
文件是根据 Adobe 标准编码存储的,并且一些字形是隐藏的。因此,驱动程序将对以根据8r
编码编码的字体结尾的字形进行重新排序(类似于 T1 或其他字体,但不建议在文档中使用)。这样,œ
字形实际上将位于插槽中"F7
,而不是"FA
Adobe 标准编码中保留的插槽中。字形ö
甚至不在 Adobe 标准编码中,但仍然存在未编码在.pfb
文件中;通过重新编码,8r
我们可以在插槽中使用它"F6
。
pplb8a
为什么从改为uplb8a
?因为实际使用的字体是 URW 提供的免费字体。这实际上与用户无关。
.pfb
文件
这些文件以轮廓形式包含用于打印(或预览)的字形表示。此类文件永远不会由用户直接加载,而只能从引擎或打印机/预览器驱动程序加载。它们也可以采用这种.pfa
形式,不同之处在于.pfa
文件仅包含可打印的 ASCII 字符,因此比相应的文件更大.pfb
。