将某些 newtx 字体转换为 truetype 或 opentype

将某些 newtx 字体转换为 truetype 或 opentype

我发现我喜欢 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”之类的单词轻松排版。)

相关内容