我发现我喜欢 newtx 包,因为它使用 Helvetica 克隆字体来表示无衬线字符,使用 Times 克隆字体来表示希腊字母。我如何生成这些克隆字体的 opentype 或 truetype 版本?我想将它们安装为系统字体,以便其他应用程序可以使用它们。
当我查找使用 newtx 包安装的字体文件时,我看到有字体定义文件 (.fd)、字体度量文件 (.tfm 和 .afm),但只有几个字体轮廓文件 (.pfb)。我似乎找不到“ntxmi”(斜体数学字体)、“ntxmia”(直立数学字体)或“ntxss”(无衬线字体)的字体轮廓文件。pdfLaTeX 在哪里抓取这些字体轮廓文件?一旦我拥有它们,我该如何处理它们?
为了以防万一,我已经安装了字体锻造,但我并不是它的使用专家。
答案1
该字体没有轮廓字体,它是一种虚拟字体,这意味着本质上每个“字符”都是 DVI 代码的一个片段,它结合了来自其他字体的字符,通常(但不一定)每个字符都使用来自其中一种组成字体的字形。(在特殊情况下,虚拟字体中的单个字符可能由来自不同字体的多个字符构成)vf 文件还对间距和定位细节进行编码。
如果您查看使用虚拟字体生成的 pdf 文件,您看不到正在使用的虚拟字体,而是看到组成字体(对于这种字体,通常是普通轮廓字体)。
您可以将 vf 文件转换为人类可读的属性列表形式,并使用以下方式查看组成字体
vftovp /usr/local/texlive/2013/texmf-dist/fonts/vf/public/newtx/ntxmia.vf
(或者你的系统上的任何等效路径)
当然,理论上可以使用字体编辑器(例如 Font Forge)来组合字体组成部分并设置所有适当的字距,从而真正制作字体,但这本质上是一个新的字体创建项目,现有的 vf 文件可能对此没有太大帮助。
答案2
我无法将其放在注释中,但这是 ntxmia.vf 的 vftopl 输出的一部分:
每个 MAPFONT 命令都对应一个用于构建此字体的非虚拟字体:
(MAPFONT D 0
(FONTNAME txmia)
(FONTCHECKSUM O 4141071701)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 1
(FONTNAME txsyc)
(FONTCHECKSUM O 2224045220)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 2
(FONTNAME txr)
(FONTCHECKSUM O 32212676346)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 3
(FONTNAME ntxexb)
(FONTCHECKSUM O 624127613)
(FONTAT R 0.833)
(FONTDSIZE R 10.0)
)
(MAPFONT D 4
(FONTNAME rtxmio)
(FONTCHECKSUM O 2235410564)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 5
(FONTNAME ntxsyralt)
(FONTCHECKSUM O 20635152700)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 6
(FONTNAME txsyb)
(FONTCHECKSUM O 24667272411)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 7
(FONTNAME ptmr8r)
(FONTCHECKSUM O 4767720433)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 8
(FONTNAME zxxrl7z)
(FONTCHECKSUM O 36463136262)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
因此这里使用了 9 种字体。标有 0 的字体是主要的默认字体。也就是说,除非另有说明,否则字符均取自 txmia。
这是分配给第一个插槽(插槽 0)的字符:
(CHARACTER O 0
(CHARWD R 0.546)
(CHARHT R 0.667999)
(CHARIC R 0.05)
(COMMENT
(KRN O 177 R 0.035)
)
(MAP
(MOVERIGHT R 0.02)
(SETCHAR O 0)
(MOVERIGHT R -0.03)
)
)
这会调整字符相对于其在原始字体中的自然位置的位置。也就是说,TeX 会在为字符留出空间之前稍微移动一下,然后会向另一个方向稍微移动一下。(就 TeX 而言,所有字符都是矩形框。)
这是后期出现的角色:
(CHARACTER C 6
(CHARWD R 0.636)
(CHARHT R 0.615)
(CHARDP R 0.102)
(MAP
(SELECTFONT D 1)
(SETCHAR C 1)
)
)
SELECTFONT 指令表示这个字符不是从 txmia 中获取,而是从 txsyc 中获取。
这个角色是通过结合前两个想法创建的:
(CHARACTER O 100
(CHARWD R 0.482)
(CHARHT R 0.6925)
(CHARDP R 0.013499)
(CHARIC R -0.01)
(COMMENT
(KRN O 177 R 0.025)
)
(MAP
(MOVERIGHT R -0.01)
(SELECTFONT D 4)
(SETCHAR O 100)
(MOVERIGHT R -0.02)
)
)
这次字符是从 rtxmio 中取的,但 TeX 在设置它之前和之后也会移动一些(这次是同一个方向移动两次)。
虚拟字体还可以创建全新的字符,正如 David Carlisle 所解释的那样。例如,如果字体缺少 fi 连字符,您可以通过在虚拟字体的相应位置组合其 f 和 i 来创建一个连字符。(当然,它不会是真正的连字符 - 它只是一个 f 后面跟着一个 i - 但它可以让诸如“fish”之类的单词轻松排版。)