Handbuch durchsuchen:

- Startseite
- Einleitung
- Hallo Welt!
- Grundlagen
  - Erstellen eines Layoutregelwerks
  - Aufbau der Datendatei und des Layoutregelwerks
  - Objekte ausgeben
  - Raster
  - Bereiche auf der Seite (PositioningArea)
  - Dateiorganisation
  - Silbentrennung / Spracheinstellungen
  - Einbinden von Schriftarten
  - Textformate
  - Textformatierung
  - Farben
- Programmierung
- Bilder einbinden
- Tabellen
- Fortgeschrittene Themen
  - Lesezeichen (Bookmarks)
  - Erzeugen von XML-Strukturen
  - Druckausgabe / Schnittmarken
  - CSS
  - Gruppen (virtuelle Objekte)
  - Virtuelle Seiten
  - Rotieren von Inhalten
  - Sortieren von Daten
  - Umfließen von Bildern
  - Seitentypen
  - Starten des Publishers über den Hotfolder
  - Lua-Filter / Datenvorverarbeitung
  - Schemavalidierung
  - Qualitätssicherung (PDF-Vergleich)
  - Fehlersuche / Debugging
  - Servermodus
  - Steuerung des Layouts beim Aufruf des Publishers
  - Bilder mit MetaPost erstellen und einbinden
- Kochbuch
  - Daumenregister
  - Mehrseitige PDF-Dateien einbinden
  - Layoutoptimierung mithilfe von Gruppen
  - Aufzählungslisten nachahmen
  - Verzeichnisse erstellen
  - Inhaltsverzeichnis in einem Durchlauf erstellen
  - Seitenzahlen: Seite x von y
- Installationsanleitung
- Dateinamen im Publisher
- Voreinstellungen im speedata Publisher
- Starten des Publishers über die Kommandozeile
- Konfiguration des Publishers
- Längenangaben und Maßeinheiten
- XPath- und Layoutfunktionen
- Interne Variablen
- XML Editor mit Schema verbinden
  - Visual Studio Code
  - OxygenXML
  - Atom
- Liste der Änderungen
- Glossar
- Kompatibilität mit anderer Software
- Befehlsreferenz
  - A
  - Action
  - AddSearchpath
  - AtPageCreation
  - AtPageShipout
  - AttachFile
  - Attribute
  - B
  - Barcode
  - Bold
  - BoldItalic
  - Bookmark
  - Box
  - Br
  - Case
  - Circle
  - ClearPage
  - Color
  - Column
  - Columns
  - Compatibility
  - Contents
  - Copy-of
  - DefineColor
  - DefineColorprofile
  - DefineFontalias
  - DefineFontfamily
  - DefineGraphic
  - DefineMatter
  - DefineTextformat
  - Element
  - Fallback
  - Fontface
  - ForAll
  - Frame
  - Grid
  - Group
  - Groupcontents
  - HSpace
  - Hyphenation
  - I
  - Image
  - Include
  - Initial
  - InsertPages
  - Italic
  - Layout
  - Li
  - LoadDataset
  - LoadFontfile
  - Loop
  - Makeindex
  - Margin
  - Mark
  - Message
  - NewPage
  - NextFrame
  - NextRow
  - NoBreak
  - Ol
  - Options
  - Otherwise
  - Output
  - Overlay
  - Pageformat
  - Pagetype
  - Paragraph
  - PDFOptions
  - PlaceObject
  - Position
  - PositioningArea
  - PositioningFrame
  - ProcessNode
  - Record
  - Regular
  - Rule
  - SaveDataset
  - SavePages
  - SetGrid
  - SetVariable
  - SortSequence
  - Stylesheet
  - Span
  - Sub
  - Sup
  - Switch
  - Table
  - TableNewPage
  - Tablefoot
  - Tablehead
  - Tablerule
  - Td
  - Text
  - Textblock
  - Tr
  - Trace
  - Transformation
  - U
  - Ul
  - Until
  - URL
  - Value
  - VSpace
  - While

Version 4.8.0
Handbuch durchsuchen

- Startseite
- Einleitung
- Hallo Welt!
- Grundlagen
  - Erstellen eines Layoutregelwerks
  - Aufbau der Datendatei und des Layoutregelwerks
  - Objekte ausgeben
  - Raster
  - Bereiche auf der Seite (PositioningArea)
  - Dateiorganisation
  - Silbentrennung / Spracheinstellungen
  - Einbinden von Schriftarten
  - Textformate
  - Textformatierung
  - Farben
