如何创建自己的 TeX 字体?

如何创建自己的 TeX 字体?

我知道很多人就这个问题问过,但没有一个答案对我有用。几个月来,我尝试创建 TeX 字体,并找到了一种生成一些文件的方法。

使用 FontForge,X.sfd我创建了X.pfbX.encX.amf(我删除了X.tfm,因为它的机器代码看起来不像已经安装的机器代码)。在我运行以下命令后

#!/bin/bash

afm2tfm X -T X.enc -v X >>X.map
afm2tfm X-bd -T X.enc -v X-bd >>X.map
afm2tfm X-bi -T X.enc -v X-bi >>X.map
afm2tfm X-it -T X.enc -v X-it >>X.map

vptovf X
vptovf X-bd
vptovf X-bi
vptovf X-it

rm *.vpl

这里的-bd-bi和仅表示粗体、-it粗斜体和斜体类型,它们的生成方式相同。结果我们得到了.enc.map.afm.tfm和文件。.pfb.vf

但我不知道如何继续,仍然出现错误,并且还有更多文件.fb,,.def.dfu

答案1

为了将字体与 (pdf)TeX 一起使用,必须选择合适的输出编码。示例包括 OT1(默认的 128 槽文本编码)、T1(西欧语言最流行的 256 槽文本编码)、OML(标准的 128 槽数学编码)和 U(通常用于符号字体的未知或“原始”编码)。

对于除 OT1(默认编码)以外的文本编码,通常通过加载fontenc作为选项传递的相关编码来启用输出编码。例如,

\usepackage[T4,T5,T1]{fontenc}

除了 OT1 之外,还可以使用 T4(非洲拉丁语)、T5(越南语)和 T1(上面描述的西欧文字的‘Cork’编码)。

理论上,标识符“T”表示 256 个槽满足特定条件的 ext 编码。实际上,并非所有“T”编码都完全符合要求,而某些非“T”编码则符合要求。

其他文本和文本符号编码指示符包括:

  • “TS” 表示扩展s符号编码,如TS1。

  • “L” 理论上为特定站点使用而设计的局部编码。然而,现实并不总是符合理论,一些“L”编码通常可用,但尚未获得适当的名称。LY1 就是这样一个例子。

  • 'X' 用于文本 eX倾向于使用诸如X2编码之类的编码来支持西里尔字母的T2A、T2B 和T2C。

  • “C” 用于CJK 编码。

  • “E” 意为实验编码。

  • “U” 用于未知编码,通常用于“一次性”情况,例如 Zapf Dingbats,其中没有其他字体可能使用相同的编码。

输出编码(U 除外)指定哪些字符属于哪些位置,以及(如果相关)不同位置中的字符如何关联。例如,该位置X包含一个字符,该字符应替换由 slot 中的字符组成的序列随后是 slot 中的字符即 T1 编码中的连字符“fi”直接替换后面跟着的“i”的“f”。

如 手册中所述fontenc,出于技术原因,任何文本编码都必须满足某些形式要求并支持某些转换模式(例如,根据标准表将大写字母映射到小写字母、以特定方式使用特定插槽、支持某些连字符等)。也就是说,文本编码不能任意创建,因为 TeX 假定某些事情对任何文本编码都是正确的。

此外,文本编码通常提供各种宏的编码特定定义,例如用于创建重音字符的宏定义。

在这种情况下的问题是,X.enc几乎肯定没有定义文本编码,因此您无法书写\usepackage[X]{fontenc}并使其正常工作。

通常情况下,原始字体编码和 TeX 输出编码有所不同,你会得到类似

afm2tfm -p X.enc -t ec.enc ...

使字体可用于 T1 编码。

因此,要将字体与 TeX 一起使用,您需要创建合适的输出编码或使用现有的编码。我希望格鲁吉亚将会写一个答案,说明该包提供的建议编码的使用情况。

相关内容