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
- 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.10.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
- 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

# Bereiche auf der Seite (PositioningArea)

Die Seiten kann man in virtuelle Bereiche unterteilen. Dazu gibt man im Seitentyp (Pagetype) Rahmen an:

    <Pagetype name="seite" test="true()">
      <Margin left="1cm" right="1cm" top="1cm" bottom="1cm"/>
      <PositioningArea name="pagehead">
        <PositioningFrame width="19" height="2" row="1" column="1"/>
      </PositioningArea>
      <PositioningArea name="left">
        <PositioningFrame width="4" height="{sd:number-of-rows() - 3}" row="4" column="2"/>
      </PositioningArea>
      <PositioningArea name="text">
        <PositioningFrame width="10" height="{sd:number-of-rows() - 3}" row="4" column="8"/>
      </PositioningArea>
    </Pagetype>

Hier werden drei Bereiche definiert, die man mit dem Attribut `area="…​"` ansprechen kann, wenn es um die Ausgabe von Objekten oder um die Verschiebung des Cursors geht:

    <Record element="data">
      <PlaceObject area="pagehead">
        <Textblock>
          <Paragraph>
            <Value>pagehead, height of the area: </Value>
            <Value select="sd:number-of-rows('pagehead')"></Value>
          </Paragraph>
        </Textblock>
      </PlaceObject>
      <PlaceObject area="left">
        <Textblock>
          <Paragraph>
            <Value>left, height: </Value>
            <Value select="sd:number-of-rows('left')"></Value>
          </Paragraph>
        </Textblock>
      </PlaceObject>
      <PlaceObject area="text">
        <Textblock>
          <Paragraph>
            <Value>text, width: </Value>
            <Value select="sd:number-of-columns('text')"></Value>
          </Paragraph>
        </Textblock>
      </PlaceObject>
    </Record>

Die Bereiche der Seite werden mit area="…​" angesprochen. Manche Layoutfunktionen erlauben die Angabe eines Bereichs.

## Cursor

Der Cursor ist eine virtuelle Markierung, die nach jeder Ausgabe im Raster verschoben wird, sofern es nicht explizit unterbunden wird (`keepposition="yes"` bei `<PlaceObject>`). Die Markierung ist für jeden Bereich separat gesteuert. D. h. eine Ausgabe in einem Bereich hat keine Änderung des Cursors in einem anderen Bereich zur Folge. Wird ein Objekt ausgegeben, das bis zum rechten Rand reicht, springt der Cursor automatisch in die nächste freie Zeile. Der Cursor kann zeilenweise mit `<NextRow>` verschoben werden. Bei der Angabe von `rows="n"` wird der Cursor um n Zeilen tiefer gesetzt. Bei der Angabe von `row="n"` wird der Cursor in Zeile n gesetzt.

Folgendes Beispiel illustriert das Verhalten des Cursors.

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

      <Trace grid="yes"/>

      <Record element="data">
        ①
        <PlaceObject>
          <Box width="{sd:number-of-columns()}" height="1"/>
        </PlaceObject>
        <NextRow rows="1" />
        <PlaceObject>
          <Box width="{sd:number-of-columns()}" height="1"/>
        </PlaceObject>

        <NextRow rows="2" />

        <PlaceObject>
          <Box width="4" height="1"/>
        </PlaceObject>
        ②
        <NextRow rows="1" />
        <PlaceObject>
          <Box width="4" height="1"/>
        </PlaceObject>

      </Record>
    </Layout>

① Die beiden Objekte gehen über die gesamte Breite. Der Cursor springt automatisch in die nächste Zeile, sobald er hinter dem rechten Rand ist. Durch das `<NextRow>` entsteht die freie Zeile.

② Der Cursor ist nun in Zeile 6 und Spalte 5. Der folgende Zeilenvorschub setzt den Cursor in Zeile 7 und Spalte 1.

Das Verhalten von NextRow

## Überlauf von Texten in den nächsten Rahmen

Mit der Ausgabe von Texten über die Befehle `<Output>`/`<Text>` können Seitenumbrüche in Texten vorkommen, wie im Abschnitt Texte mit Seitenumbruch beschrieben. Das funktioniert nicht nur über Seitengrenzen, sondern auch über Bereiche auf den Seiten, sofern diese denselben Namen haben.

Als Beispiel dient diese Seitendefinition:

    <Pagetype name="page" test="true()">
      <Margin left="1cm" right="1cm" top="1cm" bottom="1cm"/>
      <PositioningArea name="text">
        <PositioningFrame width="4" height="17" row="2" column="1"/>
        <PositioningFrame width="4" height="10" row="3" column="6"/>
        <PositioningFrame width="4" height="24" row="1" column="11"/>
      </PositioningArea>
    </Pagetype>

Die Ausgabe wird über `<Output>` erzeugt:

    <Output area="text">
      <Text>
        <Paragraph>
          <Value select="sd:dummytext(3)"/>
        </Paragraph>
      </Text>
    </Output>

Der Text fließt automatisch in den nächsten freien Bereich. Falls notwendig, wird ein Seitenumbruch eingefügt.

Man kann auch den Wechsel eines Rahmens erzwingen. Mit `<NextFrame>` und der Angabe eines Bereiches (`area="…​"`) wird der Cursor oben links in den nächsten Rahmen gesetzt, ggf. wird ein Seitenumbruch eingefügt.

- Raster
- Dateiorganisation