Knuth 最初的 Tex 實作使用 TFM 檔案來使用字體資訊進行排版。既然XeTeX透過封裝支援TrueType和OpenType字體fontspec
,那麼它如何使用這些類型的字體呢?它是否會在排版過程中動態產生 TFM 檔案層級資訊?另外,TFM 格式是否足以表示使用 OpenType 或 TrueType 字型排版文件所需的所有必要資訊?作為一個附帶問題,如果 TFM 檔案是動態生成的,是否意味著除非 Linux 和 Mac 上都有可用的字體,否則我無法.dvi
在 Linux 上編譯檔案並在 Mac 中查看它?
答案1
它是否會在排版過程中動態產生 TFM 檔案層級資訊?
不會,XeTeX 在排版過程中直接讀取字體規格(在第三方程式庫的支援下),不會為 XeTeX 所謂的原生字體產生「內部」TFM。
TFM 格式是否足以表示使用 OpenType 或 TrueType 字型排版文件所需的所有必要資訊?
不,除了 TFM 檔案所表示的字形數量的限制(或多或少可以消除,例如 Omega 的 OFM 檔案),OpenType 提供了更高級的排版功能,遠遠超出了 TFM 格式支援的連字機制。
…這是否意味著,除非字體在 Linux 和 Mac 上都可用,否則我無法在 Linux 上編譯 .dvi 檔案並在 Mac 中查看它?
確實如此,除非您在兩個系統上的完全相同的位置上擁有完全相同的字體文件,否則 XeTeX 生成的 XDV(擴展 DVI)無法在另一個系統上處理。然而,XeTeX的最終輸出是可移植的PDF文件,XDV文件被視為中間表示,只是實作細節。另請注意,對於常規 DVI 檔案也是如此;如果兩個系統上沒有相同的指標文件和字體,則無法處理 DVI 文件,DVI 與設備無關,但不可移植。
答案2
當你在 TeX 中使用原始命令載入字體時
\font\foo=bar
所有高階巨集(例如 LaTeX 的巨集)最終都會減少到該值,TeX 將讀取該bar.tfm
檔案並將其包含的資訊儲存在記憶體中。
XeTeX 中的 OpenType 和 TrueType 字體不需要 TFM 文件,因為必要的資訊已經存在於字型表中,XeTeX 能夠檢查這些資訊。
實際上,XeTeX 比 TeX 中的常用字體存儲更多的度量信息,後者通常只有七個參數。和
\font\foo="Linux Libertine O"
XeTeX 知道該字體的最大值\fontdimen65
。然而,在 TFM 格式中,對七個參數的限制\fontdimen
並不是硬連線的,而且字體可以具有任意數量的參數(不過,對於文字字體來說,七個參數是最少的)。
XeTeX 的輸出格式是 XDV,是 DVI 格式的擴展,其中不預覽器可用。無法使用 Xdvi 或其他 DVI 預覽器預覽 XDV 檔案。事實上,XDV 檔案是xdvipdfmx
在產生 PDF 檔案的處理過程中傳遞的,其中包含在任何平台上閱讀的所有必要資訊。