- Programmierung
- Bilder einbinden
- Tabellen
- Fortgeschrittene Themen
  - Lesezeichen (Bookmarks)
  - Erzeugen von XML-Strukturen
  - Druckausgabe / Schnittmarken
  - CSS
  - Gruppen (virtuelle Objekte)
  - Virtuelle Seiten
  - Rotieren von Inhalten
  - Sortieren von Daten
  - Umfließen von Bildern
  - Seitentypen
  - Starten des Publishers über den Hotfolder
  - Lua-Filter / Datenvorverarbeitung
  - Schemavalidierung
  - Qualitätssicherung (PDF-Vergleich)
  - Fehlersuche / Debugging
  - Servermodus
  - Steuerung des Layouts beim Aufruf des Publishers
  - Bilder mit MetaPost erstellen und einbinden
- Kochbuch
  - Daumenregister
  - Mehrseitige PDF-Dateien einbinden
  - Layoutoptimierung mithilfe von Gruppen
  - Aufzählungslisten nachahmen
  - Verzeichnisse erstellen
  - Inhaltsverzeichnis in einem Durchlauf erstellen
  - Seitenzahlen: Seite x von y
- Installationsanleitung
- Dateinamen im Publisher
- Voreinstellungen im speedata Publisher
- Starten des Publishers über die Kommandozeile
- Konfiguration des Publishers
- Längenangaben und Maßeinheiten
- XPath- und Layoutfunktionen
- Interne Variablen
- XML Editor mit Schema verbinden
  - Visual Studio Code
  - OxygenXML
  - Atom
- Liste der Änderungen
- Glossar
- Kompatibilität mit anderer Software
- Befehlsreferenz
  - A
  - Action
  - AddSearchpath
  - AtPageCreation
  - AtPageShipout
  - AttachFile
  - Attribute
  - B
  - Barcode
  - Bold
  - BoldItalic
  - Bookmark
  - Box
  - Br
  - Case
  - Circle
  - ClearPage
  - Color
  - Column
  - Columns
  - Compatibility
  - Contents
  - Copy-of
  - DefineColor
  - DefineColorprofile
  - DefineFontalias
  - DefineFontfamily
  - DefineGraphic
  - DefineMatter
  - DefineTextformat
  - Element
  - Fallback
  - Fontface
  - ForAll
  - Frame
  - Grid
  - Group
  - Groupcontents
  - HSpace
  - Hyphenation
  - I
  - Image
  - Include
  - Initial
  - InsertPages
  - Italic
  - Layout
  - Li
  - LoadDataset
  - LoadFontfile
  - Loop
  - Makeindex
  - Margin
  - Mark
  - Message
  - NewPage
  - NextFrame
  - NextRow
  - NoBreak
  - Ol
  - Options
  - Otherwise
  - Output
  - Overlay
  - Pageformat
  - Pagetype
  - Paragraph
  - PDFOptions
  - PlaceObject
  - Position
  - PositioningArea
  - PositioningFrame
  - ProcessNode
  - Record
  - Regular
  - Rule
  - SaveDataset
  - SavePages
  - SetGrid
  - SetVariable
  - SortSequence
  - Stylesheet
  - Span
  - Sub
  - Sup
  - Switch
  - Table
  - TableNewPage
  - Tablefoot
  - Tablehead
  - Tablerule
  - Td
  - Text
  - Textblock
  - Tr
  - Trace
  - Transformation
  - U
  - Ul
  - Until
  - URL
  - Value
  - VSpace
  - While

- This manual in English

# Silbentrennung / Spracheinstellungen

Silbentrennung ist in den meisten westlichen Sprachen notwendig, um ein akzeptables Erscheinungsbild für schmale Texte zu haben. Silbentrennung ist ein integraler Bestandteil des Umbruchalgorithmus, beispielsweise weil vermieden werden soll, dass mehrere Trennungen in aufeinanderfolgenden Zeilen auftreten.

Die Silbentrennung wird im Publisher über die Sprache gesteuert und musterbasiert vorgenommen. Die Sprache kann man global einstellen über `<Options mainlanguage="…​">` oder Absatzweise.

    <Options mainlanguage="German" />

stellt das gesamte Dokument auf deutsche Trennmuster um, während

    <Paragraph language="German">
        <Value>Autobahn</Value>
    </Paragraph>

nur für einen Absatz die Sprache umstellt. Die verfügbaren Sprachen sind in der Befehlsreferenz unter `<Options>` beschrieben.

