7. Listen, Aufzählungen und Beschreibungslisten

XSL-FO bietet ein spezielles Konzept für listenartige Strukturen, mit dem sich so genannte geordnete Listen (jedes Listenelement bekommt eine Ordnungsbezeichnung, typischerweise eine fortlaufende Nummer), ungeordnete Listen bzw. Aufzählungen (jedes Listenelement bekommt ein gleiches Vorzeichen, typischerweise einen Spiegelstrich oder fetten Punkt oder – wie in diesem Buch – ein Kästchen) oder Beschreibungslisten (jedes Listenelement bekommt eine den Inhalt des jeweiligen Listenelements beschreibende Bezeichnung) gestalten lassen.

Das XSL-FO-Konzept für Listen besteht aus vier spezifischen Elementen:

Innerhalb von <fo:list-item-label> und <fo:list-item-body> stehen die normalen Blockelemente, typischerweise fo:block.

Die hierarchischen Beziehungen dieser listenspezifischen Elemente zeigt die folgende Grafik:

Listenblöcke

Listenblöcke

Der XSL-FO-Code einer einfachen Liste sieht wie folgt aus:

<fo:block>
   <fo:list-block>
      <fo:list-item>
         <fo:list-item-label>
            <fo:block>
               1.
            </fo:block>
         </fo:list-item-label>
         <fo:list-item-body>
            <fo:block>
               Der Text zum ersten Listenelement
            </fo:block>
         </fo:list-item-body>
      </fo:list-item>
      <fo:list-item>
         <fo:list-item-label>
            <fo:block>
               2.
            </fo:block>
         </fo:list-item-label>
         <fo:list-item-body>
            <fo:block>
               Der Text zum zweiten Listenelement
            </fo:block>
         </fo:list-item-body>
      </fo:list-item>
   </fo:list-block>
</fo:block>

Die typografische Umsetzung des hier vorgestellten Codes ist jedoch sehr unansehnlich, da wesentliche Informationen für die Gestaltung fehlen. Beispielsweise wird ohne definierte Abstandsattribute der Inhalt des Listenelement-Etiketts durch den Listenelement-Inhalt überlagert.

In der folgenden Grafik werden die verschiedenen Attribute, die der Abstandsregelung dienen, grafisch dargestellt:

Abstände in Listen

Abstände in Listen

(1) provisional-distance-between-starts gibt den Abstand zwischen dem Beginn des Listenelement-Etiketts und dem Beginn des Listenelement-Inhalts an. Als Attributwert wird ein absoluter Wert in einer beliebigen, unterstützten Maßeinheit erwartet.

(2) provisional-label-separation gibt den Abstand zwischen dem Ende des Listenelement-Etiketts und dem Beginn des Listenelement-Inhalts an. Als Attributwert wird ein absoluter Wert in einer beliebigen, unterstützten Maßeinheit erwartet.

(3) end-indent=“label-end()” gibt den Abstand vom Ende des Listenelement-Etiketts bis zum rechten Rand an. Die Funktion label-end() ermittelt hierbei diesen Abstand automatisch unter Berücksichtigung der provisional-distance-between-starts- und provisional-label-separation-Werte.

(4) start-indent=“body-start()” gibt den Abstand vom Ende des Listenelement-Etiketts bis zum Beginn des Listenelement-Inhalts an. Die Funktion body-start() ermittelt hierbei diesen Abstand automatisch unter Berücksichtigung der provisional-distance-between-starts- und provisional-label-separation-Werte.

(5) start-indent und end-indent von <fo:list-item-label> können ebenso durch Angabe von festen Werten erfolgen.

(6) start-indent und end-indent von <fo:list-item-body> können ebenso durch Angabe von festen Werten erfolgen.

Ein Beispiel mit einer Liste in zwei Ebenen:

<fo:block text-align="justify" font-size="15pt"> 
<fo:list-block provisional-distance-between-starts="10mm" end-indent="10mm" start-indent="10mm"> (1)
   <fo:list-item> 
      <fo:list-item-label end-indent="label-end()">   (2)
         <fo:block> 1. </fo:block> 
      </fo:list-item-label>
      <fo:list-item-body start-indent="body-start()"> (3)
         <fo:block> Bodytext Bodytext Bodytext Bodytext Bodytext Bodytext 
          Bodytext Bodytext Bodytext </fo:block> 
      </fo:list-item-body> 
   </fo:list-item>   
   <fo:list-item> 
      <fo:list-item-label end-indent="label-end()">   (2)
         <fo:block> 2. </fo:block>
      </fo:list-item-label> 
      <fo:list-item-body start-indent="body-start()"> (3)
         <fo:block> Bodytext Bodytext Bodytext Bodytext Bodytext Bodytext
          Bodytext Bodytext Bodytext </fo:block> 
      </fo:list-item-body> 
   </fo:list-item>
   <fo:list-item>
      <fo:list-item-label end-indent="label-end()">   (2)
      </fo:list-item-label> 
      <fo:list-item-body start-indent="body-start()"> (3)
         <fo:list-block provisional-distance-between-starts="10mm"> (4)
            <fo:list-item>
               <fo:list-item-label end-indent="label-end()">   (2)
                  <fo:block> 2.1 </fo:block> 
               </fo:list-item-label> 
               <fo:list-item-body start-indent="body-start()"> (3)
                  <fo:block> Bodytext Bodytext Bodytext Bodytext Bodytext Bodytext
                   Bodytext Bodytext Bodytext </fo:block>
               </fo:list-item-body>
           </fo:list-item>
        </fo:list-block>   
     </fo:list-item-body> 
   </fo:list-item> 
</fo:list-block>
</fo:block>

 

Formatierer-Ansicht

Formatierer-Ansicht

(1) Das Attribut provisional-distance-between-starts definiert den Abstand zwischen dem Start-Rand des Listenelement-Etiketts und dem Start-Rand des Listenelement-Inhalts. Die bereits bekannten Attribute end-indent und start-indent erzeugen Einrückungen am linken und rechten Rand.

(2) Der Wert des Attributs end-indent wird hier automatisch durch die Funktion label-end() ermittelt und bezeichnet den Abstand zwischen dem rechten Rand und dem Ende des Listenelement-Etiketts.

(3) Der Wert des Attributs start-indent wird hier automatisch durch die Funktion body-start() ermittelt und bezeichnet den Abstand zwischen dem linken Rand und dem Beginn des Listenelement-Inhalts.

(4) Eine Verschachtelung von Listen wird durch die Erzeugung einer zweiten Liste innerhalb des Elements <fo:list-item-body> erzeugt.

Zur Nummerierung von Listenelementen bleibt anzumerken, dass es keine XSL-FO-Elemente oder -Attribute gibt, die eine solche steuern bzw. generieren. Die Nummerierung muss, wenn sie automatisch erfolgen soll, mit dem XSLT-Element <xsl:number> erzeugt werden.

Die in ungeordneten Listen gern verwendeten Zeichen können entweder, wenn sie im Font nicht enthalten sind, aus anderen Fonts entliehen werden oder durch die Verwendung einer Grafik ersetzt werden.

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