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 をメイン OS として使用します)。

答え1

ここで考慮すべき点がいくつかあります

  1. texmf ツリーに保存されているフォントをロードするときは、フォント名ではなくファイル名を使用する必要があります。フォント名はすべての OS でそのままでは機能しないためです。代わり \newfontfamily\listingsfont[Scale=0.85]{droidsansmono.ttf}に を使用します\newfontfamily\listingsfont[Scale=0.85]{Droid Sans Mono}
  2. フォントはfonts、texmf ツリーのフォルダーに属します ( -fontsfonts\opentypeの場合、の場合) 。フォントをパッケージの近くに保つ方法を見つけたとしても、TeX ディストリビューションのような大規模なシステムは、全員が何らかの標準に準拠している場合にのみ機能します。otffonts\truetypettf

  3. クラスやパッケージと一緒にフォントを自動的に配布することは、ほとんど意味がありません。フォントを完全に制御できる場合、フォントが本当に特別でクラスでのみ使用できる場合、または無料ではない場合など、例外があります。しかし、Droid Sans Mono の場合、このフォントの CTAN を含むパッケージが既に存在しており、texmf ツリーに 2 番目のバージョンを追加すると、問題が発生するだけです。たとえば、xelatex は、検索パスにフォントの複数のバージョンがあるとそれを好みません。

したがって、一部のユーザーがDroid Sans MonoCTAN にあるフォントを持っていない可能性がある場合は、TeX システムを更新するか、CTAN から手動でフォントをインストールするようにユーザーに伝えてください。

フォントをパッケージと一緒に配布する必要がある場合は、ユーザーにフォントを正しいフォルダーにインストールするように指示してください (CTAN を通じてパッケージを配布する場合は、CTAN がこれを処理します)。

答え2

「novel」ドキュメント クラスを調べてください。TeXlive 2016 ディストリビューションに含まれている可能性があります。含まれていない場合は、CTAN にあります。このクラスには独自のカスタム フォントが含まれており、パッケージ (実際にはドキュメント クラス) をインストールすると、適切な場所 (fonts/opentype/novel/) にインストールされます。

tlmgr (ディストリビューション インストーラー) 経由でインストールした場合は動作します。TDS としてダウンロードし、TEXMF-LOCAL ディレクトリにインストールした場合も動作します。場合によっては、luatex-cache を再構築する必要がある場合があることに注意してください。

カスタム フォントは「パッケージ ディレクトリから」ロードされるわけではないことに注意してください。インストールされたパッケージは、フォントが配置されるべき適切なディレクトリにフォントを配置します。これは自動的に行われます。

このドキュメント クラスの構築を開始したとき、質問で尋ねられたとおりのことをしようと考えていました。つまり、パッケージの *.sty ファイルがある場所にフォントを配置するということです。しかし、これは簡単には機能しません。実際、パッケージ インストーラーでもフォントをインストールできるため、この方法は必要ありません。

編集: 最近、fontspecフォントが見つかるかどうかを検出し、フォントが存在するかどうかに基づいて異なるアクションを実行する機能が追加されました。したがって、フォント A を要求するが、A が見つからない場合は B を使用し、A も B も見つからない場合は C を使用し、どちらも見つからない場合はメッセージを出して最終的に停止するマクロを作成できます。最新のfontspecドキュメントを参照してください。

関連情報