Alternativ zu den ausgeschriebenen Namen wie `German` kann auch der Sprachcode verwendet werden. Die beiden Beispiele oben können auch wie folgt benutzt werden:

    <Options mainlanguage="de" />

    <Paragraph language="de">
        <Value>Autobahn</Value>
    </Paragraph>

Möchte man testen, ob die Wörter richtig getrennt werden, kann man mit `<Trace hyphenation="yes" />` kleine Markierungen erzeugen lassen.

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

      <Options mainlanguage="German" />
      <Trace hyphenation="yes" />

      <Record element="data">
        <PlaceObject>
          <Textblock width="3">
            <Paragraph>
              <Value>Autobahn</Value>
            </Paragraph>
          </Textblock>
        </PlaceObject>
      </Record>
    </Layout>

ergibt folgendes:

Trennstellen anzeigen im Text

Mittels

    <Hyphenation>er-go-no-mic</Hyphenation>

kann man für einzelne Wörter Trennvorschläge bzw. -ausnahmen definieren. So werden die Wörter dann nur an den mit Bindestrich angegebenen Stellen getrennt. Die Trennausnahme gilt für die Hauptsprache des Dokuments. Mit dem Attribut `language` kann man die Sprache festlegen, für die die Trennausnahme gilt.

| Mit optischem Randausgleich, der im Abschnitt Optischer Randausgleich beschrieben ist, kann man die Anzahl der Silbentrennungen im Dokument etwas verringern.

## Trennungen für Absätze ausschalten

Für einzelne Absätze kann man die automatische Silbentrennung ausschalten, in dem man ein Textformat definiert mit `hyphenate="no"`

    <DefineTextformat name="nohyphen" hyphenate="no"/>

In so markierten Absätze werden keine Wörter getrennt. Die Anwendung von Textformaten ist in einem eigenen Abschnitt beschrieben.

Das Zeichen für die Silbentrennung kann man ebenfalls über ein Textformat verändern:

    <DefineTextformat name="dothyphen" hyphenchar="•"/>

Anderes Zeichen für Worttrennungen

## Verschiedene Sprachen innerhalb eines Absatzes benutzen

Man kann die Sprache für einen Textblock, einen Absatz und sogar für Teile eines Absatzes setzen. Dazu umgibt man den Text mit `<Span language="…​">` und `</Span>`.

    <Paragraph language="en">
      <Span language="de">
        <Value>Also schön, Guido Heffels,
               nachfolgend meine Textempfehlung
               für das Blindtextbuch.
        </Value>
      </Span>
      <Br />
      <Span>
        <Value>A wonderful serenity has taken
               possession of my entire soul, like these sweet
               mornings of spring which I enjoy with my whole
               heart.
        </Value>
      </Span>
    </Paragraph>

## Trennungen nur an bestimmten Zeichen zulassen

Eine Eigenschaft von `<Paragraph>` erlaubt die Zeichen einzugrenzen, an denen ein Zeilenumbruch eingefügt werden darf. Das ist bei technischen Daten oft wichtig, wo z. B. Typenbezeichnungen in der Form `12-345/AB` vorkommen, und nicht getrennt werden sollen. Im folgenden Beispiel darf nur hinter einem Schrägstrich umbrochen werden:

    <Paragraph allowbreak="/">
      <Value>https://download.speedata.de/publisher/development/</Value>
    </Paragraph>

Die Voreinstellung für `allowbreak` ist `" -"`, also ein Umbruch an einem Leerzeichen oder einem Trennstrich.

| Das ist ein experimentelles Feature im Publisher. Wahrscheinlich wird dies in einer zukünftigen Version einem Textformat zugeordnet werden.

## Spracheinstellungen für nicht-westliche Sprachen

Manche Sprachen haben besondere Satzregeln, die sich nicht auf die Silbentrennung auswirken, sondern auf das Erscheinungsbild des Textes. So können die Zeichen ihre Form oder Position verändern, je nach dem wo sie im Wort stehen. Um dieses Feature zu nutzen müssen folgende Bedingungen erfüllt sein:

