使用 fontspec 從套件目錄載入字體

使用 fontspec 從套件目錄載入字體

我正在開發一個 LaTeX 套件(實際上它是一個文件類),我想讓其他人可以將其安裝在他們的 texmf 目錄中。在此包中,我使用給定字體為 \lstset 命令設定預設配置。例如,如果我想使用 Droid Sans Mono 作為字體,如果系統上安裝了該字體,則以下命令有效:

\newfontfamily\listingsfont[Scale=0.85]{Droid Sans Mono}
\lstset {
    basicstyle=\footnotesize\listingsfont
}

但是,如果系統上沒有安裝該字體,這當然會失敗。因此,我想將字體與 LaTeX 套件一起分發。我已經測試了 fontspec 的 Path 選項

\newfontfamily\listingsfont[Path=/home/username/texmf/tex/latex/mypackage/,Scale=0.85]{Droid Sans Mono}

它工作得很好,除了我必須事先知道用戶名。

有沒有辦法在 fontspec 中指定相對於我的套件的路徑?或取得主目錄的路徑?

(該軟體包的大多數用戶將使用 Ubuntu 作為他們的主要作業系統)。

答案1

這裡有很多事情需要考慮

  1. 載入儲存在 texmf-tree 中的字體時,您應該使用檔案名稱而不是字體名稱,因為字體名稱不適用於所有開箱即用的作業系統。所以使用 \newfontfamily\listingsfont[Scale=0.85]{droidsansmono.ttf}而不是 \newfontfamily\listingsfont[Scale=0.85]{Droid Sans Mono}.
  2. 字體屬於fontstexmf 樹的資料夾 -fonts\opentype對於otf-fonts 和fonts\truetype對於ttf.即使您找到一種方法使字體保持在您的包附近:像 TeX 發行版這樣的大型系統只有在每個人都遵守某些標準的情況下才能工作。

  3. 將字體與類別或套件一起自動分發幾乎沒有意義。當您完全控製字體時,如果它確實很特殊並且只能與類別一起使用,或者它不是免費的,則存在例外情況。但就 Droid Sans Mono 而言,已經有一個包含該字體 CTAN 的包,並且在 texmf 樹中添加第二個版本只會帶來麻煩。例如,xelatex 不喜歡搜尋路徑中存在多個版本的字體。

因此,如果您擔心某些使用者沒有Droid Sans MonoCTAN 上的字體:請告訴他們更新其 TeX 系統或從 CTAN 手動安裝字體。

如果您確實需要將字體與套件一起分發,請告訴使用者將它們安裝在正確的資料夾中(如果您透過 CTAN 分發包,他們會處理這個問題)。

答案2

看一下“新穎”文檔類。可能在您的 TeXlive 2016 發行版中,如果沒有,則在 CTAN 中。該類別包含自己的自訂字體,當您安裝套件(實際上是文件類別)時,它會安裝在適當的位置(fonts/opentype/novel/)。

透過 tlmgr(發行版安裝程式)安裝時有效。如果以 TDS 下載並安裝在 TEXMF-LOCAL 目錄中,也可以使用。請注意,在某些情況下,您可能需要重建 luatex-cache。

請注意,自訂字體不是「從套件目錄」載入的。相反,安裝的軟體包將字體放置在字體應該所在的正確目錄中。自動執行。

當我開始建立這個文件類別時,我設想完全按照您在問題中提出的要求進行操作:將字體放在套件 *.sty 檔案所在的位置。但這並不容易運作,事實上也沒有必要,因為套件安裝程式也可以安裝字型。

編輯:最近,fontspec添加了檢測是否可以找到字體的功能,並根據字體是否存在採取不同的操作。因此,可以編寫一個請求字體 A 的宏,但如果未找到 A,則使用 B;如果既沒有找到 A,也沒有找到 B,則使用 C;如果沒有找到字體,則最後停止並顯示一條訊息。請參閱最近的fontspec文件。

相關內容