OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [docbook-apps] single column title page and two-column body on same pdf page


Hi Brett,
Yes, it is possible to get the layout you want with the DocBook XSL 
stylesheets and fop.0.92.  You want to set the column-count for the 
page-master to 2, and then add a span="all" property to fo:block that 
contains your titlepage content.  Then your titlepage info will span the 
page, and the rest of the content will switch to two-column on the same 
page.

The trick is to get the span="all" into the outermost fo:block, because it 
doesn't work if the spanned fo:block is not a direct child of the fo:flow. 
That requires a customization of the match="article" template from 
fo/component.xsl.

In the following customization, various parameters are set, and the article 
template is changed only to add the span="all" property (just search for 
it) on the titlepage block.

I also use a customization of abstract to add 
space-after.conditionality="retain" to it.  In the transition from 
one-column to two-column layout, the reference area is reset,  so the 
normal space-after of the abstract is ignored by default.  That means there 
is no space between the bottom of the abstract and the top of the 
two-column text.   Using "retain" retains the space.  You'll need to do 
that to the last item in your titlepage information.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:fo="http://www.w3.org/1999/XSL/Format";
                version='1.0'>

<xsl:import href="../docbook-xsl-1.71.0/fo/docbook.xsl"/>

<xsl:output indent="no"/>

<xsl:param name="column.count.body">2</xsl:param>
<xsl:param name="fop1.extensions">1</xsl:param>
<xsl:param name="title.margin.left">0pt</xsl:param>
<xsl:param name="body.start.indent">0pt</xsl:param>
<xsl:param name="generate.toc">
article nop
</xsl:param>

<xsl:template match="article">
  <xsl:variable name="id">
    <xsl:call-template name="object.id"/>
  </xsl:variable>

  <xsl:variable name="master-reference">
    <xsl:call-template name="select.pagemaster"/>
  </xsl:variable>

  <fo:page-sequence hyphenate="{$hyphenate}"
                    master-reference="{$master-reference}">
    <xsl:attribute name="language">
      <xsl:call-template name="l10n.language"/>
    </xsl:attribute>
    <xsl:attribute name="format">
      <xsl:call-template name="page.number.format">
        <xsl:with-param name="master-reference" 
select="$master-reference"/>
      </xsl:call-template>
    </xsl:attribute>
    <xsl:attribute name="initial-page-number">
      <xsl:call-template name="initial.page.number">
        <xsl:with-param name="master-reference" 
select="$master-reference"/>
      </xsl:call-template>
    </xsl:attribute>

    <xsl:attribute name="force-page-count">
      <xsl:call-template name="force.page.count">
        <xsl:with-param name="master-reference" 
select="$master-reference"/>
      </xsl:call-template>
    </xsl:attribute>

    <xsl:attribute name="hyphenation-character">
      <xsl:call-template name="gentext">
        <xsl:with-param name="key" select="'hyphenation-character'"/>
      </xsl:call-template>
    </xsl:attribute>
    <xsl:attribute name="hyphenation-push-character-count">
      <xsl:call-template name="gentext">
        <xsl:with-param name="key" 
select="'hyphenation-push-character-count'"/>
      </xsl:call-template>
    </xsl:attribute>
    <xsl:attribute name="hyphenation-remain-character-count">
      <xsl:call-template name="gentext">
        <xsl:with-param name="key" 
select="'hyphenation-remain-character-count'"/>
      </xsl:call-template>
    </xsl:attribute>

    <xsl:apply-templates select="." mode="running.head.mode">
      <xsl:with-param name="master-reference" select="$master-reference"/>
    </xsl:apply-templates>

    <xsl:apply-templates select="." mode="running.foot.mode">
      <xsl:with-param name="master-reference" select="$master-reference"/>
    </xsl:apply-templates>

    <fo:flow flow-name="xsl-region-body">
      <xsl:call-template name="set.flow.properties">
        <xsl:with-param name="element" select="local-name(.)"/>
        <xsl:with-param name="master-reference" 
select="$master-reference"/>
      </xsl:call-template>

      <fo:block id="{$id}" span="all">
        <xsl:call-template name="article.titlepage"/>
      </fo:block>

      <xsl:variable name="toc.params">
        <xsl:call-template name="find.path.params">
          <xsl:with-param name="table" 
select="normalize-space($generate.toc)"/>
        </xsl:call-template>
      </xsl:variable>

      <xsl:if test="contains($toc.params, 'toc')">
        <xsl:call-template name="component.toc">
          <xsl:with-param name="toc.title.p"
                          select="contains($toc.params, 'title')"/>
        </xsl:call-template>
        <xsl:call-template name="component.toc.separator"/>
      </xsl:if>
      <xsl:apply-templates/>
    </fo:flow>
  </fo:page-sequence>
</xsl:template>

<xsl:template match="abstract" mode="titlepage.mode">
  <fo:block space-after.conditionality="retain" space-after="14pt">
    <xsl:call-template name="formal.object.heading">
      <xsl:with-param name="title">
        <xsl:apply-templates select="." mode="title.markup"/>
      </xsl:with-param>
    </xsl:call-template>
    <xsl:apply-templates mode="titlepage.mode"/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>


Bob Stayton
Sagehill Enterprises
DocBook Consulting
bobs@sagehill.net


----- Original Message ----- 
From: "Brett Gossage" <bgossage@invariant-corp.com>
To: <docbook-apps@lists.oasis-open.org>
Sent: Sunday, October 01, 2006 6:00 PM
Subject: [docbook-apps] single column title page and two-column body on 
same pdf page


> Technical articles often require two-column format with the title and
> abstract on the first page. With no page break between.
>
> I have a customization layer for pdf output that provides all the content
> and formatting to the get the title, abstract, and body in the format
> required. The page break remains unsolved. After considerable digging, in
> appears the title page and body are always generated in separate
> page-sequences which are required to generate page breaks in xsl:fo. My
> attempts to modify the templates to put them in the same page sequence
> result in fop (0.92) errors.
>
> IMO: Forcing all the content of an article into the "body" page master 
> seems
> too rigid. It would be nice to be able to have a stand-alone <article> 
> and
> set the column format for the title section <articleinfo> and body
> separately. What's required above is really formatting for the <bookinfo>
> not a title page.
>
> TIA
>
> Brett Gossage
>
> Invariant Corp
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
> For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org
>
>
> 




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]