Überschriften mit komplexen Nummerierungen

Überschriften mit generierten Nummerierungen in mehreren Ebenen lassen sich mit Hilfe von Tabellen befriedigend typografieren.

Es wird, analog zu Überschriften mit einfachen Nummerierungen, gezeigt, wie sich komplex nummerierte Überschriften mit Hilfe von Tabellenstrukturen gestalten lassen. Die Tabellenstruktur hier ist die gleiche wie im Abschnitt „Überschriften mit einfachen Nummerierungen“.
Auf eine Kommentierung wird hier deshalb verzichtet.

Auszug aus der DTD:

<!ELEMENT Teil (Titel, Beitrag+)>
<!ELEMENT Beitrag (Titel, ..., Abschnitt*)>                  ❶
<!ELEMENT Abschnitt (Titel, ..., Abschnitt*)>                ❶
<!ELEMENT Titel (#PCDATA | ...)*>

❶ Die erste Ebene ist die von Teilen, die zweite die von Beiträgen. Die Abschnitte in Beiträgen bilden die (optionale) dritte Ebene. Die Abschnitte sind rekursiv zulässig. Im folgenden Stylesheet soll die Ebene <Teil> nicht nummeriert werden. Die Ebene <Beitrag> soll durchgehend nummeriert werden (unabhängig in welchem Teil die Beiträge auftreten). Die Ebenen darunter (<Abschnitt>) werden bis in die dritte Unterebene nummeriert. Die Nummerierung hat also maximal das Format „1.1.1.1“.

Stylesheet:

<xsl:template match="Teil/Beitrag/Abschnitt/Titel">                                ❶
   <fo:block xsl:use-attribute-sets="Ueberschrift-Titel2" hyphenate="false">
      <fo:table width="110mm">
         <fo:table-column column-number="1" column-width="15mm"/> 
         <fo:table-column column-number="2" column-width="95mm"/>
         <fo:table-body>
            <fo:table-row>
               <fo:table-cell column-number="1">
                  <fo:block>
                     <xsl:number level="any" count="Teil/Beitrag" format="1."/>    ❷
                     <xsl:number level="multiple" count="Beitrag/Abschnitt |       ❸
                        Beitrag/Abschnitt/Abschnitt | Beitrag/Abschnitt/
                        Abschnitt/Abschnitt" format="1.1"/> 
                  </fo:block>
               </fo:table-cell>
               <fo:table-cell column-number="2">
                  <fo:block>
                     <xsl:apply-templates/>
                  </fo:block>
               </fo:table-cell>
            </fo:table-row>
         </fo:table-body> 
      </fo:table>
   </fo:block>
</xsl:template>

❶ Das Template bezieht sich lediglich auf Abschnitts-Überschriften in der ersten Abschnitts-Ebene.

❷ Das erste <xsl:number>-Element spezifiziert die Nummerierung der Beiträge. Für die Generierung besagt das Attribut level mit dem Wert any die fortlaufende Nummerierung über Teil-Grenzen hinweg, das Attribut count, was nummeriert werden soll (Beiträge), das Attribut format, wie die Nummerierung gestaltet werden soll (in arabischen Ziffern gefolgt von einem Punkt).

❸ Das zweite <xsl:number>-Element spezifiziert die Nummerierung der Abschnitte. Für die Generierung besagt das Attribut level mit dem Wert multiple, dass die Zählung bei Wechsel der darüber liegenden Ebene wieder mit Eins beginnen soll, das Attribut count, was nummeriert werden soll (Abschnitte bis in die dritte Unterebene), das Attribut format, wie die Nummerierung gestaltet werden soll (in arabischen Ziffern gefolgt von einem Punkt, die letzte Nummer ohne Punkt). Zu beachten ist, dass hier alle zu nummerierenden Ebenen im count-Attribut in „veroderter“ Form aufzuzählen sind.

 

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSL-FO bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © dpunkt.verlag GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSL-FO in der Praxis" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de