Re: [docbook-apps] How do I customize docbook/fo stylesheet to do custom page breaks on sections?

From
Bob Stayton <>
Date
2011-10-08T06:45:45+00:00
ID
001901cc8585$e17c8340$6500a8c0@pazu
Thread
Re: [docbook-apps] How do I customize docbook/fo stylesheet to do custom page breaks on sections?
Hi Jon,

Unless global params, an attribute-set is evaluated 
each time it is used, in the context of the element being processed.  
So  putting an xsl:choose inside the body of an xsl:attribute element 
works, but be sure to include an xsl:otherwise so you don't get an empty 
attribute.

 

In your case, I would recommend adding a role 
attribute to the special chapter, rather than relying on its position in the 
document (which can change).  If you used <chapter 
role="StatementDefs">, then your stylesheet could use:

 

<xsl:attribute-set 
name="section.level1.properties">
  <xsl:attribute 
name="break-before">
    
<xsl:choose>
      <xsl:when 
test="ancestor::chapter/@role = 
'StatementDefs'">page</xsl:when>

      
<xsl:otherwise>auto</xsl:otherwise>
    
</xsl:choose>
  
</xsl:attribute>
</xsl:attribute-set>

This feature of XSLT is very handy for stuff like 
this.

 

Bob Stayton
Sagehill Enterprises


 

 

  
----- Original Message ----- 

  
From: 
  Jon 
  Rosen 

  
To:  
  

  
Sent: Thursday, October 06, 2011 12:39 
  PM

  
Subject: [docbook-apps] How do I 
  customize docbook/fo stylesheet to do custom page breaks on sections?

  

  

  
I have no idea if anyone on this forum will be familiar 
  enough with Docbook and the XSL-FO stylesheets for creating PDFs but I need to 
  figure out how to customize my stylesheet template so that I can do pagebreaks 
  differently for each chapter.

There is a standard param element to set 
  page breaks on sections:

<xsl:attribute-set 
  name="section.level1.properties">
<xsl:attribute 
  name="break-before">page</xsl:attribute>
</xsl:attribute-set>

But 
  this is universal, i.e., ALL chapters in the book get set with this property. 
  Chapter 4 has statement definitions for each element of our SQL language and 
  because of the layout, we would like each section to start on a new page. 
  However, the other chapters have lots of very small sections at the sect1 
  level and when they page-break, the book looks awful. 

So I want 
  chapter 4 to do this, but on the other chapters, I just want regular 
  non-breaking section 1 headings.

I figure I need some kind of "xsl:if" 
  statement that tests the chapter number and puts in this attribute 
  modification just for chapter 4 but I have no real idea how to find out what 
  variable has the chapter numbers to compare and where to put this test (xsl is 
  still a bit mysterious to me although I am getting more familiar all the 
  time). 

Any help would be GREATLY appreciated! 

Jon "bleurose" 
  Rosen


PS - 
  feel free to email me directly.

  
 

  
Jon 
  Rosen

  
"Sometimes you're the 
  pinball wizard, and sometimes you're just the 
  pinball."