1. `mode="harfbuzz"` muss bei `<LoadFontfile>` aktiviert sein.
2. Die Sprache sollte korrekt eingestellt sein. Falls die Sprache nicht in der Liste der unterstützten Sprachen vorhanden ist, muss `Other` oder `--` (zwei Striche) eingestellt werden. Wenn die Sprache nicht korrekt eingestellt ist, kann es zu Darstellungsproblemen kommen.
3. Die gewählte Schriftart muss die entsprechenden Zeichen enthalten.

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

        <LoadFontfile name="NotoSansBengali-Regular"
                      filename="NotoSansBengali-Regular.ttf"
                      mode="harfbuzz" />
        <DefineFontfamily fontsize="10" leading="12" name="text">
            <Regular fontface="NotoSansBengali-Regular" />
        </DefineFontfamily>

        <Record element="data">
            <PlaceObject>
                <Textblock>
                    <Paragraph language="Other">
                        <Value>আমি</Value>
                    </Paragraph>
                </Textblock>
            </PlaceObject>
        </Record>
    </Layout>

Die Sprache wird vom System selbst erkannt, wenn sie auf `Other` gesetzt ist.

## Rechts-nach-links laufender Text

Wird Text ausgegeben, der von rechts nach links läuft (z.B. Arabisch), muss die Richtung des Absatzes mit angegeben werden (`direction="rtl"`). Ansonsten ist die Ausrichtung ggf. falsch (die letzte Zeile ist dann linksbündig anstelle von rechtsbündig).

Falls kein Blocksatz ausgegeben wird, muss im Textformat bei der Ausrichtung `start` und `end` benutzt werden und nicht `leftaligned` und `rightaligned`. `start` und `end` orientieren sich an der Startposition des Textes und nicht an der Orientierung der Seite (Ausgabefläche).

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

      <LoadFontfile
        name="Amiri-Regular"
        filename="amiri-regular.ttf"
        mode="harfbuzz" />
      <DefineFontfamily fontsize="10" leading="12" name="text">
            <Regular fontface="Amiri-Regular" />
        </DefineFontfamily>

        <Record element="data">
            <PlaceObject>
                <Textblock width="5">
                    <Paragraph direction="rtl">
                      <Value select="."/>
                    </Paragraph>
                </Textblock>
            </PlaceObject>
        </Record>
    </Layout>

    <data>المادة 1 يولد جميع الناس أحرارًا متساوين في الكرامة والحقوق.
    وقد وهبوا عقلاً وضميرًا وعليهم أن يعامل بعضهم بعضًا بروح الإخاء.</data>

Der Text läuft von rechts nach links.

## Gemischter Text (rechts-nach-links und links-nach-rechts)

Wird Text ausgegeben, der sowohl von rechts nach links (rtl, right to left) als auch von links nach recht (ltr) läuft, muss der Absatz in einzelne Segmente unterteilt werden und zwischen den Segmenten die Schreibrichtung geändert werden. Dieser sogenannte »Bidi-Algorithmus« ist im speedata Publisher eingebaut und wird mit `bidi="yes"` aktiviert:

    <PlaceObject>
        <Textblock width="5">
            <Paragraph bidi="yes">
                <Value select="."/>
            </Paragraph>
        </Textblock>
    </PlaceObject>

    <data>العاشر ليونيكود (Unicode Conference)،
    الذي سيعقد في 10-12 آذار 1997 مبدينة</data>

Hier wird die Textrichtung für jedes Teilstück separat berechnet. Wird `bidi="yes"` angegeben, wird der erste Teil als Hauptrichtung des Absatzes genommen, in diesem Fall ist die Angabe `direction="rtl"` nicht notwendig

## Regeln für gemischten Text

- Setze das Attribut `direction`, wenn klar ist, in welchem Kontext der Text erscheinen soll. Wenn es leer oder nicht gesetzt ist, entscheidet der Inhalt des Textes, welche Richtung der Absatz haben soll. Das klappt in den meisten Fällen gut, aber beispielsweise nicht mit gemischtem Text, der mit einer »falschen« Richtung anfängt.
- Setze das Attribut `bidi` im Zweifelsfall auf `yes`. Der einzige Nachteil ist, dass der Publishing-Lauf etwas langsamer sein könnte. Andere Unterschiede sollten nicht auftreten.
- Die Spracheinstellung (`language`) sollte entweder die richtige Sprache beinhalten, leer sein oder auf die Sprache `Other` gesetzt werden. Das Problem ist, dass manche Spracheinstellungen eine unerwünschte Schreibrichtung erwirken können.
- Als Textausrichtung (`alignment` bei DefineTextformat) sollte anstelle von `left` oder `right` lieber `start` und `end` benutzt werden. `start` und `end` orientieren sich an der Richtung für den Absatz.
- Es muss der harfbuzz-Fontlader aktiviert sein.

- Dateiorganisation
- Einbinden von Schriftarten