von Patrick Gundlach |

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.

Schriftgröße und Zeilenabstand

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>

Auszeichnungen im Layout

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" />

Mediävalziffern machen das Lesen der Ziffern oftmals angenehmer

Kapitälchen

<LoadFontfile name="M" filename="MinionPro-Regular.otf" smallcaps="yes" />

Echte Kapitälchen unterscheiden sich deutlich von rechnerisch verkleinerten Großbuchstaben. Die Strichstärke und Proportionen müssen angepasst werden.

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.

In der Serie »Feature der Woche« beschreibe ich jeden Montag mehr oder weniger nützliche Eigenschaften des Publishers. Kommentare gerne an mich per E-Mail oder einfach im Kommentarfeld.