Schriftart aus Paketverzeichnis mit Fontspec laden

Schriftart aus Paketverzeichnis mit Fontspec laden

Ich arbeite an einem LaTeX-Paket (eigentlich ist es eine Dokumentklasse), das ich anderen zur Installation in ihrem texmf-Verzeichnis zur Verfügung stellen möchte. In diesem Paket richte ich eine Standardkonfiguration für den Befehl \lstset mit einer bestimmten Schriftart ein. Wenn ich beispielsweise Droid Sans Mono als Schriftart verwenden möchte, funktioniert der folgende Befehl, wenn die Schriftart auf dem System installiert ist:

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

Wenn die Schriftart jedoch nicht auf dem System installiert ist, würde dies natürlich fehlschlagen. Aus diesem Grund möchte ich die Schriftart zusammen mit dem LaTeX-Paket verteilen. Ich habe die Option Path von fontspec getestet.

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

das funktioniert einwandfrei, außer dass ich vorher den Benutzernamen wissen müsste.

Gibt es eine Möglichkeit, Pfade relativ zu meinem Paket in der Fontspec anzugeben? Oder den Pfad zum Home-Verzeichnis zu erhalten?

(Die meisten Benutzer dieses Pakets verwenden Ubuntu als ihr Hauptbetriebssystem).

Antwort1

Hier gibt es einiges zu beachten

  1. Beim Laden von Schriftarten, die im Texmf-Baum gespeichert sind, sollten Sie Dateinamen und nicht Schriftnamen verwenden, da Schriftnamen nicht auf allen Betriebssystemen standardmäßig funktionieren. Verwenden Sie daher anstelle \newfontfamily\listingsfont[Scale=0.85]{droidsansmono.ttf}von \newfontfamily\listingsfont[Scale=0.85]{Droid Sans Mono}.
  2. Schriftarten gehören in den fontsOrdner eines Texmf-Baums – fonts\opentypefür otf-Schriftarten und fonts\truetypefür eine ttf. Selbst wenn Sie eine Methode finden, die Schriftart in der Nähe Ihres Pakets zu halten: Ein großes System wie eine TeX-Distribution kann nur funktionieren, wenn sich jeder an bestimmte Standards hält.

  3. Es ist selten sinnvoll, eine Schriftart automatisch zusammen mit einer Klasse oder Paketen zu verteilen. Ausnahmen gibt es, wenn Sie die volle Kontrolle über die Schriftart haben, wenn sie wirklich speziell ist und nur mit der Klasse verwendet werden kann oder wenn sie nicht kostenlos ist. Im Fall von Droid Sans Mono gibt es jedoch bereits ein Paket mit dieser Schriftart und ein CTAN, und das Hinzufügen einer zweiten Version zum Texmf-Baum kann nur Probleme verursachen. Beispielsweise mag es xelatex nicht, wenn im Suchpfad mehr als eine Version einer Schriftart vorhanden ist.

Wenn Sie also befürchten, dass einige Ihrer Benutzer eine Schriftart nicht haben Droid Sans Mono, die auf CTAN vorhanden ist, sagen Sie ihnen, dass sie ihr TeX-System aktualisieren oder die Schriftart manuell von CTAN installieren sollen.

Wenn Sie die Schriftart wirklich zusammen mit dem Paket verteilen müssen, weisen Sie die Benutzer an, sie in den richtigen Ordnern zu installieren (wenn Sie Ihr Paket über CTAN verteilen, kümmern sie sich darum).

Antwort2

Sehen Sie sich die Dokumentklasse „novel“ an. Sie könnte in Ihrer TeXlive 2016-Distribution enthalten sein, oder, falls nicht, in CTAN. Die Klasse enthält eine eigene benutzerdefinierte Schriftart, die beim Installieren des Pakets (bei dem es sich eigentlich um eine Dokumentklasse handelt) an der entsprechenden Stelle (fonts/opentype/novel/) installiert wird.

Funktioniert, wenn es über tlmgr (Distributionsinstallationsprogramm) installiert wird. Funktioniert auch, wenn es als TDS heruntergeladen und in einem TEXMF-LOCAL-Verzeichnis installiert wird. Beachten Sie, dass Sie in einigen Fällen möglicherweise den Luatex-Cache neu erstellen müssen.

Beachten Sie, dass die benutzerdefinierte Schriftart nicht „aus dem Paketverzeichnis“ geladen wird. Vielmehr platziert das installierte Paket die Schriftart in einem geeigneten Verzeichnis, in dem Schriftarten sein sollen. Dies geschieht automatisch.

Als ich mit dem Erstellen dieser Dokumentklasse begann, hatte ich vor, genau das zu tun, was Sie in der Frage gefragt haben: Die Schriftart dort ablegen, wo sich die Paketdatei *.sty befindet. Das funktioniert jedoch nicht so einfach und ist eigentlich auch nicht notwendig, da das Paketinstallationsprogramm auch eine Schriftart installieren kann.

BEARBEITEN: Vor Kurzem fontspecwurde die Möglichkeit hinzugefügt, zu erkennen, ob eine Schriftart gefunden werden kann oder nicht, und unterschiedliche Aktionen auszuführen, je nachdem, ob die Schriftart vorhanden ist oder nicht. So ist es möglich, ein Makro zu schreiben, das Schriftart A anfordert, aber B verwendet, wenn A nicht gefunden wird, oder C verwendet, wenn weder A noch B gefunden werden, und schließlich mit einer Meldung anhält, wenn keine von beiden gefunden wird. Siehe die aktuelle fontspecDokumentation.

verwandte Informationen