von Patrick Gundlach |

Fontsampler IBM Plex

Die Firma IBM hat seine neue Hausschrift IBM Plex auf Github unter einer OpenSource-Lizenz verfügbar gemacht. Sie kann ohne Einschränkungen (SIL Font License) benutzt werden.

Die Gelegenheit habe ich mal genutzt, um ein Beispielblatt mit den Schriftarten zu erstellen. Den Weg hierzu möchte ich kurz beschreiben:

Als erstes habe ich die Schriftarten heruntergeladen und entpackt. Da der Publisher sowohl mit OpenType als auch mit TrueType umgehen kann, habe ich mich für die erste Variante entschieden. Die Schriftdateien (*.otf) habe ich einfach in ein Verzeichnis kopiert und mir die passende data.xml und layout.xml (siehe unten) erstellt. Hier ist die Verzeichnisstruktur abgebildet:

$ tree
.
├── data.xml
├── fonts
│   ├── IBMPlexMono-Bold.otf
...
│   └── IBMPlexSerif-ThinItalic.otf
└── layout.xml

Datendatei (data.xml)

Die Datendatei lässt sich einfach erstellen. Mit sp --list-fonts erhält man eine Ausgabe wie:

Filename                                 PostScript Name
-----------------------------------      ---------------
IBMPlexMono-Bold.otf                     IBMPlexMono-Bold
IBMPlexMono-BoldItalic.otf               IBMPlexMono-BoldItalic
IBMPlexMono-ExtraLight.otf               IBMPlexMono-ExtraLight
IBMPlexMono-ExtraLightItalic.otf         IBMPlexMono-ExtraLightItalic
IBMPlexMono-Italic.otf                   IBMPlexMono-Italic
IBMPlexMono-Light.otf                    IBMPlexMono-Light
IBMPlexMono-LightItalic.otf              IBMPlexMono-LightItalic
IBMPlexMono-Medium.otf                   IBMPlexMono-Medium
...

daraus kann man mit einem guten Texteditor leicht die folgende XML-Struktur erstellen:

<fonts>
  <font filename="IBMPlexMono-Bold.otf" psname="IBMPlexMono-Bold" />
  <font filename="IBMPlexMono-BoldItalic.otf" psname="IBMPlexMono-BoldItalic" />
  <font filename="IBMPlexMono-ExtraLight.otf" psname="IBMPlexMono-ExtraLight" />
  <font filename="IBMPlexMono-ExtraLightItalic.otf" psname="IBMPlexMono-ExtraLightItalic" />
  <font filename="IBMPlexMono-Italic.otf" psname="IBMPlexMono-Italic" />
  <font filename="IBMPlexMono-Light.otf" psname="IBMPlexMono-Light" />
  <font filename="IBMPlexMono-LightItalic.otf" psname="IBMPlexMono-LightItalic" />
  <font filename="IBMPlexMono-Medium.otf" psname="IBMPlexMono-Medium" />
 ...
</fonts>

Das ist dann die fertige Datendatei.

Layoutdatei (layout.xml)

Die Layoutdatei ist ähnlich einfach gestrickt.

<Layout xmlns="urn:speedata.de:2009/publisher/en"
  xmlns:sd="urn:speedata:2009/publisher/functions/en">

  <Record element="fonts">
      <ProcessNode select="font"/>
  </Record>

  <Record element="font">
    <LoadFontfile name="{@psname}" filename="{@filename}"/>
    <DefineFontfamily name="text" fontsize="10" leading="12">
      <Regular fontface="{@psname}"/>
    </DefineFontfamily>

    <PlaceObject>
      <Textblock>
        <Paragraph>
          <Value select="@psname"/>
          <Value>: Hello world! 1234567890 äöüß</Value>
        </Paragraph>
      </Textblock>
    </PlaceObject>
  </Record>

</Layout>

Hier wird für das Wurzelelement nur die Anweisung ausgeführt, für alle Kindelemente (font) weitere Anweisungen auszuführen.

Dort wird erst eine Schriftart geladen und dann eine Schriftfamilie definiert. Mit @psname und @filename greife ich auf die Attribute in der Datendatei des aktuellen Elements zu. Die geschweiften Klammern sind dann nötig, wenn der Befehl an dieser Stelle eigentlich einen festen Wert erwartet, ich aber einen dynamischen Wert angeben möchte.

Anschließend wird für jeden Font eine Textzeile ausgegeben.

Das Ergebnis

Nach dem Aufruf von sp im aktuellen Verzeichnis wird das PDF erzeugt und sieht so aus:

Die ersten Zeilen des Fontsamplers.

Die Dateien (ohne die Schriftdateien) kann man hier herunter laden.