將某些 newtx 字型轉換為 truetype 或 opentype

將某些 newtx 字型轉換為 truetype 或 opentype

我發現我喜歡 newtx 包,因為它使用 Helvetica 克隆來表示無襯線字符,並使用 Times 克隆來表示希臘字母。如何產生這些克隆字型的 opentype 或 truetype 版本?我想將它們安裝為系統字體,以便其他應用程式可以使用它們。

當我查找與 newtx 套件一起安裝的字體檔案時,我看到有字體定義檔(.fd)、字體規格檔案(.tfm 和 .afm),但只有幾個字體輪廓檔案(.pfb) 。我似乎無法找到“ntxmi”(斜體數學字體)、“ntxmia”(直立數學字體)或“ntxss”(無襯線字體)的字體輪廓檔案。 pdfLaTeX 在哪裡抓取這些字體輪廓檔案?一旦我擁有它們,我該如何處理它們?

如果重要的話,我安裝了 font forge,但我不是它的用法專家。

答案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 ligature,您可以透過在虛擬字體中的對應插槽中組合其 f 和 i 來建立字體。 (當然,它不會是一個真正的連字 - 它只是一個 f 後面跟著一個 i - 但它允許輕鬆排版“fish”等單字。)

相關內容