Feature der Woche: Schriftarten einbinden
Das Einbinden von Schriftarten in den gängigen Formaten ist sehr einfach.
Unterstützt werden die Formate Type1 (Dateien .pfb
und .afm
) sowie
TrueType und OpenType (Dateien .ttf
und .otf
). TrueType collections sind
prinzipiell möglich, aber noch nicht freigeschaltet (hier hätte ich gerne ein
paar Testfälle).
Um dem Publisher Schriftarten bekannt zu machen und zu nutzen, sind zwei Schritte notwendig. Der erste Schritt ist das Laden einer Schriftdatei:
<LoadFontfile name="MinionRegular" filename="MinionPro-Regular.otf" />
Das weist dem Dateinamen MinionPro-Regular.otf
den internen Namen Regular
zu. Im zweiten
Schritt nutzt man dann diesen internen Namen, um Familien zu definieren:
<DefineFontfamily name="randnotiz" fontsize="9" leading="11">
<Regular fontface="MinionRegular"/>
</DefineFontfamily>
fontsize
bezeichnet die Schrifthöhe in Punkt, leading
den Abstand zwischen zwei Grundlinien.
Da eine Schriftfamilie aber aus den vier Varianten Regular
, Bold
,
BoldItalic
und Italic
besteht, könnten diese (müssen aber nicht)
auch mit definiert werden:
<LoadFontfile name="MinionRegular" filename="MinionPro-Regular.otf" />
<LoadFontfile name="MinionBold" filename="MinionPro-Bold.otf" />
<LoadFontfile name="MinionBoldIt" filename="MinionPro-BoldIt.otf" />
<LoadFontfile name="MinionIt" filename="MinionPro-It.otf" />
<DefineFontfamily name="randnotiz" fontsize="9" leading="11">
<Regular fontface="MinionRegular"/>
<Bold fontface="MinionBold"/>
<BoldItalic fontface="MinionBoldIt"/>
<Italic fontface="MinionIt"/>
</DefineFontfamily>
Benutzt wird dann die Schriftart auf verschiedene Weise: in den
Befehlen Barcode
, NoBreak
, Paragraph
, Text
, Textblock
und
Table
kann mit dem Attribut fontface
eine Schriftart mitgegeben
werden, z.B. <Paragraph fontface="randnotiz">
. Temporär kann mit
dem Befehl <Fontface fontface="...">
auf eine andere Familie
umgeschaltet werden.
Um auf die Schnitte Fett, Kursiv und Fett-kursiv umzuschalten, gibt es ebenfalls verschiedene Möglichkeiten. Die direkteste ist mit den Befehlen B
und I
umzuschalten:
<PlaceObject>
<Textblock fontface="randnotiz">
<Paragraph>
<Value>Mit </Value>
<B><Value>Blindheit</Value></B>
<Value> per </Value>
<I><Value>Definition</Value>
<Value> </Value>
<B><Value>geschlagen,</Value></B>
</I>
<Value> dennoch nicht unsichtbar.</Value>
</Paragraph>
</Textblock>
</PlaceObject>
Das funktioniert natürlich nur, wenn im Layout auf einen anderen Schnitt umgestellt werden soll. Ist in den Daten die Auszeichnung vorhanden (z.B. als HTML-Tags), dann geht das prinzipiell genau so:
<PlaceObject>
<Textblock fontface="randnotiz">
<Paragraph>
<Value select="."/>
</Paragraph>
</Textblock>
</PlaceObject>
mit den dazugehörigen Daten:
<data>Mit <b>Blindheit</b> per <i>Definition <b>geschlagen,</b></i>
dennoch nicht unsichtbar.</data>
Das Ergebnis ist dasselbe wie oben. In den Daten können die Tags auch
groß geschrieben werden: <B>
anstatt <b>
.
OpenType Features
Das OpenType Format kennt sogenannte OpenType Features. Das sind
Tabellen in der Schriftdatei, die der Publisher auswertet. Manche
dieser Features können bei LoadFontfile
aktiviert werden.
Mediävalziffern
<LoadFontfile name="M" filename="MinionPro-Regular.otf" oldstylefigures="yes" />
Kapitälchen
<LoadFontfile name="M" filename="MinionPro-Regular.otf" smallcaps="yes" />
Falls OpenType Features in der Schriftart vorhanden sind, aber nicht mit dem Publisher aktiviert werden können, bitte ich um eine (Fehler-)Meldung.
Ebenfalls mit LoadFontfile
angepasst werden können die natürliche Breite des Lerraums und der optische Randausgleich. Beides sind keine OpenType Features, aber trotzdem prinzipiell eine Eigenschaft der Schriftart. Daher gibt es die Parameter space
und marginprotrusion
bei diesem Befehl. Der optische Randausgleich wurde kurz letzte Woche behandelt (ganz unten).
In welchem Verzeichnis müssen die Schriftdateien denn liegen?
Der Publisher durchsucht das aktuelle Verzeichnis und alle Kindverzeichnisse nach Dateien, die für den Durchlauf benutzt werden können. Daher kann man einfach im Verzeichnis mit dem Layout und den Daten ein Verzeichnis »Fonts« erstellen und die Schriftdateien hinein kopieren. Der Name ist aber egal, ebenfalls die Tiefe des Verzeichnisses.
Man kann auch beim Aufruf sp --systemfonts
angeben und dann ohne
Installation auf die systemweiten Schriftdateien zugreifen.
Tipps und Tricks
Um sich Arbeit bei der Schriftdefinition zu sparen, kann man den Befehl
sp list-fonts --xml
benutzen. Dieser listet dann alle gefundenen Schriftdateien auf, zusammen mit einer Zeile, die direkt in das Layout übernommen werden kann.
> sp list-fonts --xml
<LoadFontfile name="DejaVuSans-Bold" filename="DejaVuSans-Bold.ttf" />
<LoadFontfile name="DejaVuSans-BoldOblique" filename="DejaVuSans-BoldOblique.ttf" />
<LoadFontfile name="DejaVuSans-ExtraLight" filename="DejaVuSans-ExtraLight.ttf" />
<LoadFontfile name="DejaVuSans-Oblique" filename="DejaVuSans-Oblique.ttf" />
<LoadFontfile name="DejaVuSans" filename="DejaVuSans.ttf" />
<LoadFontfile name="DejaVuSansCondensed-Bold" filename="DejaVuSansCondensed-Bold.ttf" />
<LoadFontfile name="DejaVuSansCondensed-BoldOblique" filename="DejaVuSansCondensed-BoldOblique.ttf" />
<LoadFontfile name="DejaVuSansCondensed-Oblique" filename="DejaVuSansCondensed-Oblique.ttf" />
<LoadFontfile name="DejaVuSansCondensed" filename="DejaVuSansCondensed.ttf" />
<LoadFontfile name="DejaVuSansMono-Bold" filename="DejaVuSansMono-Bold.ttf" />
<LoadFontfile name="DejaVuSansMono-BoldOblique" filename="DejaVuSansMono-BoldOblique.ttf" />
Noch ein Hinweis: wenn keine Schriftart für einen Absatz oder einen Textblock (etc.) angegeben wird, nutzt das System die Schriftfamilie text
, die im Publisher auch vordefiniert ist (siehe Handbuch):
<!-- die Vorgaben im Publisher -->
<LoadFontfile name="TeXGyreHeros-Regular" filename="texgyreheros-regular.otf" />
<LoadFontfile name="TeXGyreHeros-Bold" filename="texgyreheros-bold.otf" />
<LoadFontfile name="TeXGyreHeros-Italic" filename="texgyreheros-italic.otf" />
<LoadFontfile name="TeXGyreHeros-BoldItalic" filename="texgyreheros-bolditalic.otf" />
<DefineFontfamily name="text" fontsize="10" leading="12">
<Regular fontface="TeXGyreHeros-Regular"/>
<Bold fontface="TeXGyreHeros-Bold"/>
<Italic fontface="TeXGyreHeros-Italic"/>
<BoldItalic fontface="TeXGyreHeros-BoldItalic"/>
</DefineFontfamily>
Durch Neudefinition der Familie text
kann somit die Vorgabe für Texte, Tabellen etc. einfach verändert werden.